イベント
[GDC 2018]西川善司の3DGE:DirectX Raytracingでゲームグラフィックスは何が変わるのか。「Quantum Break」のRemedyが示す,その方向性
なお,本来の講演予定者はリードグラフィックスプログラマーのTatu Aalto氏だったのだが,空路トラブルで欠席。今回は代打としてThomas Puha氏が登壇している。
ともあれ,まずはDXR統合版NorthlightでRemedyが制作した技術デモを見てほしい。
注目したいのは,描画結果から映り込みを得る画面座標系のリフレクション(Screen Space Reflections,SSR)では実現の困難な,
- 画面外情景の映り込み表現
- 投射距離に応じて鮮鋭度の違う影生成
- より正確で安定な環境遮蔽による陰影
- 間接光表現
あたりだ。もっとも,デモ自体はカメラがシーン内を固定軌道で移動するタイプなので,ちょっと分かりにくいかもしれないが。
本稿では,セッションの内容を基に,この技術デモにおける見どころを解説していきたい。
DXRアーキテクチャのおさらい
筆者は別記事でDXRアーキテクチャの概要をお伝え済みだが,あらためて簡単におさらいしておこう。
DXRでは,3Dシーンをボトム(=下位)とトップ(=上位)の2階層に分けて管理する。
Remedyが開発した技術デモでは大小さまざまなソファが登場するが,それら3Dモデルのジオメトリデータをまずボトムとして定義することになる。
実際には,同一モデルのソファが異なる座標に配置されていたり,異なる角度で配置されていたりするが,これらは「同一3Dモデルのインスタンス違い」という扱いになる。
これらソファ群をひとくくりの箱ともいえる「Bounding Volume Hierarchy」(バウンディングボリューム階層構造,BVH)で括って定義したのがトップだ。
視線の延長線上に投げられたレイは,画面上の各ピクセルから放たれて3D空間を突き進むが,このトップBVH構造体に衝突したところでBVHの中にレイを通し,当該BVH内にある3Dモデルのどれと衝突するかを判定することになる。
衝突した3Dモデルがあれば,「衝突した3Dモデル」において実際に衝突した部分のライティングやシェーディング処理を行うために「Hit」あるいは「Any Hit」シェーダを実行するわけだ。
どのトップBVH構造体にも衝突しなければレイはこの3Dシーンを突き抜けるので,「何にも衝突しませんでした」という処理を行う「Miss」シェーダを実行することになる。なお,各シェーダの詳細はDXRの概要解説記事を参照してほしい。
BVHでグループ分けのようなことをするのは,3D空間内で3Dオブジェクトとレイの衝突判定を効率よく行うためである。シーン内に登場する全オブジェクト1つ1つとの判定をやると処理負荷が高すぎるが,この手法であれば,「そもそも今回のレイと衝突しないのは明白なグループ」を効率よく排除することができるため,処理負荷の軽減につながるのだ。
アンビエントオクルージョンをDXRベースで行うとどうなるのか
セッションでPuha氏が「(技術デモムービーの)チェックポイント」として紹介したのは,存在するオブジェクトによって遮蔽されてできる陰影(=Ambient Occlusion,アンビエントオクルージョン)だ。
下に示したスライドは,左側が従来のレンダリング手法であるラスタライズ法によるもの,右がレイトレーシング法,すなわちDXRによるものである。
左は「スクリーンスペース・アンビエントオクルージョン」(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,
影生成をDXRベースで行うとどうなるのか
続いては影生成だ。
今日(こんにち)におけるラスタライズ法の影生成というとデプスシャドウ(Depth Shadow)技法が主流だが,デプスシャドウ技法によって生成する影は,「光源から3Dオブジェクトまでの距離情報」をテクスチャに出力した「シャドウマップ」の解像度によって品質が左右される。広大な屋外シーンでは,このシャドウマップの解像度を大きく確保したり,あるいは「カスケードシャドウマップ」(Cascaded Shadow Maps)として複数枚確保したりと,いろいろチューニングが大変だったりする。
GDC 2018におけるRemedyのデモでは,光源となる太陽(=平行光源)に向かって各ピクセルから1本のレイを放っている。そのうえで,レイが最初の遮蔽物に衝突したら,その周囲の8点に対し,ランダムなサンプリングを等距離間隔で行う手法である「ブルーノイズサンプリング」(Blue Noise Sampling)を行って遮蔽度を算出。そしてその結果を持ち帰って,見合った濃さの影を生成するという処理の流れだ。
下に示したスライドの左側は,ラスタライズ法でカスケードシャドウマップを用いたデプスシャドウ技法による描画結果。右側が,DXRによるレイトレーシング法の影生成の描画結果になる。
一見,大差ないように見えるが,注目すべき点はやはり多い。
今回のデモにおいてデプスシャドウ技法で生成される影は,影を描画した後で16点をサンプリングし,空間的なボカし処理(16PCF,16 Percent Closer Filter)を適用していることもあり,すべての影が一様にボケてしまっている。これはこれで見た目は悪くないものの,物理的には正確ではない。
それに対してDXR法のほうだと,椅子の座面に落ちている背もたれの影や,テーブルに置いてある小物の影がシャープだ。
現実世界の影は,周囲の環境光の影響,あるいは光源自体に大きさがあることにより,影の投射距離が長くなるとボケが強まる傾向にある。DXR法の影はレイトレーシング法であるがゆえに,投射距離の短い局所的な影は自然とシャープに描画され,長くなればボケ味が強まり,より現実世界に近い影の出方になっているのが分かるだろう。
負荷としては,フルHDの全ピクセルとなる約200万ピクセルからレイを1本放出するごとに4msずつ掛かるという。シーン内に複数の光源がある場合,光源ごとに影を出そうとすると,その分だけ負荷は倍々ゲームで増加するということだ。
もちろん,局所的な光源は照射範囲が狭いので,光源の数がそのままリニアに負荷を増大させるわけではないが,いずれにせよ,こちらもなかなかの負荷率ではある。
映り込みの鏡像表現をDXRベースで行うとどうなるのか
Puha氏は,床や水面に生じる「映り込み」などの鏡像を得るための仕組みについても言及している。こちらは,より「レイトレーシング法らしい」特徴が現れるDXRの活用だと言える。
レイトレーシングでは,放ったレイが3Dオブジェクトに衝突すると,当該3Dオブジェクトにおいて衝突した材質のライティングやシェーディングを行う処理系が発動する。これを行うのはHitシェーダなどである。
……と,一言でまとめるのは簡単だが,これはつまり「3Dオブジェクトのジオメトリ情報」(=ポリゴンデータの集まり)と「テクスチャデータ」,「その他の付随データ」をすべてHitシェーダから参照できるようなデータ管理法が必要になるということだ。
DXRを統合したDirectX 12では,そんなレイトレーシング向けのデータバインディングシステムが提供されるという。
Remedyの場合は,Quantum Breakの開発時から,ライティングやシェーディングに必要なデータ群を3Dオブジェクトごとにひとかたまりで管理する仕組みをNorthlightエンジンで採用していたため,「DXRを使ったライティング&シェーディングシステムへの移行は,それほど大変ではなかった」と,Puha氏は振り返っていた。
それを踏まえて,今回はツルツルした3Dオブジェクトへの映り込みについて解説してみたい。
次に示す2枚のスクリーンショットは,上が鏡像をDXRによるレイトレーシングで得たもの,下が従来のレンダリング手法であるラスタライズ法では定番となりつつある鏡像生成手法「スクリーンスペースリフレクション」(Screen Space Reflection,以下 SSR)で得たものだ。
SSRは視点から普通に描画した描画結果フレームから鏡像を生成する,チカラワザのテクニックだ。SSRはその特性上,画面外に存在するオブジェクトや情景を映り込ませることができない。結果,ぱっと見て分かる違いとして,中央の電気スタンドのフードとソルト&ペッパーミル,そしてカトラリースタンド(※ナイフやフォークが入った筒)の鏡像表現に大きな違いが生じている。
レイトレーシングによる鏡像を適用した描画結果 |
SSRによる鏡像を適用した描画結果 |
Puha氏はここで2か所に点を打ち,線を引いたが,それを見ると,電気スタンドのフードに本来映り込むべき画面外の情景,そしてカトラリースタンドに本来映り込むべきソルトミルが,DXRによるレイトレーシングによる鏡像だと正しく映り込むのに対して,SSRだとそうではないのが,よりはっきりするだろう。
レイトレーシングによる鏡像を適用した描画結果,点と線付き |
SSRによる鏡像が適用した描画結果,点と点線付き |
映り込みを正しく表現するためには,電気スタンドフードとカトラリースタンド表面の材質に対してライティングおよびシェーディング処理を行えるだけでなく,視線の反射方向に投射されたレイが視界外の3Dオブジェクト――今回の例で言えば部屋の天井や視点から見たソルトミルの背面側――に衝突して,さらにその表面材質に対するライティングやシェーディング処理も行える必要がある。だからこそ,本段落の冒頭で述べた,さまざまなデータに対してHitシェーダから参照できること,言うならば「データのアクセシビリティ」が重要になるというわけなのだ。
さて,セッションでPuha氏は,興味深い要素分解ショットも公開してくれた。放たれたレイが3Dオブジェクトに衝突した場合,衝突した先の3Dオブジェクトが持つさまざまなデータをレイの発射元に持ち帰ることができるわけだが,それらを個別に見たものだ。
なお,以下に紹介するの7枚のスクリーンショットはあくまでも「興味深い画像」であって,「映像としての意味」はあまりないので,その点はご注意を。
というわけで順に見ていくと,下に示したのは,「放たれたレイが衝突するまでに旅した距離」を描画したものだ。放ったレイが長い距離を旅したピクセルほど白く,短いほど黒くなる。
次は,テクスチャの割り当て対応を示すテクスチャ座標(UV)だ。
お次がディフューズアルベド(Diffuse Albedo)だ。これは言ってしまえば「素材の色」みたいなもので,主にテクスチャで表すことになる。
続いては,視線の反射方向にある3Dオブジェクトの鏡像を,ライティング済みで持って来たものだ。
フレネル反射や,各材質の面の粗さなどは配慮していないため,すべてのオブジェクトがツルツルの鏡でできた世界のような描画になっていて面白い。
フレネル反射の具合を表す「フレネル項」を可視化したものが下のスクリーンショットだ。これは,視線の角度に応じて当該材質自体の「素地の陰影」と鏡像との出方の割合を示したパラメータである。
白ければ白いほど鏡像が強く出て,黒っぽければ黒っぽいほど鏡像の影響が弱く,材質自体が持つ素地の陰影が出やすくなる。
最後はフレネル反射とライティング結果,鏡像を掛け算で統合したものだ。素材の反射特性がよく分かる。
Puha氏によれば,「短期間の実装となったため,放ったレイの少なさによるノイジーな描画結果が見えてしまっているが,これが対処すべき課題であることは認識している。また,解決策も見えている」とのことだった。
「いつまでに改善する」というコメントはなかったが,今夏開催予定のSIGGRAPH 2018あたりで,アップデート版が出てくるかもしれない。
ゲームグラフィックスの新しい進化が今始まる!?
セッションでPuha氏は,事前計算ベースとなる拡散光のみの大局照明システムとDXRベースのアンビエントオクルージョンをNorthlightエンジン上で統合したとき,より自然に見えるチューニングの話題にも触れていたが,Northlightエンジン固有のテーマだったため,本稿では省略する。ただ,従来のレンダリング技法であるラスタライズベースの描画と,DXRによるレイトレーシングによる描画との融合をより自然に見せるためには,ゲームエンジン固有のチューニングが必要だというのは伝わってきたことを付記しておきたい。
ピクセルあたり1本のレイでライティングすると,たまたまレイの衝突先がハイライト箇所だったりした場合,それが描画結果において支配的に反映されてしまい,蛍の光のような描画が出てしまうこともあるとPuha氏 |
これを避けるために,明るいピクセルに対して複数のレイを投げるようにすると,この不思議な現象(=エラー)を低減できる。まさにTIPSといったところだが,要はこういうチューニングが必要になるわけだ |
DXRの活用が,新しいゲームグラフィックスを実現するための,新しい主流になることはほぼ間違いだろう。同時に,今後のグラフィックスエンジンに「新しいチューニング要素」を誕生させてしまった感も否めないが,そのチューニング周りこそが次世代のゲームグラフィックスにおける見どころになっていくはずで,ユーザー側としては,そうした進化の過程を見ていく楽しみが出てきたとも言える。
そしてなにより,GPUに新しい性能強化の方向性を示したとも言え,今後のGPUの戦局にも大きな影響を与えそうで興味深い。
RemedyのNorthlight公式情報ページ(英語)
4GamerのGDC 2018記事一覧
- 関連タイトル:
DirectX
- この記事のURL: