西川 善司
近年、「リアルタイムレイトレーシング」という3Dコンピュータグラフィックスの計算処理方法がゲームグラフィックスで採用されるようになっており、今後さらに普及していくとみられます。本連載ではこの分野の初学者向けに、「レイトーシング」がどのような技術なのか、ゲームグラフィックスにどのような変化をもたらすのかを解説していきます。初回となる今回は、従来方式の「ラスタライズ法」との違いを基礎から解説します。
連載目次
以前はコンピュータグラフィックス研究開発者でなければ、滅多に口にする機会もなかった「レイトレーシング」という技術名。この「レイトレーシング」というキーワードの認知が、一般的なゲームファンのあいだでも進んだのは、最近のゲームグラフィックスにおいてこの技術が実際に活用されるようになったからだ。
この「レイトレーシング」というキーワードへの認知がここまで進んだことについての、最近までの流れを振り返ってみよう。
ことの始まりは2018年。NVIDIAが、リアルタイムレイトレーシングに対応したグラフィックプロセッサ(Graphics Processor Unit〔以下、GPU〕)、GeForce RTX 20シリーズを発表したことで、グラフィックスパイプラインに、2000年に誕生したプログラマブルシェーダ以来の大きなイノベーションがもたらされたのだ。
そして2020年には、ついに家庭用ゲーム機にもリアルタイムレイトレーシング機能が搭載された。そう、PlayStation®(以下、PS)5とXbox Series X|Sのことだ。また、NVIDIAに遅れること2年、AMDもリアルタイムレイトレーシング技術に対応したGPU、RADEON RX 6000シリーズを投入した。
昨年の2022年には、NVIDIAがGeForce RTX 40シリーズ、AMDがRADEON RX 7000シリーズを発表。2018年に「搭載GPU」が誕生して以来、リアルタイムレイトレーシング技術は年次改良を経てさらに高度なものになりつつある。そして2022年には、レイトレーシング技術搭載のスマートフォン向けGPUとして、Qulacommが「Adreno 740」を、Armが「Immortalis-G715」を発表した。
「レイトレの大衆化」は今後も怒濤のごとく進んでいくに違いない。
さて、そもそもこの「レイトレーシング」という技術は、どういったものなのだろうか。そして、ゲームグラフィックスにどんな変化や進化をもたらすものなのだろうか。
このあたりを、数回にわたって、解説してみることにしたい。
2018年に行われたWindows10向けの大型アップデート「October 2018 Update」にて、DirectXにレイトレーシング技術「DirectX Raytracing」が統合されることとなった。Windowsパソコンにおいて、汎用的なレイトレーシング技術の搭載はこのタイミングが起源となる。
一連の筆者の連載の読者にはもはや解説は不要かもしれないが、DirectXとはWindows95からWindows環境下に提供されているマルチメディアコンポーネントAPIのこと。グラフィックス、サウンド、キーボードやゲームコントローラなどの入力デバイス、ネットワークといったゲーム開発に必要なハードウェアプログラミングをWindows環境下でリアルタイムに実践しやすくするために構築されたものだ。2023年5月現在の最新版はDirectX11.4とDirectX12.2で、これらはWindows11パソコンやXbox Series X|Sシリーズ向けのゲーム開発にも利用されている。「DirectXにレイトレーシングパイプラインが統合された」ということは、WindowsパソコンやXboxのゲームグラフィックスにレイトレーシング技術を利用できるようになった……という方針が打ち立てられたことに相当するわけだが、実際には、それ以上に大きな意味がある。
というのも、歴代のあらゆるゲーム機が間接的にDirectXの進化の影響を受けてそのグラフィックス機能が設計されてきたからだ。
例えば ソニー・コンピュータエンタテインメント(現SIE)のPS3のグラフィックス機能はNVIDIAのDirectX9.0c世代GPUのGeForce 7800GTXベースだったし、PS4はAMDのDirectX11.0世代GPUのRADEON HD7850ベースだった。同様に任天堂のWii UのGPUはAMD DirectX10.1世代GPUのRADEON HD4800ベースだ。SwitchのメインプロセッサはNVIDIAのTEGRA X1カスタムなので、GPUは、NVIDIAのDirectX11.1世代GPUのGeForce GTX 700系ベースということになる。
GPUメーカーは新技術を開発すると、これをパソコン環境下の標準グラフィックスAPIともいえるDirect3D(DirectXの3Dグラフィックス・コンポーネント)への採用を提案し、これに対し業界全体的な合意が得られると実際に採用されるという流れが、これまでDirectXの長い歴史のなかで何度もあった。
最も大きな出来事だったのは、以前の連載「3Dゲームグラフィックスの歴史」の第2回でも触れた、2000年に発表され、導入が始まったDirectX8でのプログラマブルシェーダ技術の採用だ。
GPUでソフトウェア(シェーダプログラム)を実行することで、新しいグラフィックス表現を実現させるプログラマブルシェーダの仕組みは、DirectX8での採用後、今やパソコンやゲーム機のみならずスマートフォンのGPUにも採用されるほどの基盤技術となった。
ほかにも、「統合型シェーダアーキテクチャ」(DirectX10)、「テッセレーションステージ」(DirectX11)などの新技術も、DirectXのメジャーバージョンアップ時に導入され、その後のGPUの標準仕様となっている。
「DirectXにレイトレーシングパイプラインが統合される」ということは、今後のゲームグラフィックスや、多様なグラフィックスハードウェアにおいて、レイトレーシング法の採用や活用が進んでいくことがほぼ確実になったということを意味するのである。
そもそもレイトレーシングとはどういった技術なのだろうか。基礎的な話になるが、このあたりをじっくり解説していくことにしたい。
現在のパソコン、スマートフォン、ゲーム機などに搭載されているすべてのGPUは基本的には「ラスタライズ法」という手法で3Dグラフィックスを描画している。これはポリゴン(三角形)で構築された3Dシーンを、ポリゴン単位に描画していくにあたり、ポリゴンを画面上のピクセルに分解(ラスタライズ)する。ラスタライズ法という名前はここから来ている。
この、ポリゴンから分解されたピクセル群はライティング演算やテクスチャを絡めたシェーディング処理をピクセルシェーダーで行うことで、その色が確定されて画面へと出力される。
この処理系において、画面の外にある3Dオブジェクトたちは処理対象外なので存在しないものとして扱われている。これがラスタライズ法の「最大の利点」であり、同時に「弱点」にもなっている。
例えば今、画面内に正面を向いている戦士がいたとする(下画像)。
ラスタライズ法では、この図の戦士の正面は視点(カメラ)からの視界範囲内にあるのでちゃんと描画されるものの、その背中は視界に入っていないので描画対象外とされ、ないものとして処理される。もっといえば、この戦士の背後に重なっている魔道師の身体の一部もないものとして処理される。
また、ラスタライズ法では、直接光からのライティングしか行えず(間接光の概念がない)、その直接光の当たり加減としての「陰影」は自動で出るのだが、第三者に遮蔽されてできる「影」を出すことができない。
基本的にラスタライズ法では、「第三者からの関与」を処理する仕組みを完全に排除した描画手法なので、戦士の鎧に直接光としての照り返しのハイライトは表現できても、鎧に木々が映り込んでいるような「鏡像」表現も行えないのだ。
ここで「あれ?」と思った人もいることだろう。最近のゲームグラフィックスでは「影」も「間接光」も「鏡像」も出ていることが多いではないか。
じつは、現在のゲームグラフィックスで見る「影」「間接光」「鏡像」は、それらを生成するために、その都度、別途、GPUを駆動してラスタライズ法にて描画しているのだ。しかし、処理速度の都合もあり、その表現は、物理的な正しさよりも見た目のそれっぽさを重視した疑似表現となっていることが多い。
対するレイトレーシング法では画面上のピクセルからレイを放ち(キャストし)、このレイが3Dシーン内を突き進み、必要な情報を回収してくる、という仕組みを採用している。一般に「レイ」(Ray)は、直訳では「光線」と訳されるが、実際のイメージは情報を回収するために飛ばす探査機のイメージが近い(下画像の[1])。
3Dシーン内を突き進んで、第三者の3Dオブジェクトに衝突したとしたら、そこは第三者に遮蔽されていると判断できる。その遮蔽の度合いを判断すれば「影」を生成することができる(下画像の[2])。
また、その今回着目しているピクセルがツルツルとした材質だったとしたら、このピクセルにはこの第三者3Dオブジェクトが映り込むはずだ。だとしたら今衝突した第三者の3Dオブジェクトの色をとってきてここに適用すれば「鏡像」が表現できる(下画像の[3])。
この第三者3Dオブジェクトがすでに光に照らされているのだとすれば、その影響を回収して今着目しているピクセルに反映することで「間接光」の影響を反映できる。
つまり、ラスタライズ法で自動では得られない「影」「鏡像」「間接光」の処理をレイトレーシング法では一度の描画で容易に得ることができるのだ。
また、ラスタライズ法では捨ててしまっていた、画面外の3Dオブジェクト、正面からは見えていない3Dオブジェクトの背面側の情報をも、レイトレーシング法では正確に処理する。なので、画面外の3Dオブジェクトが映り込む鏡像も表現できるし、画面外の3Dオブジェクトの影を画面内に投写することもできる。また、3Dオブジェクトの背面からの間接光の影響も描画に反映できる。
かなりすごそうなレイトレーシング法だが、上記概説をさらっと読んだだけでもその演算量がラスタライズ法に比べて大きいことが想像できるだろう。
今回はここまで。次回は、このレイトレーシング技術が、実際のゲームグラフィックスにどこまで応用されてくるのかについて見ていくことにしたい。
※URLは2023年6月2日にリンクを確認済み