オススメ機能
Twitter
お気に入り
記事履歴
ランキング
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
[GDC 2018]西川善司の3DGE:DirectX Raytracingでゲームグラフィックスは何が変わるのか。「Quantum Break」のRemadyが示す,その方向性
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2018/03/21 13:36

イベント

[GDC 2018]西川善司の3DGE:DirectX Raytracingでゲームグラフィックスは何が変わるのか。「Quantum Break」のRemadyが示す,その方向性

 MicrosoftがDirectX 12にレイトレーシングのパイプラインを統合した「DirectX Raytracing」(略称DXR,以下略称表記)を発表し,大手ゲームエンジンが次々と対応表明を行っているというのは,GDC 2018における大きなトピックの1つだが(関連記事),独立系ゲームデベロッパの中にも早々とDXR対応をアナウンスしたところがある。古くは「Max Payne」,最近では「Quantum Break」(PC / Xbox One)で知られるフィンランドのゲーム開発スタジオ,Remedy Entertainment(以下,Remedy)だ。

Thomas Puha氏(Head of Communications, Remedy Entertainment)
 Remedyは,自社製ゲームエンジンで,Quantum Breakの開発にも採用した「Northlight」へDXRを組み込んだことを,GDC 2018初日となる北米時間2018年3月19日のセッション「Experiments with DirectX Raytracing in Remedy’s Northlight engine」(RemedyのNorthlightエンジンにおけるDXR試用実験)で報告した。
 なお,本来の講演予定者はリードグラフィックスプログラマーのTatu Aalto氏だったのだが,空路トラブルで欠席。今回は代打としてThomas Puha氏が登壇している。

 ともあれ,まずはDXR統合版NorthlightでRemedyが制作した技術デモを見てほしい。


 注目したいのは,描画結果から映り込みを得る画面座標系のリフレクション(Screen Space Reflections,SSR)では実現の困難な,

  • 画面外情景の映り込み表現
  • 投射距離に応じて鮮鋭度の違う影生成
  • より正確で安定な環境遮蔽による陰影
  • 間接光表現

あたりだ。もっとも,デモ自体はカメラがシーン内を固定軌道で移動するタイプなので,ちょっと分かりにくいかもしれないが。
 本稿では,セッションの内容を基に,この技術デモにおける見どころを解説していきたい。

DirectX


DXRアーキテクチャのおさらい


 筆者は別記事でDXRアーキテクチャの概要をお伝え済みだが,あらためて簡単におさらいしておこう。
 DXRでは,3Dシーンをボトム(=下位)とトップ(=上位)の2階層に分けて管理する。

3Dシーンをボトムとトップで管理。シーンを階層構造で管理するのは,モダンなレイトレーサーでは標準的なアプローチと言える
DirectX

 Remedyが開発した技術デモでは大小さまざまなソファが登場するが,それら3Dモデルのジオメトリデータをまずボトムとして定義することになる。

デモ映像のシーンを上から見下ろした,俯瞰のワイヤーフレーム図。本シーンに登場するオブジェクトを赤い四角で囲っているが,これがボトムレベルである
DirectX

 実際には,同一モデルのソファが異なる座標に配置されていたり,異なる角度で配置されていたりするが,これらは「同一3Dモデルのインスタンス違い」という扱いになる。

同一3Dモデルが複数個あり,それぞれが別のパラメータで存在している場合は,個別のインスタンスを与えて管理することになる
DirectX DirectX DirectX

 これらソファ群をひとくくりの箱ともいえる「Bounding Volume Hierarchy」(バウンディングボリューム階層構造,BVH)で括って定義したのがトップだ。

