レイトレーシング領域に踏み込むRTコア

Turingアーキテクチャの最大の売りは、リアルタイムレイトレーシング機能だ。現実の世界に近い映像をコンピュータで生成するには、ポリゴンで構成されたオブジェクトが、どんな風に見えるかを必死に計算して求める。

視点の位置からあるポリゴンが画面のどこに投影されるかを計算し、色や明るさ等を計算する「ラスタライズ法」と、視点からレイ{仮想的な光)を放ち、それがどのポリゴンに当たるか、さらにその反射した先にどんな光源があるかを調べて描画する「レイトレース法」の2つがある。前者は計算量が少ないためPCゲームはもちろん映像制作でも広く使われてきた。

それに対し後者でちゃんとした映像を作るには、無数のレイを投げ続ける必要がある。計算コストがあまりにも重いため、リアルタイムで処理はできなかったのだ。

  • ラスタライズ法{左)は、仮想的な視点から見えるポリゴンのみ最終的なドットにまるまで処理されるのに対し、レイトレース法{右)は視点からレイを飛ばし、航跡を実際の物理同様に処理する。そのため光源が視点から直接見えなくても画面上のオブジェクトに影響を与えるのだ

Turingに搭載されたRTコアは、この仮想的なレイを投げて衝突判定を行う処理を専門に行う。これまではシェーダーでGPGPU計算をして処理するしかなかったので、この一番計算コストのかかる部分を専用ハードにまかせてしまおうというのがRTコアの狙いだ。

  • レイトレーシングをリアルタイムで行うためには、放たれたレイがどのポリゴンに当たるのかを調べる処理を超高速で行う必要がある。そこでRTコアは大まかなブロック単位で衝突判定するという処理を繰り返しながら、実際にレイが衝突したボリゴンを効果的に絞り込むという「BVH{Bounding Volume Hierarchy)トラバーサル法」という技法をRTコアに組み込んだのだ

ただ、RTコアはレイトレーシングにおける全て処理を実行できる訳ではないし、Turing自体もラスタライズ法とレイトレース法は併用することが前提になっている。

「視点から見えない所にあるオブジェクトの映り込み」「光源の位置や形、色等の効果を考慮した自然な影」といった処理はラスタライズ法で実装するのは計算コストがかかる上に面倒なのだが、こういう部分をレイトレーシングに投げてしまうことで、いままでシェーダーテクニックを駆使して描画させていた映像が、ぐっとシンプルに表現できる。そして得られた映像のリアリティーも高いというわけだ。

  • ラスタライズ法では光源の大きさは点だし、それが生成する影は輪郭がシャープ。色のついた壁に反射した光が球に影響する効果とか、映り込みの質感もちゃんと表現できない。もちろん別途処理を立ち上げるとか、事前計算済みのテクスチャを適用する等でもっとそれっぽく表現できるが、その努力はどうよ、というのがRTXの投げかける問いなのだ

  • RTXを効かせるとシーンの表現力はガラリと変わる。光源は面にもできるし、複数の光源を配置し、その結果複雑な屈折や影の計算{透明球の左から入射した青の光が、右下に青い光のスポットを作っている点に注目)。影の表現も自然で柔らかい。これをリアルタイムで実行する要がRTコアなのだ

このリアルタイムレイトレーシングの機能を型番の「RTX」なのである。RTXは様々な階層で構成されているが、注目すべきはドライバ層の部分にマイクロソフト版のリアルタイムレイトレーシング実装である「DXR」がすでに入っていることだ。つまりNVIDIAは、次世代PCゲームグラフィックスを体験し、もっと使ってもらうためのGPUとしてTuringを放ったとも言える。

  • RTX 20シリーズに搭載されたリアルタイムレイトレーシング機能を使うための枠組みが「RTX」。中段はDirectXに相当する部分だが、現時点ではDirectX12にマージ予定のDXRと、Vulkan、そしてNVIDIAのOptiX等を通してRTXを構成する下の4要素にアクセスすることになる

