ニュース

【GDC 2019】創意工夫の連続で実現した「Battlefield V」のRT対応

はたしてNVIDIAのRTXは本物のレイトレーシングなのか

【GDC 2019】

3月18日〜3月22日(現地時間) 開催

会場:Moscone Center

 GDC 2019、3日目からの振り返りは人気シューター「Battlefield V」(以下「BFV」からRTXによるレイトレーシングの話題をお伝えしたい。

 昨年8月にSIGGRAPH、Gamescomと立て続けにNVIDIAが発表したRTXファミリの新GPUでは、リアルタイムレイトレースのアクセラレーションに特化したRTコアを追加したTuringコアを搭載する。

 このRTXをアピールする実例として、NVIDIAによってGamescom、CES、そしてGDCと続いて喧伝されてきたのが「BFV」だが、実際のソフト開発者に言わせると、どうも事情が異なるようだ。本稿では、そのあたりのところを踏まえて、RTXの実力のホントのところを、改めて確認していきたい。

登壇したEA DICEのSr. Rendering EngineerのJan Schmid氏

 これまでのレポートでも何度か触れている通り、レイトレーシングとは3DCGにおける物体の色を求める方法のひとつだ。現実の世界では、物体に光源からの光があたると、物体表面の材質特性に応じて、光の波長の一部が吸収される。その時に、吸収されない波長の光は、入射角に応じて反射する。光はこの反射を繰り返し、その一部は、チリなどの経路中の物質に当たり、吸収と拡散を繰り返して、観察できないレベルにまで減衰する。最終的に観察者の視点に到達した光の色だけが目に見えることになる。人間は、こうした光の反射でもって、物体の像を認識している。

 この現実世界での現象を、視点側から逆に追跡して、3DCGを描いてしまいましょう、というのがレイトレーシングだ。十分なサンプル数の追跡が可能なら、この手法で描かれたグラフィックスは、物体をかなり正確に描写することができる。他の手法と比較して格段にフォトリアルな結果が得られるのは、こういうわけだ。

 もし仮に、現実と同じだけの光を、現実と同じだけの地点について調べ尽くすことができるのなら、光学的機構的制約がない分、3DCGは実写映像以上のレンダリング品質になるなずだ。ところが、一定時間にトレースできる量には限界があって、特に動きのある絵を作る場合には、良好な結果を得るために必要最低限のサンプル数に留めて追跡することになる。

同じくRendering EngineerのJohannes Deligiannis氏

 2018年の8月、このレイトレーシングを飛躍的に高速化するGPUが登場した。NVIDIAは、SIGGRAPHに合わせてプロフェッショナル向けの「Quadro M4000/M5000」を、その翌週には、今度はGamescomに合わせてコンシューマ向けの「Geforce RTX 2080 Ti/2080/2070」を早くも投入して驚かせた。さらには本年早々。CESに合わせて下位製品の「RTX 2060」を発表し、リアルタイムレイトレーシングを一気にゲーマーの手の届くところにもたらした。

 これらのNVIDIA製品の発表の折、事あるごとにリアルなリフレクションの具体例として取り扱われてきたのが「BFV」だ。これまでのNVIDIA主催の発表会では、新製品のプレゼンテーションの場ということで、どうしてもRTX製品のアピールの題材に終始していた感が否めなかった。ところが、リアルタイムが要求される本作の場合、やはりシンプルアルゴリズムをハードウェア任せでブン回せばそれでOKというわけにはいかないようだ。

【「BFV」のリフレクション】

 登壇したSchmid氏とDeligiannis氏たちがRTXに取り組んだ当初の状況は、なかなか厳しいもので、いわく、ノイズだらけで、処理速度は遅く、レイトレースの寄与はほんのわずか、といったものだった。というのも、RTX製品のリリースから遅れること、わずか2カ月、2018年の11月には初のRTX対応ゲームとして製品版をリリースしなければならなかった「BFV」では、開発中にRTXの実機はなく、RTXのAPIの仕様も最終版に到達していない、ドライバはバグが残っているうえにハングアップしてしまう、そのうえブルースクリーンを拝むこともしばしば、といった有様だった。加えて、プロファイリング可能なデバッガも存在しておらず、本作は、有名税ならぬ“先行税”をたっぷり支払うことになったという。

【「BFV」開発初期の問題点】

 当初は、1フレームの描画に18,458ms、つまり18秒あまりかかっていたものが、最終的には6.29msまで高速化されている。高速化の内容は、ざっくり言ってしまえば、相当割り切った簡略化である。

 具体的には、生成するレイの比率を正規化したうえ、ピクセルあたり256レイ、128レイ、64レイ、32レイの4パターン分類して、水面や投射平面に対して直行する角度に近い面など、反射面の品質が要求される箇所には多数のレイを、そうでない箇所には、少数のレイという、可変レートレイトレーシングを採用して、レイの割り当てにメリハリをつける事で、品質とパフォーマンスのバランスを取っている。要するに、一律で全力で頑張るということではなく、ピカピカ綺麗に見せるところは頑張って、そうでもないところは力を抜くということだ。

 このほかにもレイをビニングによりまとめてしまったり、階層化スクリーンスペースでレイトレースに失敗してもスクリーンスペースリフレクションで補うハイブリッド化がなされていたり、空いているシェーダーに発生しないようにフラグメントを解消したり、ライトをセルに区切ってまとめたりといった工夫をしている。

【「BFV」の解決された問題点】

 それぞれの簡略化には、速度アップと引き換えに欠落する情報があるため、当然のことながら壮絶なノイズに見舞われてしまう。この解消のためにBRDFによる空間軸フィルタ、TAAによる時間軸フィルタ、それぞれの処理を行なった上で、さらにアングルとラフネスの情報から光線の影響する高さと幅を求めてイメージベースでノイズ除去を行なっている。

【「BFV」の採用フィルタ】

 残るはシーン全体の軽量化ということになるが、もっとも有効なのは描かないこと、つまりカリングである。正確な反射する像を得るためには、本来は画面外や遮蔽されたオブジェクトでもカリングするわけにはいかないのだが、本作のカリングはかなり大胆だ。

 経験的に“遠くのものは大して重要ではない”ということの判定基準に、反射面までの直線と、鏡像の実体までの直線がなす角が4度を超えている小物の鏡像は描かれない。よくよく鏡面を見れば、本来は映りこんでいなければならないものが消えることになるが、これもパフォーマンスとのトレードオフだ。これによりDXRのトップレベル、ボトムレベルともに反射構造を1/10に削減することができ、CPU側は60FPS、GPU側は2~3msを達成している。

【DXR有無による差異】
【高速化とカリング】

 これらの他にも、リフレクションには、アルファ付きのオブジェクトのアルファ部分や、ビルボードの向きによる不自然な鏡像に対する対処が必要だが、そもそもアルファチャネルのある現実では立体として存在しえないオブジェクトを多様するのはゲーム特有といえるから、これらの対処はやむを得ないところだろう。

【リフレクション考慮事項】

 ここまで見てきたように、「BFV」の事例は、RTXでのリアルタイムレイトレーシングが一筋縄ではいかないことを物語っている。これは本当に奇妙な話で、リアルタイムレイトレースのウリは、正確で高速な光源処理であったはずだ。ハードウェアアクセラレーションによって、透過的に美しいレンダリング結果が得られるという触れ込みはどこへ行ったのだろうか。

 現時点のRTコアでは、正確で高速なレイトレースどころか、レンダリング品質に直結するサンプリング数を減らし、有能なプログラマが自身のアイディアで処理を簡略化して、さらにかなりの品質低下に目をつぶって、ようやくリアルタイムで間に合うレベルだ。それでも、いや、であるがゆえに、レンダリングイメージに含まれるノイズは相当なもので、それらを緩和するためにノイズ除去を行なわなくてはならない。ノイズというと、ほんの少し乱れたピクセルが含まれるだけのように感じるが、デノイズ前の「BFV」の鏡面のレンダリングイメージは、まるでレンダリング途中のイメージのようである。

【「BFV」のリフレクション】

 これなら最初からリアルタイムでレイトレースを行なわずに、AIでいい感じの鏡像を求めることはできないものかと思ってしまう。スクリーン内のものも外のものも、オフラインで時間をかけてレンダリングしたさまざまな光源方向から影響を受けたオブジェクトを幾度も学習させて、視点、鏡面、オブジェクトの位置、光源の位置を考え合わせて、だいたいいい感じの鏡像のマップを生成して、それを鏡面に貼り付けるだけ、というわけにはいかないのだろうか。

 結局、まだまだ現状のGPUではリアルタイムで間に合わないのなら、鏡面反射のみならず、空間内のライディング、シャドウイング全般に対して、AIの活用の方を突き詰めていただいて、だいたい似た感じのレンダリング結果から、だいたい似た感じのピクセルを拝借してくる技術が進化した方が、ニーズにマッチしているような気がしてならない。

 ゲームにおいては、テクスチャリソースのアップサンプリングや、ノイズ除去、といったすぐに使える技術はすでにGameWorksのなかに取り込まれて久しい。近似のシーンからレンダリングを高速化するデモも、すでにSIGGRAPH2017のDGXのデモで行なわれていたが、このTensorとRTでアクセラレートされるOptiXレイトレースエンジンは依然として映像の方ばかり向いている。これをリアルタイムゲーム向けに簡略化、高速化したものをゲームエンジン向けレンダラーとしてNVIDIAが供給してくれれば、みんな幸せになれるかもしれない。

【「BFV」のリフレクション】

 さて、当のNVIDIAの方は、ディープラーニングのゲームへの活用に関するセッションのなかで、「BFV」を題材にして、DLSS(Deep Learning Super Sampling)というAIを活用したエッジのアンチエイリアスと画面全体のアップスケーリングについて紹介している。NVIDIAによれば、このDLSSで「BFV」のパフォーマンスが最大で40%向上したという話だ。

 この40%というのは実に単純で、「BFV」の60FPSプレイ時の推奨セッティングが、例えばRTX 2060で1,980×1,080のフルHDから 2,560×1,440に引き上げられ、解像度が40%引き上げられました、という話だ。このマジックは、1,980×1,080でレンダリング出力して、すでに2D平面になっているフレームバッファの中身を、DLSSでアップスケール処理しているだけだから、フレームレートが60FPSが84FPSに40%高速になりました、とは絶対にならないのである。

翌日のNVIDIAセッションに登壇した同社Technology EngineerのPaula Jukarainen氏

 このDLSSでやっていることの第1段階は、レンダリング時のエッジのアンチエイリアシングで、インプットテクスチャと、前フレームからの変化部分を示すモーションベクターを使用する。この第1段階では、とくに学習の話はなかったので、やっていることはTAAと大差ないように感じる。

 続く第2段階がポスト処理として実装されているディプラーニングによるスケーリング部分だ。最低1080pでFP16の画面全体のシーケンスを学習ソースに、1spp(ピクセルたり1サンプル)のインプットバッファ、モーションベクター、リファレンスバッファを学習に必要なデータ領域として使用する。

【「BFV」におけるDLSSのテーマ】

 DLSSの結果はTAAと比較しても、まずまず良好だが品質は解像度に依存するとのこと。2160pの場合ではTAAよりやや品質は劣るが最大3.4Mピクセルのメモリが節約できるメリットがある。RTXの反射部分に対するアンチエイリアスが現在取り組んで要る最中だということだ。反射している鏡像は正しいモーションベクターを持っていないので、学習に必要なデータが足りないのだ。さまざまなバリエーションのシーンに対しても対応できるが、得手不得手はあるようだ。ただ、あらゆるシーンで学習を行なったわけではないとのことだった。

【「BFV」におけるDLSSのテーマ】

 従来のアンチエイリアスでは、どうしてもエッジが眠くなってしまう傾向にあった。もっともこれは当然で、アップスケールによるエッジのジャギーを低減するためにアンチエイリアスをかけているわけだから、何の不思議もない。ただスケーリングの程度によっては、どことなく眠いぼんやりした印象を与えることはあるだろう。人間の知覚というか個々の感性の問題もあって、このあたりのところは、どのやり方が正解と一概には言えない部分ではある。品質に差がないなら、計算コストが安くてリソース消費が少ないほうがいいから、そういう意味ではDLSSにはアドバンテージがありそうだ。

【「BFV」におけるDLSSのテーマ】

 「BFV」に関する2つのセッションでは、リアルタイムレイトレーシングについても、AIスケーリングのDLSSについても、ようやく飾らない言葉で率直なところを聞くことができた。どちらも、始まったばかりのテクノロジで、「BFV」はEAの看板タイトルにもかかわらず、未踏の領域に果敢にチャレンジしたということになる。

 ただし現時点のRTXではまだまだ不足する演算性能を、アプリケーションレベルでの創意工夫で簡略化して、なんとかリアルタイムに間に合わせているというのが実のところだった。DLSSについても、優秀なスケーラーであることは間違いない。やや問題があるのは、これを40%の高速化としているマーケティングの方だろう。

 とはいえ、これらをネガティブに捉える必要はない。Turing世代のGPU展開は始まったばかりだし、ハード、API、ゲームエンジンそれぞれが、今後成熟していくことは間違いないからだ。

【TAA vs. DLSS】