このスライドで青い箱がトップレベルを示す。レイとの衝突判定はまずトップレベルの箱単位で行い,ここで衝突が検出されると,より下のレベルでの衝突判定へと移行する流れである
DirectX

 視線の延長線上に投げられたレイは,画面上の各ピクセルから放たれて3D空間を突き進むが,このトップBVH構造体に衝突したところでBVHの中にレイを通し,当該BVH内にある3Dモデルのどれと衝突するかを判定することになる。
 衝突した3Dモデルがあれば,「衝突した3Dモデル」において実際に衝突した部分のライティングやシェーディング処理を行うために「Hit」あるいは「Any Hit」シェーダを実行するわけだ。
 どのトップBVH構造体にも衝突しなければレイはこの3Dシーンを突き抜けるので,「何にも衝突しませんでした」という処理を行う「Miss」シェーダを実行することになる。なお,各シェーダの詳細はDXRの概要解説記事を参照してほしい。

 BVHでグループ分けのようなことをするのは,3D空間内で3Dオブジェクトとレイの衝突判定を効率よく行うためである。シーン内に登場する全オブジェクト1つ1つとの判定をやると処理負荷が高すぎるが,この手法であれば,「そもそも今回のレイと衝突しないのは明白なグループ」を効率よく排除することができるため,処理負荷の軽減につながるのだ。


アンビエントオクルージョンをDXRベースで行うとどうなるのか


 セッションでPuha氏が「(技術デモムービーの)チェックポイント」として紹介したのは,存在するオブジェクトによって遮蔽されてできる陰影(=Ambient Occlusion,アンビエントオクルージョン)だ。
 下に示したスライドは,左側が従来のレンダリング手法であるラスタライズ法によるもの,右がレイトレーシング法,すなわちDXRによるものである。

アンビエントオクルージョンの描画結果。左がラスタライズ法を用いたときのもの,右がDXRによるレイトレーシング法によるものとなる
DirectX

 左は「スクリーンスペース・アンビエントオクルージョン」(Screen Space Ambient Occlusion,以下 SSAO)によるものである。SSAOは,3Dシーンの描画を終えた後で深度情報パッファ(=Zバッファ)を探査して,凹んでいる箇所に陰影を付けていく疑似的な陰影付与方法なのだが,かなりいい具合に「陰色」が付いているのが分かるだろう。
 ただ,よく見ると,奥にある一人掛けのソファや,奥の柱の輪郭では陰影が欠如していたり,本来なら遮蔽によって暗くなるべきプラネタリウム装置の下側が妙に明るくなっていたりするのも分かる。これは,Zバッファの凹凸具合だけ,すなわち2.5D的な概念にのみ則って陰影を付けているからで,実際に3D的な処理を行っているわけでないから起こる弊害だが,いま述べたような問題からDXR版は解放されており,自然だ。

 また,手前のソファが床に接地するあたりなど,暗すぎる部分もある。ソファの脚があるあたりには光が入り込んでいるはずなのに,SSAOだとソファの下は一様に暗い。DXR版のほうだと,たとえソファの下であっても,光が入り込んでくる範囲はやや明るくなっており,ソファの中央部に向かって暗くなるグラデーションを確認できる。

 ならDXRは完璧かというとそうでもなく,課題もある。それは,DXR版のほうがノイジーだということだ。
 今回Remedyが実装したDXRベースのアンビエントオクルージョンは,レイが衝突する先の3Dオブジェクトの接平面からコサイン分布(=円放射状)的にレイを4mの範囲で放って遮蔽度合いを求めるもので,遮蔽探査アルゴリズム的にはSSAOに近いものを採用しているのだが,上の作例ではAmbient Occlusion生成用のレイを1ピクセルから4本しか放っていない。それでも,フルHDの全ピクセルである約200万ピクセルからレイを1本放出する,つまり約200万レイを放つごとに5msの負荷がかかるそうだ。

 ちなみに,品質の変化を見るべく,1ピクセルあたりのレイ数(ray per pixel,rpp)を1,2,4,16本と切り換えていったときの結果をまとめたものが下のスライドだ。16rppにもなると,かなりSSAOに近い,ノイズの少ない品質に到達している。ただ,このときの処理時間は80ms(5ms×16本)になってしまう。60fpsのゲームにおける1フレームあたりの描画時間は約16.67msだから,ここまでやってしまうとさすがに「リアルタイム」とは言えない。

