【ACADEMY】現実世界のシミュレーションに近づける:ゲームにおけるレイトレーシングの応用
レイトレーシング(以下,RT)に入る前に,まず現実世界での照明の仕組みについて説明する。
ミクロの視点で見ると,光線に照らされた物体の表面は,完全な平滑面ではなく,小さな凹凸がたくさんある。これを「マイクロサーフェス」と呼ぶ。この凹凸に光が当たると,その凹凸によって光がさまざまな方向に反射し,現実の世界にニュアンスを与えている。
膨大な数の光の反射とその複雑な経路を考えると,現実の照明状態をこのようにシミュレートすることは,計算機的には非常に困難だ。これまでは,このプロセスはオフラインでレンダリングされた画像に限られていた。
では,どうすればこのような実世界の照明にリアルタイムで近づけることができるのだろうか。従来は,シーンの情報をピクセルに変換して,画面に表示される部分(画面空間)だけをレンダリングしてから最終的な画像を作成するラスタライズという手法が使われていた。ラスタライズの最大のメリットは高速であることだが,画面外の情報が多く失われ,また光路の物理的なシミュレーションではないため,最終的には歪んで見えることもある。
現在では,ラスタライズに加えて,RTXリアルタイムレイトレーシングによってリアルな光のシミュレーションを実現できるようになった。RTXがどのように機能するかは,Next Studiosで開発中のゲームSynced: Off-Planetに実装されているものが参考になる。以下の動画では,右上の「RTX ON」がレイトレーシングのオン,「RTX OFF」がレイトレーシングのオフを示している。シーンの中から以下の2つの要素に注目してみよう。
- 水たまり:RTXがオフの場合,地面にある水たまりは,反射画像としてレンダリングできるのは画面空間だけなので,シーンをほとんど反映していない。RTXをオンにすると,上空の空やシーンのPOVのすぐ外にある照明など,画面外の情報も正しく反映される
- 金網:金網はアルファテストマッピングで作成している。RTX Ray Tracingをオンにすると,金網の影が自然な半影効果になる。RTXをオフにすると,金網の影ははっきりとした段差のあるエッジになる。これは,物体が影から遠ざかるにつれて半影効果が徐々に大きくなるという,現実世界で経験するものとは異なっている。これは,非RT方式のレンダリングがいかに非現実的であるかを示している
- レイトレーシングの実用的な応用
- オプティマイゼーション(最適化) - レイトレーシングの実装を推進する力
レイトレーシングの実用的な応用
実際のプロジェクトでは,RTは通常,4つの分野でその優位性を発揮す。反射,アンビエントオクルージョン(AO),影,グローバルイルミネーション(GI)の4つの分野だ。
●1. 1.反射
このスクリーンショットでは,緑色の矢印で示した水たまりと鏡に注目してほしい。RTX ONのスクリーンショットとRTX OFFのスクリーンショットを比較すると,RTなしのスクリーンショットでは,鏡に映った黄色い手すりのレンダリングに失敗していることが分かる。また,RTのスクリーンショットでは,右側の水たまりに映った看板が正しく表示されているが,これはスクリーンスペースのレンダリングでは欠落している。RTでは,より詳細な情報が含まれており,映り込みの位置も高い精度で再現されている。
●Sphere Reflection Capture
画面空間の反射では情報が欠落していることが多いため,Reflection Captureを使って画面外の情報をキャプチャすることもある。RTX OFFのスクリーンショットの中央にある白い球体には,その半径内にある3Dシーンのイメージが焼き付けられており,その中心位置から見たイメージが表示されている。このプリレンダリングされたシーンの画像を使って,画面外にある情報を反射させることができる。
しかし,Reflection Captureには,(1)元々の計算精度によって反射の位置が制限される,(2)ビデオメモリの増設を抑えるために「Reflection Capture」の画像を小さくする必要がある,などのデメリットもある。そのため,映り込みが曖昧になったり,ぼやけたりすることがある。また,この技術をゲームシーンで多用した場合,ビデオメモリの使用量が膨大になるため,パフォーマンスが低下する可能性がある。
RTをオープンシーンの反射に使用することで,反射が正確な位置で鮮明に表現され,ビデオメモリの使用量も削減されていることが分かる。
●ダイナミックオブジェクト
Sphere Reflection Captureは,シーン内の静的なオブジェクトのみをキャプチャする。ダイナミックなゲームキャラクターはこの方法ではキャプチャできず,その反射をレンダリングするには,下の画像の水面に見られるように,スクリーンスペースの反射に頼ることになる。RTXをオンにすると,ダイナミックオブジェクトが動いても,その反射がはっきりと見えるようになる。
●バッチレンダリング
シーンに大量のAIキャラクターが含まれている場合,キャラクターのマテリアルの粗さは通常,同じになる。ここでは,次の画像で使われているように,バッチレンダリングを行うことができる。
特筆すべきは,これだけ多くのキャラクターをRTリフレクションでレンダリングしても,50FPSのフレームレートが達成されていることだ。このようなRTの最適化は,このような大きなシーンをレンダリングする際の全体的なパフォーマンスの向上に役立つ。
●2. アンビエントオクルージョン(AO)
次の画像は,Screen Space AOの効果を示している。この高い位置からの視野には大きなエラーがある。柱の横にあるScreen Space AOは,視点から計測されたデプスマップから計算される。この計算では,前面と背面の画素の深度値を比較する。
両者の深度の差がAOのサンプリング半径よりも小さい場合,前方の物体が後方の物体に到達する環境光を遮蔽していると判断され,AO効果が生成される。この高高度俯瞰画像では,角度によって表面の深さの差が小さくなり,計算ではポールが地面に近いと解釈されて,このような誤ったオクルージョン効果が発生している。
仰角の低い場所から見ると,誤差がやや小さくなる。これは,水平方向に見たときに,面の深度値の差が大きくなるためだ。この差がサンプリング半径以下になる画面の面積が小さくなり,それに伴って,誤ったオクルージョンが発生する面積も小さくなる。RTX ONのスクリーンショットでは,AOが物理的にシミュレートされたアルゴリズムでレイトレースされており,アンビエントオクルージョンが非常にリアルに再現されている。
次の画像は,Screen Space AOでよく見られる問題で,赤い矢印で示した部分にAO効果が見られない。張り出したプレートの下部は画面上では見えないため,スクリーンスペースの範囲外となる。つまり,その面に利用できる深度値はないので,地面に対するアンビエントオクルージョンを計算することはできない。一方,Ray Tracing AOでは,このような計算はすべてリアルになる。
●3. 影
RTがオフの次の画像では,キャラクターは1つのスポットライトで照らされている。光源にはCSM(カスケードシャドウマップ)プロジェクションを使用し,Contact ShadowをONにしている。にもかかわらず,キャラクターの服やサングラスには,光と影の境界がはっきりしていない。キャラクターの上に物体が浮いているように見え,全体的に立体感がない。
RTをオンにすると,服に立体感が出て,影には半影効果が見られる。襟にも首元にくっきりとした薄い影ができ,サングラスの影も本物に近い効果が得られている。これがレイトレースされた影と従来の影の違いだ。
下の画像は,あるシーンのスクリーンショットだ。緑の矢印で示された部分に注目してみよう。
(1)左の矢印の部分は明らかに暗い影になっているが,金網の一辺は明るく照らされている。(2)真ん中の矢印で示したドアフレームの構造によって地面にできる影が正しくない。(3)右の矢印で示した金網の影は,輪郭がはっきりしていて,影が物体から離れている場合に期待される半影効果が見られない。
RTXをオンにすると,金網の一部に深い影ができ,ドアの枠には正しく光が当たって期待どおりの影ができる。金網の影の半影効果は距離に応じてリアルに増加するようになる。
次の画像も,伝統的なライティングが行われたスクリーンショットだ。緑の枠の部分を見てほしい。CSM投影を行っているにもかかわらず,この部分はディテールのない影になっている。この環境には高い足場の構造物がたくさんある。これらの複雑な影は,RTをオンにして初めて正確に投影される。
また,従来のCSMシャドウでは,次の画像の緑の枠の中にあるような問題がよく発生する。影を落としたい場所が視点から離れている場合,パフォーマンスを考慮してシャドウマップの解像度を低くしてしまうだろう。これにより,影がぼやけて,我々の視点ではコンテナに光が漏れているように見えることがある。
一方,RTシャドウは精度が高い。CSMはシミュレーションをベースにしているので,パフォーマンスを犠牲にしてもクオリティを上げることができる。実際のゲームでは,視覚効果とパフォーマンスのバランスを取ることが目的となる。
●4. グローバルイルミネーション(GI)
下の写真は,小さなシンプルな家の中に緑のボールが置かれ,その中に2つの光源がある。スカイライトとディレクショナルライトだ。RTをオフにすると,全体的に平面的な印象になることが分かる。拡散反射のマスキングをしないと,シーンにボリューム感がない。RTをオンにすると,GIがもたらす映像の大きな違いが分かるだろう。
では,GIを使ったシーンを,今度はライティングモードで見てみよう。まず,GIは部屋に拡散した陰影をつけ,ボリューム感を出している。また,1〜2回バウンスさせると,球体に反射した光線の一部が周囲のオブジェクトに緑色で投影される。さらに,右下のパラメータを見ると,2回以下のバウンスでこれだけの効果が得られていることが分かる。
しかし,SyncedではRTGIを使用していない。理由は2つある。(1)開発チームが独自のダイナミックGIシステムを持っていること,(2)ダイナミックGIをオンにしても,パフォーマンスが最大の課題であること,(3)パフォーマンス要件を満たせない場合,クオリティを下げざるを得ず,RTGIにノイズが混入する可能性があること,だ。このような理由から,今回のプロジェクトではRTGIを直接使用していない。
最適化 - レイトレーシングの実装を後押しする力
実際のゲームプロジェクトにおけるレイトレーシングのビジュアル面での優位性はすでに知られているが,今後の課題は最適化にある。我々が求める性能基準を満たすようにRTを最適化できなければ,実際のゲームプロジェクトに導入することは難しいだろう。ここでは,RTが直面する3つの課題と,最適化を成功させるためのアプローチについて説明する。
●1. バウンスが増えるとfpsが下がる
下の画像にあるように,左の緑の箱の中には鏡があり,右の矢印の下には光る金属のダクトがある。しかし,視点を変えて,鏡に映った金属製のダクトを見ると,ダクトが黒くなっていることが分かる。
鏡に映ったダクトが見えるようにするには,光が一度跳ね返っている必要がある(MaxBouncesと表示されている部分)。これでダクトが黒い理由が分かる。ダクト上の反射を鏡のように見えるようにするためには,2回のバウンスが必要なのだ。この時点では,右上でfpsが60に近いことが分かる。
今度はバウンス回数を2回に増やしてみよう。ダクトや周囲の物体のディテールは正確に表現されているが,fpsは19.7まで低下している。バウンス回数を3回にすると,映像に大きな変化はないが,fpsは7.98とさらに低下している。
明らかにバウンス数が増えるとfpsが大きく低下している。
どうやってバランスをとるのか? 1つの解決策は,ダクトの近くにSpherical Reflection Captureを追加して,周辺の静的なシーン情報を取得し,それを利用して,RTの2回めのバウンスを使わずに視覚効果を向上させることだ。これは視覚効果とパフォーマンスのバランスが取れており,鏡や金属が多いシーンに適用できる方法だ。
●2. 表面が粗い物体の反射は視覚効果が低い
RT反射は,物体の粗さに関係なく必要な数のバウンスを行いるのだが,表面が非常に粗い物体の反射では,視覚効果の改善がほとんど見られない。そこで,「反射する粗さの最大値」の設定が有効になる。下の画像のように,粗さが0.2のオブジェクトだけがRT反射をするように設定している。しかし,アーティストは,素材の粗さが0.2以下かどうかをどうやって見分ければいいのだろうか?
そこで,粗さが0.2以下の部分を緑色でマーキングしたポストプロセスマテリアルを作成した。こうすることで,「どのパーツにRT反射が必要なのか」「こんなにたくさんのパーツにRT反射が必要なのか」が一目瞭然になる。また,ポストプロセスマテリアルは,パフォーマンスコントロールのためのプレビューとしても有効だ。
●親子素材とRT QualitySwitch
今回のプロジェクトでは,親と子のマテリアルフローを採用している。つまり,アーティストは親マテリアルから子のインスタンスマテリアルを生成し,パラメータを調整するだけで簡単に適用できるのだ。下の画像はマテリアルのノードを示している。親マテリアルの要素の中には,他の要素よりもリッチで複雑なものがあることが分かる。
しかし,複雑な計算は,小さなオブジェクトでは生産性が低下する。たとえば,複雑な素材を使ったボトルが鏡に映っているシーンでは,ボトルが小さいため,複雑な素材はシーンに何の貢献もしていないことになる。
ここで,「RT QualitySwitch」の概念を紹介する。反射したオブジェクトをレンダリングする際,RT反射を計算するためにすべてのマテリアルプロパティを使用することはない。代わりに,Normal Roughness Metallicのような,より単純なPBRノードのみを処理することで,計算コストを大幅に削減している。
下の画像を見ると,鏡の前にいる3人のキャラクターの服には,詳細なテクスチャが施されていることが分かる。RT QualitySwitchをオフにすると,鏡に映った服にも詳細なテクスチャが表示され,RT反射の完了に4.46msかかる。RT QualitySwitchをONにすると,映っている服のディテールは少なくなるが,RT反射にかかる時間は4.1msに短縮され,視覚効果への影響はほとんどない。
すべての親マテリアルがRT Quality Switch用の最適化ノードで作成されていれば,多くの大きなシーンの制作において,リソースを節約し,パフォーマンスを向上させることができると考えられる。
さらに,一般的なRTパラメータをブループリントにプリセットし,下の画像のように2つのシーンの交差点にボリュームの形でブループリントを配置した。
これは,屋内と屋外が交わる部分だ。屋内と屋外では照明情報が異なっており,配置されるオブジェクトの構造や密度,素材も大きく異なる。しかし,ここに配置したボリュームは,環境ごとに異なるパラメータを切り替え,視覚効果を確保しつつ,ゲーム性のバランスを取っている。最後に,今回のプロジェクトで使用した一般的なRT最適化の手法,コマンド,パラメータを紹介する。
振り返ってみると,RTの研究開発には多くの課題があった。その中でも,パフォーマンスへの影響を最小限に抑えることは,技術的に最大の課題だ。RTの本質は,計算によって現実世界の物理を忠実にシミュレートすることだが,グラフィックスカードやPC,そしてそれらを支えるシステムには限界がある。パフォーマンスを向上させるためには,視覚的なディテールを犠牲にしなければならないこともある。最適化とは,これらの競合する要求のバランスを取り,ゲーマーの利益につなげる方法だ。
現実的な話として,私が最も重要だと思うのは,ゲームにRTを導入する場合,デザインの初期段階で次の2つの質問に答えなければならないということだ:つまり,どのような環境やシーンでRTのメリットを発揮させるか? そして,その利点を活かすためには,どのようなシーンをデザインする必要があるのか? だ。RTは,ハードウェアの開発やエンジンの効率化,新技術の登場などにより,今後も改良が重ねられていくものと思われる。
従来のラスタライズであれ,レイトレーシングであれ,その目標は常に観客により良い映像を提供し,現実の世界に近づけるための扉を開くことなのだ。
Tom Clancy's Rainbow SixやTom Clancy's Splinter Cellなどのゲーム開発に参加したYuan Xie氏は,TencentのNext Studiosでシニアテクニカルアーティストを務めている。
GamesIndustry.biz ACADEMY関連翻訳記事一覧
※本記事はGamesIndustry.bizとのライセンス契約のもとで翻訳されています(元記事はこちら)