「レイトレーシング」の最大の“敵”とは何か? やっつける方法はあるのか?

「レイトレーシング」の最大の“敵”とは何か? やっつける方法はあるのか?

 PC向けGPU(グラフィックスカード)はもちろん、家庭用ゲーム機でも一般的になりつつある「リアルタイムレイトレーシング」。前回は、近年のゲームグラフィックスにおけるレイトレーシング技術の活用法をみてきた。

 今回は、ゲームにおけるレイトレーシング技術の活用において重大さを増している“ある問題”を深掘りしていきたい。

●レイの“数”が描画品質を左右するレイトレーシング

 レイトレーシング法とは、コンピュータグラフィックス(CG)の描画手法の1つである。大まかに説明すると、その手順は以下の通りとなる。

1. 着目するピクセルから情報を回収する「探査機(=レイ)」を3Dシーン内に飛ばす

2. 探査機が「何か(3Dオブジェクトなど)」とぶつかったら、その情報を回収する

3. 回収した情報をもとに、発射地点のピクセルの陰影処理を行う

 何かと衝突したレイは、ぶつかった地点から再び別の方角へ再発射される場合もあるし、着目しているピクセルから複数のレイを飛ばすこともある(このことを「キャストする」という)。

 レイの発射元のピクセルにおける陰影処理は、レイの数が多ければ多いほど正確度が高まる。

 いうなれば、現実世界はレイの本数が“無限大”というイメージである。合わせ鏡を例に取ると、キャストされたレイが向かい側の鏡で反射するので、再びそこからもう元の鏡に向かってレイがキャストされ……という具合に、レイの発射と反射が無限に繰り返されて「無限鏡像」ができる――こんな感じで捉えられる。

 映画などに用いられるCGは、ほとんどがレイトレーシング法で描画されるのだが、さすがにレイの本数を「無限大」として処理してはいない。作品にもよるが、1ピクセル当たりで少なくても数十本、多ければ数百本以上のレイをキャストして描画を行っている。

 前回、実際にレイトレーシング技術を活用した近年のゲームタイトルにおけるグラフィックスを紹介したが、現状のGPUが備えるレイトレーシング性能がそれほど高くない。そのため「RTを絡めて30~60fpsのフレームレートを“安定して”維持できるのはフルHD解像度(1920×1080ピクセル)が限界」「フルHD解像度でRTを利用する場合であってもレイの本数は1ピクセル当たり1桁台が主流で、良くて2桁台前半」という見立てをお話しした。

 映画向けCG制作の世界とゲーム開発の世界を比べてみると、ゲーム開発の世界は相対的にレイの予算(数)が足りていない状況にある。ゲームグラフィックスにそれほど詳しくない、映画などのCG制作に携わるアーティストやエンジニアが聞いたら「冗談でしょ?」と思うかもしれないが、それが現実なのである。

●レイの本数が少ないと何が起こる?

 ゲームでレイトレーシング法を使う場合、投げられるレイの本数が慢性的に足りない状況にあることは先述の通りである。では、投げるレイの本数が少ないと何が起こるのだろうか。もう少し具体的に説明していこう。

 レイトレーシング法で影を生成をする際には、着目しているピクセルから光源方向に向かってレイを投げる。レイが何かに衝突した場合は、それを「影」と判断するというやり方である。

 しかし、蛍光灯のようなある程度大きさのある発光体(光源)の場合、方向を微妙にずらした複数のレイを投げて、投げたレイのうち何本が遮蔽(しゃへい)物に衝突したかを数えて、計算して得られた遮蔽率をもとに影の強弱を調整する。

 例えば、10本投げたレイの全てが遮蔽物に衝突したとすれば、レイの発射地点の遮蔽率は100%となるので「濃い影」を描画するのが妥当である。一方、もし10本のうち4本だけが衝突したとすると、遮蔽率は40%となるので「やや薄い影」とするのがいいだろう。

 では、ここで投げられるレイが1本しかなかったとしたらどうなるのだろうか。ご想像の通り「All or Nothing」、つまりその1本がぶつかれば「遮蔽率100%」、透過すれば「遮蔽率0%」と両極端な判定となってしまう。本来はそのピクセルの遮蔽率が40%だったとしても、レイを投げる向きなどによっては100%と判断されてしまったり、逆に0%と判定されてしまったりするわけだ。

 レイの本数が少なくなると、影描画としての正確性に欠けることになる。これはれっきとした「誤差(エラー)」であり、レイを放った場所がちょっとずれるだけで、誤差まみれの「遮蔽率0%」と「遮蔽率100%」が無秩序に散らばることになってしまい、結果として影描画は“ノイズ”になってしまう。

 投げられるレイが少ないと、描画がノイズだらけとなる――このことは、ゲームの描画においてレイトレーシング法を活用する上で、大きな課題なのだ。

●レイトレーシングのノイズを低減させる技術

 現状のGPU性能では投げられるレイの数が限られ、結果としてノイズだらけの描画となる――そうなると、ゲームグラフィックスにレイトレーシング法を導入するモチベーションが著しく下がるのは間違いない。少し強めにいえば「始まった時点で終わってる」という印象を開発者やユーザーに与えかねない。

 そこで、この課題をなんとかしようと立ち上がったのが、GPUメーカーの雄であるNVIDIAやAMDだ。

 NVIDIAは、同社製GPUでレイトレーシング技術を実行するためのランタイムとして「NVIDIA RTX」を提供しているが、これとは別にゲーム支援ライブラリ「NVIDIA GameWorks」を構成するコンポーネントとして、レイトレーシング法で描画する際に発生しうるノイズを軽減する「NVIDIA Real-Time Denoisers(NRD)」を用意している。その名の通り、Denoiser(デノイザー)はノイズを除去する技術という意味で、「s」が付いていることからも分かるように複数の技術から構成されている。

 同社のノイズ軽減ソリューションとしては、深層学習ベースのAI(人工知能)を活用した「NVIDIA OptiX AI-Accelerated Denoiser」もあるが、これと比べるとNRDは≪少しシンプルかつリアルタイム性の高いアプローチであることが特徴だ。

 2022年10月現在、NRDには「ReBLUR」「SIGMA」「ReLAX」の3種類のデノイザーが含まれている。いずれもレイトレーシング法で生成された描画だけをぼかすような手法を用いているので、従来のラスタライズ法で描画された領域には影響を与えないのが特徴だ。

 3つのデノイザーのうち、最も汎用(はんよう)性の高いものがReBLURである。これはNVIDIAのデミトリー・ジダン(Dmitry Zhdan)氏が発表した論文「Fast Denoising with Self Stabilizing Recurrent Blurs」をもとにして開発されたデノイザーで、拡散反射要素や鏡面反射要素を含めた一般的な材質のライティング結果への適用に相性が良いとされている。

 実際のゲームタイトルでも、「Cyberpunk 2077」や「WATCH DOGS LEGION」において効果的に使われている。

 残り2つのデノイザーだが、SIGMAは影の処理に特化することで処理を高速化したもので、ReLAXは大局照明(間接光照明)の処理に特化したものとなっている。