各ピクセルから放つレイの数を増やせば品質は上がる。しかし負荷も高まる
DirectX


影生成をDXRベースで行うとどうなるのか


 続いては影生成だ。
 今日(こんにち)におけるラスタライズ法の影生成というとデプスシャドウ(Depth Shadow)技法が主流だが,デプスシャドウ技法によって生成する影は,「光源から3Dオブジェクトまでの距離情報」をテクスチャに出力した「シャドウマップ」の解像度によって品質が左右される。広大な屋外シーンでは,このシャドウマップの解像度を大きく確保したり,あるいは「カスケードシャドウマップ」(Cascaded Shadow Maps)として複数枚確保したりと,いろいろチューニングが大変だったりする。

 GDC 2018におけるRemedyのデモでは,光源となる太陽(=平行光源)に向かって各ピクセルから1本のレイを放っている。そのうえで,レイが最初の遮蔽物に衝突したら,その周囲の8点に対し,ランダムなサンプリングを等距離間隔で行う手法である「ブルーノイズサンプリング」(Blue Noise Sampling)を行って遮蔽度を算出。そしてその結果を持ち帰って,見合った濃さの影を生成するという処理の流れだ。

 下に示したスライドの左側は,ラスタライズ法でカスケードシャドウマップを用いたデプスシャドウ技法による描画結果。右側が,DXRによるレイトレーシング法の影生成の描画結果になる。

左側が,従来のレンダリング技法であるラスタライズ法ベースでカスケードシャドウマップを用いたデプスシャドウ技法による描画結果。右はDXRによるレイトレーシング法を用いたときの描画結果
DirectX

 一見,大差ないように見えるが,注目すべき点はやはり多い。
 今回のデモにおいてデプスシャドウ技法で生成される影は,影を描画した後で16点をサンプリングし,空間的なボカし処理(16PCF,16 Percent Closer Filter)を適用していることもあり,すべての影が一様にボケてしまっている。これはこれで見た目は悪くないものの,物理的には正確ではない。

 それに対してDXR法のほうだと,椅子の座面に落ちている背もたれの影や,テーブルに置いてある小物の影がシャープだ。
 現実世界の影は,周囲の環境光の影響,あるいは光源自体に大きさがあることにより,影の投射距離が長くなるとボケが強まる傾向にある。DXR法の影はレイトレーシング法であるがゆえに,投射距離の短い局所的な影は自然とシャープに描画され,長くなればボケ味が強まり,より現実世界に近い影の出方になっているのが分かるだろう。

影の投射距離に注意して,こちらのスライドを観察すると,正確性の違いが分かるだろう。一様にボケているのが左のデプスシャドウ法,投射距離に応じてボケ具合が変わっているのが右のDXR法だ
DirectX

 負荷としては,フルHDの全ピクセルとなる約200万ピクセルからレイを1本放出するごとに4msずつ掛かるという。シーン内に複数の光源がある場合,光源ごとに影を出そうとすると,その分だけ負荷は倍々ゲームで増加するということだ。
 もちろん,局所的な光源は照射範囲が狭いので,光源の数がそのままリニアに負荷を増大させるわけではないが,いずれにせよ,こちらもなかなかの負荷率ではある。


