GPUの「レイトレーシング処理」改良の歴史をひもとく【Radeon RX 7000シリーズ編】レイトレーシングが変えるゲームグラフィックス(第6回)(2/5 ページ)

» 2024年08月23日 20時00分 公開
[西川善司ITmedia]
※本記事はアフィリエイトプログラムによる収益を得ています

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つ”の改良を施したという。どのような改良を施したのか、見ていこう。

パッケージ Radeon RX 7000シリーズのパッケージ(Navi 3)を掲げるAMDのリサ・スーCEO

改良ポイント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つ下の階層に……といった処理を繰り返し、最下層の直方体に含まれるポリゴンを突き止める、というような仕組みでレイとポリゴンの判定を行っている。

 レイと直方体との判定は、単純な座標の大小比較の組み合わせで行える。上階層の直方体で衝突しなかったとすれば、その直方体サイズ分だけレイを“ワープ”させられるので、レイを効率よく進められる。同様に「何も存在しない広大な空間」も、この仕組みによって一気に“ワープ”できる。

BVHを活用した交差判定のイメージのおさらい BVHを活用した交差判定のイメージ。レイを発射したら、そのレイと衝突している直方体があるかどうかを検出する仕組みを取っている。なお、BVHは、階層構造として「ボトム(下位)」と「トップ(上位)」という概念を取り入れている(図版はインプレスから発売されている「ゲーム制作者になるための3Dグラフィックス技術 改訂3版」から引用)
BVHの階層構造のおさらい BVHは直方体の階層構造となっているため、レイは直方体があると検出すると、ぶつかったレイが“どの層の”直方体に相当するか探査を進める。最終的に、最下層の直方体に含まれるポリゴンに対して衝突判定を行うことになる(ゲーム制作者になるための3Dグラフィックス技術 改訂3版より)

 極端な例になるが、3Dシーンに半透明の「お化け」がいたとする。正確性を重視するなら、これもレイトレーシング法で正しい描画を行うべきだ。しかし、開発実務の都合から「どうせ、お化けの実体像は今までの『ラスタライズ法』で描画するし、半透明のキャラクターなんて周囲に及ぼす間接光や透過光、遮蔽(しゃへい)の影響は少ないから、無視しよう。よってお化けはレイトレーシングによる描画対象としない」という判断がなされる可能性もある。

 この判断が下された場合、Ray Flagを駆使することでお化けを囲むAABBを無視したり、レイの衝突判定から“除外”したりできる。RDNA 3では、このRay Flagの判定をハードウェアで行える拡張を施して効率を高めたというわけだ。

BVH判定の流れ この図版では、RDNA 2とRDNA 3におけるBVH判定の流れの違いを比較している。RDNA 3では、Ray Flagの判定をハードウェアベースとすることで高効率で例のワープを行える(Ray Flagのバリエーションは、Microsoftによるドキュメントを参照してほしい)

 GeForce RTX 40シリーズのOMEでは、ポリゴンに貼り付けられたテクスチャーの内容も吟味するような、高度な衝突判定を行う仕組みが実装された。それに対して、RDNA 3におけるRay Flagはそこまで踏み込んだ実装とはなっていない。

 しかし、実装が高度であるがゆえに、GeForce RTX 40シリーズのOMEは現状の「DirectX Raytracing」からは利用できず、NVIDIA独自の拡張APIを介して利用しなければなならない。その点、RDNA 3のRay FlagはDirectX Raytracingを使っていれば、既存ゲームでもその恩恵にあずかれるという点が大きなアドバンテージとなる。

 わざわざ最適化をしなくても、レイトレ対応ゲームが高速化されるということだ。

Copyright © ITmedia, Inc. All Rights Reserved.

最新トピックスPR

過去記事カレンダー