
2021年もオンライン開催となったゲーム開発者向けカンファレンス「CEDEC2021」にて、バンダイナムコスタジオにおけるレイトレーシングへの取り組みを紹介する「レイトレ時代のゲームグラフィックス、地に足をつけて備えようNVIDIA Falcorで次世代品質のリアルタイム物理ベース照明を手軽に素早く検証する」セッションが実施されました。
登壇者は、バンダイナムコスタジオのグラフィックス・エンジニア森重伸也氏と、エンジニアの鈴木雅幸氏と道上弘志氏、そしてTAパート横田聖二氏の4名。AutodeskのArnoldとNVIDIAのFalcorの比較や設定を中心に、設定などの解説がメインとなったセッションのレポートをお届けします。

ゲームグラフィックスは、2D時代の『パックマン』から『鉄拳7』のフォトリアルな3Dの進化を経て、2025年にはレイトレーシング時代が来ると予見し、その後はリアルタイムパストレーシング時代になるとのこと。これまでのライティングは、光源を多く置くものの影や物の遮蔽が上手くいかず明るくもないものでしたが、レイトレ時代グラフィックは様々な物体が光を反射することで明るくなり、ライティングの調整もしやすくなることからアーティストへの負担も小さくなります。

これまでもゲームグラフィックスは素晴らしいものでしたが、レイトレ時代のグラフィックもより良いものになるとのこと。今までAutodeskのArnoldでしかできなかった表現がリアルタイムでも実現する可能性があります。またフォトリアル表現だけでなく、ノンフォトリアルのセルシェーディングなタイトルにおいても良い結果を与えるのではと加えました。
レイトレーシングがフォトリアルな光の表現を生み出すことは知られていますが、それは単にグラフィック面の恩恵だけではありません。スライドの内容にもあるようにメリットは複数存在し、アーティストの負担を下げ、開発サイクルがよりシンプルになることにも繋がります。


レイ(光線)トレーシングとパス(光経路)トレーシングの得意分野の違いは、レイトレは光線なため鏡面反射の表現が得意ですが、パストレは拡散反射なため光を広げる表現が得意です。ここではNVIDIAのFalcorを使いレイトレーシングを解説します。Falcorは描画パスを書き配置して繋げるだけでリアルタイムに描画をカスタムできる特徴を持っています。


検証シーン
検証では、テストシーンの作成においてのフローや、Mayaから出力可能なデータの種類を提示しています。またArnoldとFalcorでのレンダリング結果を並べてみると、一見するとほぼ違いがハッキリとでていないものの、細部で出力の差が出ていることに気付きます。




照明の設計と実装
スライドの解説で言及されたところでは、影のリアルタイム実現のために「全光源をサンプルしていたら間に合わない」と記載されていることもあり、世界中で多くの実験が行われているとのこと。Mesh Lightsに関しては愚直に3角形に分解し、それらを光源にしたそうです。Sun Lightに関してはFrostbite方式を試したが、非常に小さい単位でしか正しく出なかったとDisc Lightにしています。




照明の検証と物理単位の導入
次は照明の検証と物理単位の導入です。照明に適切な単位があり、太陽そのものはの光束密度は巨大ですが、太陽までの距離や大気などから地上に降り注ぐまでに約15万lxにまで減衰します。太陽を例に出したのは、レイトレにおいて太陽が実体として存在していなければならないことを考慮する必要があるからです。


検証で使われた方法は、「パストレースみたいに力業で調べる」と「既知の計算式で検算する」、そして「レンダラーと比較する(今回はarnold)」の3種類。「パストレースみたいなもの」の検証では、「アルゴリズムがシンプル」で、「拡散反射だけのシミュレーション」などです。またArnoldのカメラやライトも検証され、それぞれどのような挙動をするのかが言及されています。



Arnoldマテリアル
また検証の途中でArnoldマテリアルのコースティックスとノーマルマップにおいて、上手く働いていない箇所も見つかっています。コースティックスがおかしい問題はAutodeskのサポートの協力により無理矢理に影を作ることで解決しています。またノーマルマップがちゃんと表示されていない問題も確認され「今後修正されるのでは」と加えています。





描画パス
描画パスにおけるレイトレーシングの透過光。内部散乱は、ハイブリッドレンダリングによるEA SEED手法に近似したものを利用しており、正確な出力結果を得られませんが、それっぽい結果が得られていると説明します。



デノイズ
デノイズは、はNRDとSVGF、そしてAMD Fidelity Shadow Denoiserを検証。NRDは、RTX2070以上において1080p/60fpsでいけると評価し、ほぼほぼデノイズできていたようです。またデノイズラグが発生する場合はフレーム落ちが原因で、性能の高いRTX3080に変えると対応できたとのこと。



テスト駆動開発
テスト駆動開発は5段階のサイクルで回転しています。これは複数人だからできることであり、機能していればマージリクエストに問題があっても弾くことや、以前より悪くなるデグレーションを事前に検出することもできます。





リアルタイム照明
リアルタイム照明の性能と品質向上は、性能向上にライトベイクやライトプローブが、品質向上にライトサンプリングが関わってきます。

Lightmap
Lightmapは静的なメッシュに対してまだまだ有効な手段。Falcorでは元々インポートされるUVは1つだけ、ライトマップ向けの機能は用意されておらず必要に応じて拡張する必要があるとのこと。ライトマップベイカーを作ってみるとCPUで焼いていた時代と同じ問題に遭遇したそうです。AIベースのデノイズにおいて、デノイズ前にノイズを別の方法(ガウスフィルターなど)で軽減しようとしても、うまく動作してくれないこともあったと語ります。


リアルタイム大域照明(GI)
間接照明は光の二次以降の反射ことを、大域照明はより広い空間での反射を指します。リアルタイム化の課題では、空間の近似ゆえに光や影が漏れるとのこと。何をリアルタイムで演算し、何の計算を端折るかが重要のようです。マルチスケール照明はオープンワールドタイトルを見越したもので、cmからm、kmというスケールが1画面に混在し、全てレイトレで描写すると間に合いません。それらに対応するためのライトベイクは開発中であるようです。




まとめ
リアルタイムの2画面(in game、in engine)は、アーティストやエンジニアにとって、具体的にコミュニケーションが進んだため今後も取り入れて行きたいとのこと。今後の取り組みでは、GPUを2つ用意して2画面同時最適化と、ゲームコンソールでの性能評価、Stylizeやオープンワールドへの活用をやりたいと締めました。