映り込みの鏡像表現をDXRベースで行うとどうなるのか


 Puha氏は,床や水面に生じる「映り込み」などの鏡像を得るための仕組みについても言及している。こちらは,より「レイトレーシング法らしい」特徴が現れるDXRの活用だと言える。

 レイトレーシングでは,放ったレイが3Dオブジェクトに衝突すると,当該3Dオブジェクトにおいて衝突した材質のライティングやシェーディングを行う処理系が発動する。これを行うのはHitシェーダなどである。
 ……と,一言でまとめるのは簡単だが,これはつまり「3Dオブジェクトのジオメトリ情報」(=ポリゴンデータの集まり)と「テクスチャデータ」,「その他の付随データ」をすべてHitシェーダから参照できるようなデータ管理法が必要になるということだ。

 DXRを統合したDirectX 12では,そんなレイトレーシング向けのデータバインディングシステムが提供されるという。
 Remedyの場合は,Quantum Breakの開発時から,ライティングやシェーディングに必要なデータ群を3Dオブジェクトごとにひとかたまりで管理する仕組みをNorthlightエンジンで採用していたため,「DXRを使ったライティング&シェーディングシステムへの移行は,それほど大変ではなかった」と,Puha氏は振り返っていた。

GDC 2018版デモにおける,ある3Dオブジェクトの付随するひとかたまりのデータ群。詳細への言及はなかったが,見た感じ,テクスチャ素材や材質特性パラメータなどのようだ
DirectX

 それを踏まえて,今回はツルツルした3Dオブジェクトへの映り込みについて解説してみたい。
 次に示す2枚のスクリーンショットは,上が鏡像をDXRによるレイトレーシングで得たもの,下が従来のレンダリング手法であるラスタライズ法では定番となりつつある鏡像生成手法「スクリーンスペースリフレクション」(Screen Space Reflection,以下 SSR)で得たものだ。
 SSRは視点から普通に描画した描画結果フレームから鏡像を生成する,チカラワザのテクニックだ。SSRはその特性上,画面外に存在するオブジェクトや情景を映り込ませることができない。結果,ぱっと見て分かる違いとして,中央の電気スタンドのフードとソルト&ペッパーミル,そしてカトラリースタンド(※ナイフやフォークが入った筒)の鏡像表現に大きな違いが生じている。

DirectX
レイトレーシングによる鏡像を適用した描画結果
DirectX
SSRによる鏡像を適用した描画結果

 Puha氏はここで2か所に点を打ち,線を引いたが,それを見ると,電気スタンドのフードに本来映り込むべき画面外の情景,そしてカトラリースタンドに本来映り込むべきソルトミルが,DXRによるレイトレーシングによる鏡像だと正しく映り込むのに対して,SSRだとそうではないのが,よりはっきりするだろう。

DirectX
レイトレーシングによる鏡像を適用した描画結果,点と線付き
DirectX
SSRによる鏡像が適用した描画結果,点と点線付き

 映り込みを正しく表現するためには,電気スタンドフードとカトラリースタンド表面の材質に対してライティングおよびシェーディング処理を行えるだけでなく,視線の反射方向に投射されたレイが視界外の3Dオブジェクト――今回の例で言えば部屋の天井や視点から見たソルトミルの背面側――に衝突して,さらにその表面材質に対するライティングやシェーディング処理も行える必要がある。だからこそ,本段落の冒頭で述べた,さまざまなデータに対してHitシェーダから参照できること,言うならば「データのアクセシビリティ」が重要になるというわけなのだ。

 さて,セッションでPuha氏は,興味深い要素分解ショットも公開してくれた。放たれたレイが3Dオブジェクトに衝突した場合,衝突した先の3Dオブジェクトが持つさまざまなデータをレイの発射元に持ち帰ることができるわけだが,それらを個別に見たものだ。
 なお,以下に紹介するの7枚のスクリーンショットはあくまでも「興味深い画像」であって,「映像としての意味」はあまりないので,その点はご注意を。

 というわけで順に見ていくと,下に示したのは,「放たれたレイが衝突するまでに旅した距離」を描画したものだ。放ったレイが長い距離を旅したピクセルほど白く,短いほど黒くなる。

