ここでは、NVIDIAの新しいGPUアーキテクチャである「Turing」について解説する。同アーキテクチャは、2018年8月に発表されたQuadro RTX 8000および、GeForce RTX 2080、2080 Ti、2070に採用されている。
Turingアーキテクチャ最大の特徴は、レイトレーシング用のRTコアを内蔵し、ハードウェアによるレイトレーシングが可能になること。NVIDIAの説明によれば、最大10億レイ/秒の速度でレイトレーシングが行えるという。
また、新アーキテクチャとしてNVIDIA GPUが内蔵するStreaming Multi-processor(以下、SM)も改良されている。Voltaアーキテクチャで搭載された行列演算を行うTensorコアも内蔵されており、さらに、整数演算と単精度浮動小数点(Single Precision floating point number。SP)の演算を行うコアが分離されて、並列動作できるようになった。このため、SP演算速度は、最大14TFLOPSに達する。
内蔵したTensorコアは、Deep Learning技術(AI技術)による推論処理を行うのに利用でき、RTXシリーズでは、アンチエイリアス処理にAI技術を応用した「DLSS」(Deep Learning Super Sampling)により、従来の手法よりも高速で高品質のグラフィックス表示が可能になるとしている。
NVIDIAによれば、従来手法(TAA。Temporal anti-aliasing。時間標本アンチエイリアス)を使う1080 Ti(GP102)に対して2080 Ti(TU102)のDLSSはより約2倍の速度があるという(Epic Infiltrator 4Kデモによる比較)。
Turingアーキテクチャの特徴は、前述の通りレイトレーシングをハードウェアで支援するRTコアだ。これにより、Turing世代のGPUボードでは、高品質なレイトレーシングを使ったリアルタイムグラフィックスを処理できる。
レイトレーシングとは、3次元計算を行い、オブジェクトを配置したあと、光源からの光(レイ)の反射や屈折といった光の進行を追跡して、グラフィックス画面を作る手法。映画などで使われるCG(Computer Graphics)では標準的な手法だが、リアルタイムに高品質な画像を生成することは困難で、映画などの場合には、再生時間に対して、画像の計算時間を長く取ることができるため、この手法が使われている。
これに対してGPUなどを使ったPCなどのコンピュータ上でのリアルタイムなグラフィックスには、「ラスターグラフィックス」と呼ばれる手法が使われる。3次元計算を行い、オブジェクトを3次元空間内に配置するところまでは一緒だが、そのあと、オブジェクト表面にそれらしいビットマップ画像を貼り付けることで印影のあるリアルな画像を作る。影や透過光なども光源やオブジェクトの形状から簡単な計算を行って描画している。
レイトレーシングによる描画を行う場合、光線の追跡は、光源からではなく、描画されるフレーム内のピクセルと視点を結ぶ線を延長して行う。光線の反射や屈折は可逆的であるため、逆方向から追跡しても本来の光の進行を逆にたどることができるからだ。
TU102のSMには、こうしたレイトレーシング処理をハードウェアで支援するためのRTコアが搭載されている。NVIDIAによれば、TU102は、1秒間に10億の光線(レイ)を処理できるという。RTコアでは、光線の追跡を大きく、以下の3つのステップで行う。
RTコアは、シェーダー側でデータをセットすることでレイジェネレーションを行い、ハードウェアを使って、トラバーサルおよびインターセクションのポリゴンの特定までを処理する。ポリゴンが特定できれば、光線とのなす角度やオブジェクトの材質などにより、反射や屈折、散乱といった処理(これは実際には新規のレイジェネレーションとなる)をソフトウェア(シェーダープログラム)で実行できる。
トラバーサルを行うには、事前にオブジェクトを囲む直方体(Bounding Box)をあらかじめ計算しておく。さらに隣接する複数の直方体を囲む直方体を計算して、リスト構造を作りながら繰り返し、該当のシーンに含まれるオブジェクト全体を包む直方体ができるまで行う。
これは、オブジェクトを定義するときに行う事前の処理だ。出来上がったリスト構造はオブジェクトを包含する直方体の関係を示すものとなる。レイトレーシングでは、このリスト構造を使い、追跡中の光線がどの直方体と衝突しているのかを検索していく。これがトラバーサル処理である。この手法をBounding Volume Hierarchy(BVH)アルゴリズムという。RTコアは、このBVHアルゴリズムをハードウェアで行うことができる。
トラバーサルを行うと、光線が最後にポリゴン(三角形。CGでは、全てのオブジェクトはポリゴンの集まりとして定義されている)に到達するのか、あるいは、どこのポリゴンにも衝突せずに無限遠に向かってしまうのかを判定できる。
特定のポリゴンに衝突することが判明した場合、そのポリゴン(オブジェクト)の素材データとポリゴンと光線の位置関係などから、反射、透過(屈折)、散乱などの処理を行う。
例えば、磨いた金属表面のような場合には、光線のほとんどは入射角と等しい反射角で出て行くが、材質などにより、一部が散乱されたり、そのほとんどが散乱することがある。また、透明なオブジェクトであれば、屈折が起こり、一部が反射することになる。
こうした反射、屈折、散乱は、新しい「レイジェネレーション」と考えることができ、レイジェネレーション処理を経て、それぞれをさらに追跡することになる。こうして処理を繰り返していくと光線の一部は、光源(屋内のライトや太陽など)に「衝突」することになる。これが光源となり、光線の色や強さが決定する。どこにも光線が衝突しない場合、何もない「空」に向かっていることになるため、光源として「環境光」を選択する。こうして全ての光線を追跡すれば、出発点となったピクセルの色を決定できるわけだ。
RTコアは、シェーダープログラムから制御され、レンダリング画像の各ピクセルからの光線を追跡する。このとき、トラバーサル処理、インターセクション処理をハードウェアで行い、衝突の有無と衝突したポリゴンを選択する。衝突したポリゴンが特定できれば、あとはシェーダー側のプログラムとオブジェクトの材質データ(マテリアルデータ)から反射、屈折、散乱といった挙動を処理できる。
同様の処理は、Turing以前のGPUでもシェーダープログラムで行うことは可能だった。NVIDIAのレイトレーシングソフトウェアOptixは、これを実装したものだ。NVIDIAは以前より、RTコアでの利用に向けて、GPUでのレイトレーシングを利用可能としていた。Optix向けに作られたシーンの定義は、Bounding Boxなどを含んでおり、衝突処理などのアルゴリズムは、TU102でも利用できる。
ただし、Turing以前のGPUにはRTコアがないため、レイトレーシングの速度は10倍以上違い、1.1ギガレイ/秒程度だという。
Copyright © ITmedia, Inc. All Rights Reserved.