ゲーム側のリアルタイムレイトレーシング対応も「RTX対応の有無」という形で表せる。直近では「Shadow of the Tomb Raider」「Battlefield 5」「Metro: Exodus」「Assetto Corsa: Competizione」等が挙げられているが、ここからどうRTX対応ゲームを増やしていくかがポイントになるだろう。

  • 会場でデモされた「Battlefield 5」での1シーン。地面が濡れており、その上に立っている兵士が映り込む、あるいは上を飛んでいる火炎放射器の炎や、さらに上空を飛ぶ航空機でさえも、リアルタイムで反射する。この処理はラスタライズ法では非常に面倒臭い

  • ラスタライズ法の弱みは、視点の後ろにある建物等がガラスに映り込むシーンを作りにくいこと。実際この図ではガラスに映り込んでいるように見えるが、これは事前に映り込んでるように見せかけるテクスチャを貼っただけなのだ

  • レイトレース法にすれば、特別なテクスチャを用意する必要もなく、RTXに投げるだけでリアルな映り込みが表現できる。リアルタイムレイトレーシングなので、映り込んだ窓の先で敵が動けば、映ったガラス側にもその様子が見られる

  • 炎に兵士が照らされるというシーンだが、兵士が持っている銃に炎が映り込んでいる点に注目。実際この炎は視点の後ろにあるのものだが、レイトレース法なら反射もお手のもの。ちゃんと装具の凹凸に合わせ映り込み領域も変化しているのだ

  • RTX対応を表明しているゲームは現時点で21本。ただしどういった表現を取り入れるかは不明。PUBGがRTXでどう変わるかは非常に興味が湧くところだ

AIも活用するためのTensorコア

TuringではRTコアとは別にTensorコアも搭載されている。TensorコアとはVoltaで初めて実装された回路で、行列同士の掛け算、特にFP16のテンソル演算を超高速で実行することができる。深層学習に向いた回路ではあるが、なぜゲーミング向けGPUにTensorコアを付けたのか?

  • TuringベースのGPUは、全体が大きく3つに分類される。RTXの核心というべきRTコア、そしてAI担当のTensorコア。従来のCUDAコア部分は規模をやや拡大しているが、今回は浮動小数点と整数演算を並列して実行できる

答えはNVIDIA自らが出している。レイトレーシングで映像を作る際、投げるレイの数が十分でないと、ノイズの非常に多い点描のような映像になる。だがAI、もっと言えばディープラーニングを使えばノイジーな映像から、キレイな絵を生成することができる。同様にアンチエイリアスもディープラーニングを利用してより低計算コストで高い効果が得られる。

ここで注意したいのは、TuringのTensorコアはこれらの処理のための学習をする側ではなく、学習データをもとにデータを処理するエッジAI部分を担当するためのものだ。RTコアとTensorコアは無関係のように見えるが、実は緊密につながっているのである。

  • RTX 20シリーズにおけるレンダリングパイプラインはおおよそ4ステージに分類できる。そして各ステージはコア内の異なる区画{CUDAコア部やRTコア部等)を使って処理される。この時、各区画の計算能力をある法則でまとめたもの、それが1秒あたりのRTX処理の数、すなわち「RTX-OPS」で、RTX 2080Tiでは78T RTX-OPSとなる。ちなみに78TのTをジェンスン氏はTrillionと言っていたがTeraでも良いようだ

  • アンチエイリアス処理の中で、どう色を置けば美しく見えるかという“コツ”をスパコン上のDNN{Deep Neural Network)で学習させ、それをRTX 20シリーズでエッジAIとして運用する。4K解像度でのTAA{Temporal AntiAlias)はかなり重いが、DLSSならTAA以上の効果と効率が得られるという

  • AIを利用した画像のアンチエイリアスやデノイズ処理は「NGX」と呼ばれる。NVIDIAのデータセンターで予め超精細なイメージをもとにPC上で表示されるサイズの画像にどう処理すればよいか学習させる。その結果できたAIモデルがGPUドライバに組み込まれ、Tensorコアがこれを活用するという段取りだ