ゲームグラフィックスへのレイトレーシング(レイトレ)適用が増えてきた昨今。ゲームの開発シーンでは、現世代のゲーム機において「どんなレイトレ活用が向いているのか?」という“基本解”が導き出されつつある。その辺の話は、この連載の第2回で取り上げた。
家庭用ゲーム機よりも進化の速いPC向けのGPUの世界では、さらに高度なレイトレーシング技術の実現(活用)を目指して、GPUに統合された「レイトレーシングユニット(RTユニット)」の機能/性能強化が進んでいる。今回は、AMDの「Radeon RX 7000シリーズ」におけるRTユニットの進化を見ていこう。
ここ最近は、NVIDIAの最初のRTユニット搭載のGPUであるGeForce RTX 20シリーズ以降のRTユニットの進化の歴史を解説してきたが、今回は、AMD「Radeon RX 7000シリーズ」のRTユニットの進化について見ていくことにしたい。
●競合から2年遅れて「レイトレ対応GPU」を投入したAMD
NVIDIAが、ハードウェアベースのレイトレーシング機能を世界で初めて搭載した「GeForce RTX 20シリーズ」を発表したのが2018年だった。
競合のAMDは2019年、新GPUアーキテクチャ「RDNA」を発表し、同アーキテクチャを採用したGPUの開発コード名が「Navi」となることを発表した。
Naviは「Radeon RX 5000シリーズ」として製品化されることになったわけだが、多くのPCゲーミングファンは「Radeon RX 5000シリーズには、きっとRTユニットが搭載されている!」と確信していた。
ところが、ここでまさかの“肩透かし”が発生する。Radeon RX 5000シリーズはレイトレ“非対応”だったのだ。
結論からいうと、AMDのGPU(Radeonシリーズ)がレイトレ対応を果たすのは、2020年に登場する「Radeon RX 6000シリーズ」を待つ必要があった。レイトレ対応の家庭用ゲーム機「PlayStation 5」や「Xbox Series X|S」とほぼ同じタイミングでの登場だ。
これだけを見ると、AMDはNVIDIAに2年の遅れを取ったことになる。
だが、PlayStation 5やXbox Series X|SはAMD製のAPU(GPU統合型CPU)を採用しており、グラフィックス回り(GPUコア)はRadeonベースである。単体GPUではレイトレ非対応なのに、APUではレイトレ対応となったのだ。
そういうこともあり、当時は「なぜ、Radeon RX 5000シリーズ(RDNA)の時点でレイトレ機能を搭載できなかったのか?」という議論が盛り上がったことを記憶している。
その答えは、端的にいうとRadeon RX 5000シリーズは“コスパ重視”の“中継ぎ”として開発されたからである。最初からレイトレ対応するつもりがなかったのだ。
実際、Radeon RX 5000シリーズの最上位モデル「Radeon RX 5700 XT」のピーク時の演算性能は約9.8TFLOPSで、1つ前の世代の「Radeon VII」(約13.4TFLOPS)はもちろん、さらに2世代前の「Radeon RX Vega 64」(約11.1TFLOPS)よりも低かった。
しかし、そんなAMDの思惑をユーザー側が知る由もない。Radeon RX 5000シリーズは、レイトレ対応を強く期待していた人たちの期待に応えられなかった。ただただ「AMDはNVIDIAに対して遅れている」というイメージを増大させるだけに終わってしまった感がある。
レイトレ初対応は「Radeon RX 6000シリーズ」に
Radeonがハードウェアベースのレイトレーシングに初対応したのは、2020年末に登場したGPUアーキテクチャ「RDNA 2」からとなる。GPUチップとしての開発コード名は「Navi 2」で、製品名は「Radeon RX 6000シリーズ」だ。
余談だが、先に紹介したPlayStation 5やXbox Series X | SのGPUコアもRDNA 2アーキテクチャベースである。
2022年末には、現時点で最新のGPUアーキテクチャ「RDNA 3」を採用した「Radeon RX 7000シリーズ」(開発コード名:Navi 3)が発表された。
トップモデル「Radeon RX 7900 XTX」のピーク時における理論性能は約61TFLOPSと、先代の「Radeon RX 6900 XT」の約23TFLOPSから2.6倍ほどパワーアップアップしている。驚きの性能向上ぶりだ。
ライバルの最上位機「GeForce RTX 4090」の約83TFLOPSには水を開けられているものの、実売価格(16万~20万円程度)や定格消費電力(355W)はだいぶ低い。性能を鑑みると、ちょうどGeForce RTX 4090と「GeForce RTX 4080 SUPER」(約52TFLOPS/消費電力320W)の中間に来るイメージだ。
●Radeon RX 7000シリーズのRTユニットはどう進化した?
前回も触れた通り、、AMDの競合たるNVIDIAは、GeForce RTX 40シリーズにおいてRTユニットへ随分と手を込んだ改良を施した。これは同社のRTユニットが“第3世代”となり、AMDよりも1世代分多くの経験を積んできたことの表れともいえる。言い換えれば、リアルタイムレイトレーシングを実現する上で「RTユニットが抱える問題点」をより多く洗い出せた結果、改良へのモチベーションにつながったということだ。
対して、AMDはRDNA 2世代のRadeon RX 6000シリーズで初めてハードウェアベースのリアルタイムレイトレーシングへの対応を果たした。そしてRDNA 3世代のRadeon RX 7000シリーズで初の「RTユニットの改良」に挑んだことになる。
RDNA 2からRDNA 3への進化に当たり、AMDはRTユニットに“3つ”の改良を施したという。どのような改良を施したのか、見ていこう。
改良ポイント1:「Ray Flag」機能の実装
1つ目の改善ポイントは「Ray Flag」機能にハードウェアで対応したことが挙げられる。
結論からいえば、これはNVIDIAがGeForce RTX 40シリーズに実装した「OME(Opacity Micromap Engine)」の超簡易版のようなものだと考えればいい。
レイトレーシングでは「その3Dシーンに存在する3Dモデルを構成するポリゴンとの衝突を取る」という目的を持って、レイ(光線)を3Dシーンへ放つ。しかし、何も考えずにこれをやろうとすると、レイと3Dシーン内に存在する全ポリゴンとの“総あたり”で計算することになってしまう。“リアルタイムな”レイトレーシングなんて、とても実現できない。
そこで、3Dシーン内に存在する3Dモデルたちをピッタリと囲みつつ、3D座標軸に平行/垂直な向きにそろえた直方体「AABB(Axis Aligned Bounding Box/軸平行境界ボックス)」を生成し、この直方体を階層構造にしたような「BVH(Bounding Volume Hierarchy)」に対してレイを放つ仕組みを採用している。
もう少し具体的にいうと、レイと直方体との衝突があった場合、その探査範囲を1つ下の階層にある「より小さな直方体」に広げ、また例と直方体がぶつかったら1つ下の階層に……といった処理を繰り返し、最下層の直方体に含まれるポリゴンを突き止める、というような仕組みでレイとポリゴンの判定を行っている。
レイと直方体との判定は、単純な座標の大小比較の組み合わせで行える。上階層の直方体で衝突しなかったとすれば、その直方体サイズ分だけレイを“ワープ”させられるので、レイを効率よく進められる。同様に「何も存在しない広大な空間」も、この仕組みによって一気に“ワープ”できる。
極端な例になるが、3Dシーンに半透明の「お化け」がいたとする。正確性を重視するなら、これもレイトレーシング法で正しい描画を行うべきだ。しかし、開発実務の都合から「どうせ、お化けの実体像は今までの『ラスタライズ法』で描画するし、半透明のキャラクターなんて周囲に及ぼす間接光や透過光、遮蔽(しゃへい)の影響は少ないから、無視しよう。よってお化けはレイトレーシングによる描画対象としない」という判断がなされる可能性もある。
この判断が下された場合、Ray Flagを駆使することでお化けを囲むAABBを無視したり、レイの衝突判定から“除外”したりできる。RDNA 3では、このRay Flagの判定をハードウェアで行える拡張を施して効率を高めたというわけだ。
GeForce RTX 40シリーズのOMEでは、ポリゴンに貼り付けられたテクスチャーの内容も吟味するような、高度な衝突判定を行う仕組みが実装された。それに対して、RDNA 3におけるRay Flagはそこまで踏み込んだ実装とはなっていない。
しかし、実装が高度であるがゆえに、GeForce RTX 40シリーズのOMEは現状の「DirectX Raytracing」からは利用できず、NVIDIA独自の拡張APIを介して利用しなければなならない。その点、RDNA 3のRay FlagはDirectX Raytracingを使っていれば、既存ゲームでもその恩恵にあずかれるという点が大きなアドバンテージとなる。
わざわざ最適化をしなくても、レイトレ対応ゲームが高速化されるということだ。
改良ポイント2:ハードウェアによるBVHのソーティング
2つ目の改良ポイントは、BVHに対するレイ探索に2つの新バリエーションが加わったことだ。もう少し具体的にいうと、「レイトレーシング法で描画するテーマ」ごとに、BVH内にあるAABB(直方体)の順序をハードウェアベースで並べ替える「ハードウェアによるBVHのソーティング」機能が追加されている。
「放ったレイが、3DシーンにおけるどのAABBに衝突するか?」という探索工程は、実務に置き換えると「グラフィックスメモリ上に記録されたデータ列を探索する」という作業ともいえる。そこでAMDは「なら、そのデータ(AABB)の順番を、レイトレーシングの活用目的に応じて並べ替えれば、効率の改善につながるのでは?」と考え、RTユニットにハードウェアとして実装したのだ。
上図では、3つのレイ探索モードが示されている。一番上は通常の探索モードで、真ん中と一番下がRDNA 3において新規実装されたモードとなる。
中央の「Largest First」は、放たれたレイが横切ることが想定される直方体を、大きい順に並べ直すという処理だ。放たれたレイが最初に大きなものに衝突することになるので、影生成に最適とされる。
確かに影生成では、視点から光源に向かってレイを飛ばした際に、手前に小さいオブジェクトがいくら立ち並ぼうが、結局大きいオブジェクトが光を全て遮蔽(しゃへい)してしまうので、手前のものたちが“全て”影で飲み込まれてしまう。つまり、影生成が目的のレイトレースだったら、大きいオブジェクトとの衝突判定を早期に行った方が、処理を早く完了できる可能性が高まるのだ。
下段の「Closest Midpoint First」は、放たれたレイが横切ることになる直方体群の“中心点”を求めて、近い順に並べ替えるという処理だ。このモードは、レイの発射元から近いものが一番影響を及ぼすことになる「映り込み表現」や「間接光表現」などに向いているとされる。
3Dゲームグラフィックスでは、着目しているピクセルの位置(レイの発射元)から遠いオブジェクトは、影響が少ないと判断して無視しても問題ないと判断されることも多い。そのため、先述の通り映り込みや間接光を表現するためにレイトレースする際に、このモードは都合がよくなる。
両者共に、最適化(プログラムの改修)なしに既存のレイトレ対応ゲームを高速化できる機能となる。
改良ポイント3:不要な「テクスチャー読み出し」の放棄
3つ目の改良ポイントは、まず下に示すスライドを見てほしい。最上段にある「青と赤のマス」の図解がそれだ。
青いマスは「有効な衝突レイによるテクスチャーの読み出しリクエスト」、赤いマスは「読んでも読まなくても構わないリクエスト」を表していると考えてほしい。
この図解を概説すると、「レイが衝突した先のポリゴンに設定された各材質ごとの陰影計算を、プログラマブルシェーダーを呼び出して行う際に、新しい最適化処理を2つ組み込んだ」というものになる。
3Dグラフィックスに明るい人なら、この説明を見て「これって、GeForce RTX 40シリーズの「SER(Shader Execution Reordering)」と同じような機能じゃない?」と思うかもしれない。しかし、実際にやっていることは全然違う。順を追って説明しよう。
まず大前提の知識として、レイトレーシング処理をする場合でも、ライティングや陰影処理の実務は結局、RTユニットではなくプログラマブルシェーダーユニットが担当する。このことは、この連載を読んできた読者なら改めて解説する必要もないだろう。
このことを踏まえた上で、レイトレーシングの処理系を改めて思い出してみよう。レイが衝突した先のポリゴンに設定された各材質ごとの陰影計算の実務は、プログラマブルシェーダーが呼び出だれて実行される。その際に、プログラマブルシェーダーは材質表現にひも付けられているテクスチャーを読み出すことになる。
テクスチャーを読み出すには、テクスチャーアドレスの計算が必要だ。そのテクスチャーにMIPMAP(ミップマップ)が設定されている場合は、そのレベルも算定しなければならない。最終的なテクスチャーの読み出し値は、「1点読み出し(ポイントサンプル)ではなく、MIPMAPを絡めて複数点を読み出した上で計算された「特殊な加重平均(異方性フィルタリングなど)」となる。
AMDの分析によると、近代GPUで実践されるリアルタイムレイトレーシングの処理系では、この特殊な加重平均を行う処理系が大きなボトルネックになっているケースが多いのだという。先代のRDNA 2におけるRTユニットでは、言葉を選ばずにいえば“ばか正直に”この処理を行っていた。「その何が問題なのか?」と思うかもしれないが、そうなるとMIPMAPレベルの算定段階で「テクスチャーを読んでも読まなくても結果に差異なし」というレイに対しても、後段の処理が行われてしまうことが問題となる。
そこでRDNA 3のRTユニットでは、プログラマブルシェーダーユニットに陰影処理を外注する前に、RTユニット側からテスクチャのMIPMAPレベルの算定を行えるメカニズムを導入した。これが本改良の第1ステップとなる。
続く第2ステップは、「テクスチャーを読んでも読まなくても結果に差異なし」と見込まれるリクエストを“捨てる”処理系の実装だ。このステップを踏むことで、本当に必要な陰影処理だけが、プログラマブルシェーダーで実践されることになる。
先に挙げたスライドの図解はとても難解だが、結局は有効なテクスチャーの読み出し(=青いマス)だけを有効化し、不要なテクスチャーの読み出し(=赤いマス)は破棄するという説明だったのだ。
リアルタイムレイトレーシング技術において、AMDは「テクスチャーのフィルタリング処理は、非常に重要な処理系だ」「この処理系の高効率化は、レイトレーシングのパフォーマンスと、画質の最適化にも直結する」と主張している。地味ながらも、大きな効果を発揮しているのだろう。
先に挙げた改良と同様に、既存のレイトレ対応ゲームもプログラムの改修なく恩恵にあずかれるので、即効性の高さが期待できる。
●AMDとNVIDIAとで異なってきた「レイトレ技術の進化方針」
この他、AMDはRDNA 3のレイトレーシング機能について、再帰的なレイトレーシングパイプラインが実行された際のパフォーマンス向上につながる以下の改良を施している。
・スタック管理のハードウェア化の実践
・Vector GPR(ベクトル命令実行用汎用目的レジスタ)の増量(RDNA 2から1.5倍に)
同社によれぱ、ここまで紹介してきた全ての改善ポイントが生かされると「同クラスのRadeon 6000シリーズ比で最大1.8倍程度のパフォーマンスを発揮できる」という。
NVIDIAがGeForce RTX 30シリーズ、GeForce RTX 40シリーズに施したRTユニットの改良と比べると、AMDの改良に派手さはない。しかし、NVIDIAが施した改良を活用するにはゲーム(プログラム)側の対応が必要なのに対し、AMDが施した改良はゲーム側の改変無しで効能を得られるのが特徴だ。
この「改良方針」の違いは、今後登場するであろう両社の新GPUにも引き継がれていくものと思われる。
AMDの改良方針の場合、多くのレイトレーシング対応ゲームに即効性をもって恩恵を与えられる。一方で、NVIDIAの改良方針は、ゲーム側での最適化は必要なものの、それをやってしまえば劇的なパフォーマンスアップが期待できるとされる。
ゲームを開発する側からすると、「NVIDIA専用の最適化」は、面倒な追加開発工程となる。しかし、それでも実力派スタジオや大手スタジオの一部が“わざわざ”NVIDIA GPUへの最適化に乗り出すのは、やはり現状のGPUシェアにおいて、NVIDIAが占める割合が大きいということが理由の一端となっているのだろう。
逆に、GPUのシェアで後じんを拝しているAMDが取る「改修なしで恩恵が得られる性能強化」も、これはこれで理にかなってはいる。
今後、アナウンスが期待されている、両社の次世代GPUにおいて、それぞれのレイトレ機能がどう進化するのかが楽しみだ。