連載
[GDC 2018]西川善司の3DGE:DirectX Raytracingにおける最適解は「レイトレーシングを行わないこと」!? Futuremarkが語るその真意
Microsoftはこの技術を「DirectX Raytracing」(略称「DXR」,以下略称表気)と名付けたが,GDC 2018の会期中にはEpic GamesにElectronic Arts,Remedy Entertainment,そしてFuturemarkの4社が早くもDXRベースの技術デモ,もしくはそのムービーをお披露目していたりもする。
「ラスタライズ法レンダリングを主体として,ワンポイントリリーフでレイトレーシングを活用せよ」
まずは,次のビデオを再生してみてほしい。これがFuturemarkによるDXRベースの技術デモである。
では,どうしてそんなに良好なのか。
答えは単純で,画面内におけるピクセル描画の多くで,従来型のラスタライズ法によるレンダリングを採用しているからという,シンプルかつ身も蓋もない理由による。要するに,「レイトレーシングをできるだけ行わない」実装になっているのだ。
Aizenshtein氏は,「この手法こそが,直近のレイトレーシング導入時代におけるゲームグラフィックスの最適手法だと考える」と自信を見せている。
DXRの発表を受け,業界はレイトレーシング熱に包まれているが,性能をできる限り重視する前提に立った場合,現行のGPUでどのレベルのレイトレーシングを行えるかと言えば,実のところは「フルHDの画面全体を占める各ピクセルで1レイずつ投げる(≒約200万本投げる)のが精いっぱい」といったところである(関連記事)。となれば当然,レイトレーシングを活用できる機会は限られた回数になる。
ちなみに,冒頭で示したEpic Gamesのデモは,24fpsのリアルタイムで確かに動作するが,使っているハードウェアは液冷版「Tesla V100」4枚差しの「DGX Station」であって,お値段は日本円でざっくり1700万円とのこと。すごいのは間違いないが,一般のゲーマーから手の届く金額でもまったくないのである。
要するにAizenshtein氏は,この制限を受けて「極力レイトレーシングは使わない方針」をまず立て,「どうしても使わざるを得ない状況でのみレイトレーシングを使う」のが,今日(こんにち)のゲームグラフィックスにおけるレイトレーシング活用の現実的な落としどころだと言っているのだ。
レイトレーシングらしいレイトレーシングは極力使わない
「そもそも論」として,3Dゲームグラフィックスの場合,「究極のフォトリアリティ」を目指すことはまずない。「説得力の高いビジュアル」さえ実現できればよく,たいていの場合,ゴールはそこに設定される。
なら,現在のラスタライズ法でうまく実現できない領域の描画だけをレイトレーシングで補えばいいじゃないか。そういう「割り切り」の実装を提唱し,実際に披露しているのがFuturemarkの技術デモなのである。
さて,Aizenshtein氏はセッションで,技術デモのレンダリングパイプラインが次のようなものになっていると紹介していた。
簡単に解説すると,上段はラスタライズ法によって実装したディファードレンダリング(Deferred Rendering)ベースのレンダリングパイプラインに相当する。具体的には,ライティングおよびシェーディング用のパラメータ群をレンダリングして生成したGバッファ(G-Buffer)を用い,そのうえでキューブ環境マップなどを光源と見なしてシーンをライティングするイメージベースライティング(Image Based Lighting)を行う流れだ。モダンなディファードレンダリングのパイプラインそのものといった感じである。
下段がレイトレーシング法,すなわちDXRによって実装している部分だ。
それを踏まえ,Futuremarkの技術デモが割り切っているポイントは2つある。
1つは,Futuremarkの技術デモにおいて,レイトレーシング法は鏡面反射の映り込み(=リフレクション)要素を得るためだけに活用しているところ。Futuremark以外のEpic GameとElectronic Arts,Remedy Entertainmentはいずれも,リフレクション以外に影生成や遮蔽陰影(Ambient Occlusion,アンビエントオクルージョン)などの取得にもレイトレーシング法を利用している。
ただその場合,性能に配慮する前提に立つと,どうしても大量のレイ射出は難しい。しかしリフレクションに影生成,遮蔽陰影といった要素をレイトレーシングで得ようとすると,どうしてもそれなりの数のレイは射出せざるを得ない。このジレンマを解決する策として,「ならラスタライズ法での実現が最も難しいリフレクション取得のみをレイトレーシングで実現させよう」とFuturemarkは判断したのだ。
Aizenshtein氏によると「影は現在の手法でもそれなりの品質のものが出せる。遮蔽陰影も同様だ。それらはレイトレーシングを使って取得してもノイズが出やすい。出てしまったノイズを『演算予算を使って』後から消すくらいなら,別に今のラスタライズ法で得られるもので十分じゃないか。我々はそう考えた」そうだ。これは言われてみれば説得力のある主張だと言える。
2つめは,リフレクションをレイトレーシング法で得るとして,レイが衝突した先のライティングやシェーディングにあたってはなるべく負荷のかからない方法を優先的に選択していくところである。
もちろん,リフレクションを得るためにレイは飛ばす。しかし,放ったレイが3Dオブジェクトに衝突した場合,当該3Dオブジェクトにおいて衝突した材質のライティングやシェーディングを行う処理をすぐには行わず,より負荷の低い代替手段がないか当たるのだ。
具体的には,まず当該レイの衝突先が視点から見えているか否かを吟味し,見えている場合にはライティングやシェーディングの計算は行わず,すでに得られているレンダリング結果からサンプルして持ってくる。
そう,これはレンダリング結果から映り込みとしての鏡像を生成する疑似手法として有名な,スクリーンスペースリフレクション(Screen Space Reflection,以下 SSR)の処理そのものである。つまり,レイの衝突先がSSRでカバーできる状況なら,SSR的な処理を行うということだ。
では,放ったレイがどの3Dモデルにも衝突せず,描画対象の3Dシーンから飛び出てしまった場合はどうなるか。
この場合は,スカイボックスやキューブ環境マップをサンプルして持ち帰るようにしている。なので,直接的に環境マップを適用しているのと大差ない処理系に落ちることになる。
そうなると気になるのは「一体全体どの状況でのみ,『本物』のレイトレーシングを行うのか」だが,答えは「放ったレイが3Dモデルと衝突はすれども,衝突先3Dオブジェクトが描画フレームの中には含まれない,画面外にあるものだったりする場合」と,「画面の中にはあるが,視点から見て死角の位置となる場合」だ。「SSRの弱点が露呈する箇所にだけレイトレーシング法らしい処理を行う」と言い換えることもできるだろう。
FuturemarkのDXR技術デモにおける「レイトレーシング活用ピクセル分布」を見る
Futuremarkのブースでは,Futuremarkで3DMarkの技術面を統括するAntti hirvonen氏が,実際に技術デモを実際に動かして技術解説をしてくれたのだが,ここで興味深い画面を見ることができた。
Futuremarkブース |
Antti Hirvonen氏(3DMark Tech Lead, Futuremark) |
それが下の画面だ。
ここでは桃,緑,橙,青という4つの色を確認できるが,各色は「DXR技術デモが動作しているとき,どのピクセルをどんな手法で計算して色を決定しているか」を示している。
桃は,ラスタライズ法だけで描画された領域だ。ライティングおよびシェーディングは物理ベースレンダリングによるものとなるが,材質が持つ面の粗さ(Roughness,ラフネス)はそれなりにあるため,ライティングも事前計算済みキューブマップベースのイメージベースライティングによって行うことになる領域ということになる。
緑は,「レイトレーシングは行ったが,SSRもしくはキューブ環境マップ参照で代用した領域」だ。「物理的には正しくないけれども,見た目的にはそう間違えては見えない領域」と言っていいかもしれない。
青は,レイを飛ばしたはものの,そのレイは3Dオブジェクトに衝突することなく当該3Dシーンを飛び出てしまった領域だ。この場合は前述のとおり,背景としての環境マップ,あるいは屋外のスカイボックスなどを参照して描画することになるため,処理負荷は最も低い。
Futuremark製DXR技術デモの見どころ
最後にもう少しFuturemark製技術デモを深く見ていくことにしよう。
下のスクリーンショットは,Futuremarkが公開している「DXRの有効/無効を切り換えたアニメーションGIF」だ。画像をクリックするとアニメーションGIFが開くようになっているが,いずれにせよ重要なのは,DXRの有効/無効ではなく,ラスタライズ法にレイトレーシング法をプラスしたものか,ラスタライズ法のみで処理したかの違いを示しているということである。
両者を比較したときに最も目立つのは,DXR無効とあるほうで,鏡に女性タイムトラベラーが映り込んでいないことだと思う。
視点から見た場合の女性は正面から描画してあるのに対し,鏡の中に映り込んでいるのは側面や背面だったりするため,SSRによる疑似手法ではリフレクションを作り得ようがないため,このような描画結果になっている。一部の背景は歪みながらも映り込んでいるが,これはキューブ環境マップの適用結果だ。歪んでいるのは,キューブ環境マップを生成した基準の視点と,本シーンのカメラ視点,そして鏡によって反射した視線とのズレが大きいためである。
もう1つの例は,床の映り込みに注目すると違いが分かりやすい。
DXR無効とされる例ではSSRベースで鏡像を作り込んでいるため,床に映り込んでいる景色のうち,天井に近い領域が丸ごと消失してしまっているのが分かるだろう。また,画面右側ではタンスのような調度品周辺に注目すると,ラスタライズ法のみに頼る場合は,調度品の足元に映る鏡像が途中から消失する関係で,画面外にある光源からの光がタンスを突き抜け,床を明るくライティングしてしまっている。
後者は不自然と言うよりむしろエラーに近い印象だが,SSRベースの鏡像だけで映り込み表現を実現しているゲームグラフィックスでは,実際,こうした表示になることがままある。
3つめは,鏡像うんぬんというより,3Dモデルが持つ材質の表面ライティングを豊かにする方向でリフレクションを活用している事例だ。左側の展示ケースにおける木材などの陰影は,DXRオンとされる例において,床の照り返しの影響を受けたかのような,間接光表現のような陰影を見せている。
現実を踏まえた現実的なレイトレ活用法提案と言える,FuturemarkのDXRデモ
まとめよう。「リフレクション以外のレイトレーシングはやらない」「リフレクションのレイトレーシングをやるにしても,軽量な手法で代用できるときはそちらを優先」という割り切った実装にもかかわらず,デモを見るとレイトレーシング法の効能をちゃんと見て取れるというのが,FuturemarkのDXRデモにおける,真の見どころだ。
華々しく登場したDXRをこうも消極的に使うのはどうなのかという意見はあると思うが,実際問題として,すべての3Dゲームグラフィックス要素をレイトレーシングに置き換えるのは,現状というか当面は無理と断言してしまっていい。現実的な活用路線が,むしろFuturemarkの提唱しているような消極的なものになることはまず間違いない。
3Dゲームの場合,PCなら搭載するグラフィックスカード,据え置き型ゲーム機であればプラットフォームごとの性能に応じてグラフィックス表現の品質を抑えざるを得ないケースがままあるわけだが,その場合も,従来型ラスタライズ法のレンダリングパイプラインはほぼそのままにしておけて,かつレイトレーシング要素は容易に有効/無効を切り換えられるFuturemark的な実装のほうがチューニングしやすいはずだ。
もちろん,このあたりはゲームスタジオごとに考えが違う部分ではあるので,今後,さまざまな実装スタイルの提案が生じるはずだが,「レイトレーシングに夢見がち」な事態に陥らないよう,最初から現実的な活用法を見せてくれたFuturemarkの功績は大きいと思う。