ニュース
DirectX、ゲームの視覚的品質を次のレベルに押し上げるレイトレーシングに対応
2018年3月20日 13:14
米Microsoftは19日(現地時間)、リアルタイム・レイトレーシングによる3Dグラフィックスを実現する「DirectX Raytracing」(DXR)を発表した。
いま3Dゲームで主流のグラフィックス技術は「ラスタライゼーション」によるものだ。これは、言わば視点内にオブジェクトを投影する“影絵”のようなシンプルな手法である。
ラスタライゼーションでは、計算をなるべく少なくするため、画面外にあるオブジェクトを消去したり(カリングやクリッピング)、視点から見えない部分を削除したり(バックフェースカリング)、オブジェクトに前後関係をもたせ隠れている部分を消去したり(Zバッファリング)する。
しかしそのまま消去してしまうと、画面外にあるオブジェクトの影が画面内にあってもそれが表示されないし、背面が見えないからと言ってそのままカットしてしまうと影もカットされてしまうので、それらの関係が不自然にならないようなシャドウマッピング技術も開発された。
加えて、映り込みを再現する環境マッピング、スクリーン空間の反射、グローバルイルミネーションといった技術も、ラスタライズの品質を押し上げることに成功した。ラスタライゼーションは演算量を抑えることができるため、リアルタイム性を必要とするゲームでは長い間使われることとなった。
一方でレイトレーシングは読んで字のごとく、光線を辿るものだ。リアルで人が見えている物体は、その光が目に届くまで、複雑な光の反射を得ている。たとえ直日光下で見ているリンゴでさえも、太陽光のみならず、地面や周囲の風景から反射した光も含まれて目に届く。そこで、目に届く光線を逆に辿っていき、反射による影響を計算しながら描画するのがレイトレーシングによる手法である。
レイトレーシングは実際の光線を再現するので、高い品質を実現する。そのため映画などに広く使われてきた。しかし反射するオブジェクトが増えたり、反射するオブジェクト自身の材質によって計算量が爆発的に増えるため、ゲームのようなリアルタイム性が求められる3Dグラフィックスで使われてこなかった。
DXRはこのレイトレーシングをリアルタイム処理に持ち込むものであり、DirectX 12 APIには、4つの新しい概念が導入される。1つ目がacceleration structureで、GPUで処理するのに最適な3D環境を表現するオブジェクト。2つ目は新しいコマンドリストメソッドの「DispatchRays」で、光線をシーンにトレースするための起点。3つ目はray-generation、closest-hit、any-hit、miss shadersという新しいHLSLシェーダータイプで、実際の計算を指定する。そして4つ目がraytracing pipeline stateで、レイトレーシングシェーダとレイトレーシングワークロードに関連するそのほかの状態をカプセル化する。
DXRは、新たにエンジンを設けず、既存のGraphicsとComputeエンジン上で実行する。というのも、レイトレーシング自体は複雑な状態を必要とせず、ハードウェアの汎用化によって、さまざまな固定機能が最終的にはHLSLコード化されることを見込んでいるため。従来の考えでは、CreateRaytracingPipelineStateという新しいステートを作るところだが、DXRはより汎用的なCreateStateObjectによって実装した。
最終的には、レイトレーシングがラスタライゼーションの置き換えとなる可能性はあるが、現時点ではGPUの性能がかぎられているため、最初は、スクリーン空間の反射によるレンダリング手法を補完するために使われ、ゲームの視覚的品質の向上を狙う。今後数年は、トゥルーグローバルイルミネーションのような、ラスタライゼーションにおいては実用的ではないテクニックにDXRが使われることに期待される。
現時点では、Electronic ArtsのFrostbite、同SEED、Epic GamesのUnreal Engine、Futuremarkの3DMark、Unity TechnologiesのUnity Engineがサポートを謳っている。