レイの進行距離を可視化した画面。オブジェクト同士がごちゃごちゃしているところは黒っぽい描画になっている
DirectX

 次は,テクスチャの割り当て対応を示すテクスチャ座標(UV)だ。

テクスチャの割り当て対応を示すテクスチャ座標を可視化したもの。見ていてそれほど面白い画面でもない(笑)
DirectX

 お次がディフューズアルベド(Diffuse Albedo)だ。これは言ってしまえば「素材の色」みたいなもので,主にテクスチャで表すことになる。

ディフューズアルベドのみを可視化。視線が反射した延長線上のものをちゃんと持ち帰っているのが分かる
DirectX

 続いては,視線の反射方向にある3Dオブジェクトの鏡像を,ライティング済みで持って来たものだ。
 フレネル反射や,各材質の面の粗さなどは配慮していないため,すべてのオブジェクトがツルツルの鏡でできた世界のような描画になっていて面白い。

鏡像をライティング済みで持ち帰ったもの
DirectX

 フレネル反射の具合を表す「フレネル項」を可視化したものが下のスクリーンショットだ。これは,視線の角度に応じて当該材質自体の「素地の陰影」と鏡像との出方の割合を示したパラメータである。
 白ければ白いほど鏡像が強く出て,黒っぽければ黒っぽいほど鏡像の影響が弱く,材質自体が持つ素地の陰影が出やすくなる。

フレネル項を可視化したもの
DirectX

 最後はフレネル反射とライティング結果,鏡像を掛け算で統合したものだ。素材の反射特性がよく分かる。

直近に示した2つのスクリーンショットを統合したもの
DirectX

 Puha氏によれば,「短期間の実装となったため,放ったレイの少なさによるノイジーな描画結果が見えてしまっているが,これが対処すべき課題であることは認識している。また,解決策も見えている」とのことだった。
 「いつまでに改善する」というコメントはなかったが,今夏開催予定のSIGGRAPH 2018あたりで,アップデート版が出てくるかもしれない。

あらためて最終出力がこちら
DirectX


ゲームグラフィックスの新しい進化が今始まる!?


 セッションでPuha氏は,事前計算ベースとなる拡散光のみの大局照明システムとDXRベースのアンビエントオクルージョンをNorthlightエンジン上で統合したとき,より自然に見えるチューニングの話題にも触れていたが,Northlightエンジン固有のテーマだったため,本稿では省略する。ただ,従来のレンダリング技法であるラスタライズベースの描画と,DXRによるレイトレーシングによる描画との融合をより自然に見せるためには,ゲームエンジン固有のチューニングが必要だというのは伝わってきたことを付記しておきたい。

DirectX
ピクセルあたり1本のレイでライティングすると,たまたまレイの衝突先がハイライト箇所だったりした場合,それが描画結果において支配的に反映されてしまい,蛍の光のような描画が出てしまうこともあるとPuha氏
DirectX
これを避けるために,明るいピクセルに対して複数のレイを投げるようにすると,この不思議な現象(=エラー)を低減できる。まさにTIPSといったところだが,要はこういうチューニングが必要になるわけだ

 DXRの活用が,新しいゲームグラフィックスを実現するための,新しい主流になることはほぼ間違いだろう。同時に,今後のグラフィックスエンジンに「新しいチューニング要素」を誕生させてしまった感も否めないが,そのチューニング周りこそが次世代のゲームグラフィックスにおける見どころになっていくはずで,ユーザー側としては,そうした進化の過程を見ていく楽しみが出てきたとも言える。
 そしてなにより,GPUに新しい性能強化の方向性を示したとも言え,今後のGPUの戦局にも大きな影響を与えそうで興味深い。

RemedyのNorthlight公式情報ページ(英語)


4GamerのGDC 2018記事一覧

  • 関連タイトル:

    DirectX

  • この記事のURL:
line
4Gamer.net最新情報
最新記事一覧へ新着記事10件
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:06月24日〜06月25日