PC初心者、あるいは近代ゲームグラフィックスの仕組みに詳しくないゲームファンは、ここまでの結果を見ると以下の2つの疑問を思い浮かべるではないだろうか。
答えは案外シンプルだったりする。グラフィックスメモリの“差”だ。いくら演算性能に勝るGPUを搭載したとしても、グラフィックスメモリに差があると、グラフィックス品質における「下克上」が生じてしまう。
ということで、現代のゲームグラフィックスではTFLOPSで表されるGPUそのものの性能よりも、グラフィックスメモリを重視すべき……なのだが、グラフィックスメモリで重視すべき“差”とは何なのだろうか。それを知るには、現代におけるゲームグラフィックスのアーキテクチャをひもとく必要がある。
前提として、近代のゲームグラフィックスは、グラフィックスメモリの容量を大量に消費し、さらにグラフィックスメモリの帯域をえげつなく消費する。
グラフィックスメモリは、その名の通りGPUが使うメモリだ。その容量は、「8GB」「12GB」「16GB」といった具合で、グラフィックスカードのパッケージにも大きく書いてある。メーカーによっては、カードの型番に容量を示す数値が含まれていることもある。
「グラフィックスメモリ」はGPUに直結されている。CPUに直結している「メインメモリ」とは別物で、最近ではGDDR6/GDDR6X/GDDR7といった規格を採用している(Gは「グラフィックス」を表す)。
そしてグラフィックスメモリの「帯域」は、簡単にいうとGPUとグラフィックスメモリが1秒間にやりとりできるデータ量を表す。当然、数値が大きければ大きいほど、大きなデータを短時間でやりとりできるということになる。
近代ゲームグラフィックスが、大容量のグラフィックスメモリを消費し、帯域の消費も大きくなってきた――そう聞くと「4K解像度が主流になったから?」「3Dモデルを構成するポリゴン数が多くなったから?」といった理由が直感的に思い浮かびそうだ。確かにこれらも一因なのだが、もっと“決定的な”要因がある。
その1つは「レイトレーシング(レイトレ)への対応」だ。レイトレを行うためには、レイトレ専用のシーン構造体として「BVH(Bounding Volume Hierarchy)」を構築する必要がある。BVHのディスプレイサイズは「どの程度の大きさで、どの程度の複雑性をもってシーンを描画するか」によって変わるが、屋内シーンでも数十MB、屋外の広大なシーンだと数百MB〜数GBに達する。
ちなみに、BVHは「レイトレ専用の構造体」として、「レイトレを使わず、通常描画するために準備した3Dシーンの構造データ」とは別に用意しなければならない。別に用意しないといけないとなれば、そりゃあメモリ容量を“浪費”するわけである。
「レイトレは演算の負荷が重い」というイメージがあると思うし、確かにその通りなのだが、レイトレの実務を担当する「レイトレーシングユニット(RTU)」自体は、それほど複雑な幾何学演算をしているわけでもない。実は、レイトレ処理においても、実際の各種陰影計算(ライティング/シェーディング/テクスチャリング)は以前のGPUから搭載されていた「プログラマブルシェーダーユニット」に外注されているのだ。
そうなると「RTUの最も負荷が大きい仕事は何?」という疑問が生じる。
近代GPUのRTUは、大きく「レイの生成」「レイの推進」「レイの交差判定」の3つを担っている。これらのうち、先述したBVH構造体の中でレイを進ませるレイの推進処理と、BVHの中を進むレイがどのポリゴンと衝突したかを判断する交差判定は、事実上グラフィックスメモリ内のBVH構造体に対する探索動作と等しい。
これは要するに、グラフィックスメモリ内のデータをひたすら読み込みまくるという挙動となる。レイが反射したり分散したりすれば、当然データへのアクセス頻度は上がる。そしてレイが散らばれば、アクセスに対するキャッシュは効きにくくなり、ランダムアクセスを強いられる。
そしてレイトレ処理の対象となる3Dオブジェクトが動いたり、消滅したり、はたまた新たな3Dオブジェクトが登場したりすれば、BVH構造体を更新しなければならない。そう、今度はグラフィックスメモリーへの書き込み処理のラッシュが発生する。
GPUのグラフィックスメモリへのアクセス頻度は、「レイトレオフ」の時と「レイトレオン」の時とでは、全く違った状況になっているのだ。
Copyright © ITmedia, Inc. All Rights Reserved.