1秒間に5フレームというパストレーシングの限界
パストレーシングはレイトレーシングを拡張発展させたレンダリング法で、カメラからレイを飛ばして反射・屈折を計算する際に、モンテカルロ法を用いて確率的に計算できるようにしたものだ。グローバルイルミネーション(GI)や複雑な影などのフォトリアル描画が可能だが、その分だけ計算量も指数関数的に増大していく。
▲パストレーシングにおける、レイ追跡の概要。(1)カメラからレイを飛ばし(2)直接光(ライトレイ)を計算した後、複数のシャドウレイを飛ばすことにより、ソフトシャドウを表現する。同様に、(1)カメラからレイを飛ばし、(3)反射レイ、(4)GIレイ、(5)半透明・屈折レイを飛ばすことにより、反射・屈折や間接光を表現する
-
プログラマー・坂本良太氏 - 実際に『BackStage』のシーンをリアルタイムパストレーシングで処理しようとすると、RTX 2080 Tiをもってしても1秒間に5フレーム程度しか計算できなかったそうだ。現在のTuringアーキテクチャの演算能力は、残念ながらプリレンダーによるフォトリアル描画と同等の処理をリアルタイムに実現できるレベルには達していないのだ。
そのような状況にも関わらず、Luminous Engineの開発チームは、リアルタイムで、なおかつフォトリアル描画を行うという相反する課題にチャレンジし、後述する様々な創意工夫によって、この難題を乗り越えてきた。
レイの本数を絞り、デノイズやポストエフェクトを活用
リアルタイムにパストレーシング演算を行うという夢のようなエンジンを実現するために、Luminous Engineでは特に処理が重いライトレイの計算の軽量化に取り組んだ。全てのライトを同じ扱いで計算するのではなく、シーンにおけるライトの影響度を見て、確率的に選択することで計算負荷を減らした。また、反射・屈折表現で使われる反射レイを複数飛ばすことは止め、1本に絞った。
その結果、多量に発生したパストレーシングノイズは、NVIDIAが共同開発したパストレーシング用の新しいデノイザーであるSLGF(Spatiotemporal Variance-Guided Filtering)を使って抑え込む手法をとった。Luminous Engine側からはレンダリング時にDirect Diffuse、Indirect Diffuse、Direct Specular、Indirect Specularなどのバッファを出力し、それに対してNVIDIAのSLGFでデノイズ処理を行うことでリアルタイムパストレーシングを実現している。
▲【上】デノイズをONにした状態/【下】OFFにした状態。多量に発生しているノイズが、デノイズによって激減していることがわかる
被写界深度によるボケ効果や、アンチエイリアシング処理は、パストレーシング時ではなく、ポストエフェクト時に処理することで計算負荷を軽減させている。
▲【上】被写界深度をONにした状態/【下】OFFにした状態
▲【上】鏡の中の被写界深度をONにした状態/【下】OFFにした状態
▲【上】アンチエイリアシング処理をONにした状態/【下】OFFにした状態
© Luminous Productions Co., Ltd.