NRDの基盤となる技術「SVGF」

 3つのデノイザは全て、1ピクセルあたり1レイ以下――例えば2ピクセルあたり1レイ――というような、“低予算”のレイトレーシングにも応用が可能だと説明されている。また、基盤技術は2017年にドイツのカールスルーエ工科大学(当時)のクリストフ・シード氏やNVIDIAのアントン・カプラヤン氏らが共著した論文「Spatiotemporal Variance-Guided Filtering: Real-Time Reconstruction for Path-Traced Global Illumination」で提案された算術的なノイズ低減技術「Spatiotemporal Variance-Guided Filtering(SVGF)」を用いている。Spatiotemporalは「Spatial(空間的な)」と「Temporal(時間的な)の2語が合体してできた単語で、日本語に訳すと「時空間の」という意味になる。SVGFを日本語で直訳すと「時空間の分散を手がかりとしたフィルタリング」といった所だろうか。

 SVGFの仕組みをもう少し詳しく見ていこう。

 まず「誤差を含むと仮定されるピクセル」があったとする。SVGFでは表示しているフレームにおける当該ピクセルの周辺の情報(≒空間的な情報)を参照して、ピクセルの平滑化に役立てる。加えて、平滑化処理をする際には、過去のフレームにおける当該ピクセルと周辺の情報(≒時間的+空間的な情報)も手がかりとして役立てる。

 つまり、SVGFは現在から過去に渡る複数のフレーム群からピクセルのノイズ分散量(ばらつき範囲)を推定し、ノイズの大きい箇所は広範囲に、そうでもない所は狭い範囲で平滑化処理を行う。ノイジーな領域をたっぷりと平滑化すれば、ディテール表現が過剰にボカされることはない――そんな仕組みであり、ある意味で「適応型のノイズ低減技術」ともいえる。

 実務的には2D画像を処理する際のアプローチと同様なのだが、実際は「各フレームの各ピクセルがどんな材質(マテリアルID)に対応しているのか」「そのピクセルの奥行き(深度)情報はどうなっているか」といった3Dグラフィックス特有のレンダリング関連情報も参照しているので、いわゆる「2.5D的なフィルタ処理」となる。また、実質的なノイズ低減(平滑化)処理には、「ボカしフィルター」としてもおなじみの「ガウスフィルター」を発展させた「バイラテラルフィルター」に近いアルゴリズムが用いられる。

 こうしてSVGFを見てみると、全体的に信号処理的なアルゴリズムとなっていることが分かる。AI的なアルゴリズムではないため、「Tensorコア」のような推論アクセラレーターの搭載は必須ではない。要するに比較的広範囲なGPUで利用できて、互換性も高い(≒GPUへの機種依存性が少ない)ということになる。

 NVIDIAによると、NRDの処理スピードは「自社製のハイエンドGPUであれば、フルHD解像度で1ミリ秒程度」という。そこそこ軽量だといえる。

 ただし、SVGF(NRD)の処理は1つ1つの描画要素に対して“個別に”行う必要がある。例えばレイトレーシング法で「影」と「鏡像」を生成したとすると、影と鏡像のそれぞれにノイズ低減処理を行うことになる。それぞれの処理に1ミリ秒かかるとすると、2つの処理で合計2ミリ秒を要する計算だ。単純に実装をするとレイトレーシング法による描画要素が増えるほど負荷も上乗せされることになるので注意を要する。

AMDも同様の取り組みをしている

 ここまでNVIDIAによると、の取り組みを紹介してきたが、AMDも少ない「レイ予算」のもとレンダリングされたノイジーな描画を美しく仕立て上げるディノーザー「AMD FidelityFX Denoiser(FD)」を提供している。

 FDには影専用の「Shadow Denoiser」と、映り込み鏡像専用の「Reflection Denoiser」の2つのデノイザーが用意されており、原理的にはNRDと同様にSVGFベースで実装されている。

●デノイザーを制する者がゲームグラフィックスを制する?

 いくらデノイザーが優秀だとしても、実際のところは画像処理でボカして処理を入れているだけともいえる。レイ数の多い、正攻法のレイトレーシング法での描画結果と比較すると、どうしても差異は出てしまう。

 しかし、ここまでで示してきたデノイザーの適用前後の画像を見比べれば分かると思うが、ゲームグラフィックスに要求される品質としては、必要十分だと考える。先日発表された「GeForce RTX 40シリーズ」、そして11月3日(米国東部夏時間)に発表されるであろうAMDの新型GPUをもってしても、レイトレーシング法で描画できる要素は、4K解像度(3840×2160ピクセル)ならせいぜい1~2個程度、その際の1ピクセル当たりのレイも数本となる見込みなので、しばらくはノイズ低減技術が欠かせないものとなる。

 今後、しばらくは「レイトレーシング向けのノイズ低減技術」は、ホットな研究テーマであり続けるであろう。

 次回は、この先のゲームグラフィックスが、レイトレーシングとどう向き合っていくことになるのかについて考えてみたい。

🍎たったひとつの真実見抜く、見た目は大人、頭脳は子供、その名は名馬鹿ヒカル!🍏