トラバーサルシェーダー、それらは何であり、GPU上でどのようなアプリケーションがありますか

トラバーサルシェーダー

DirectX 8の登場により、新しいタイプのシェーダーの数が時間とともに増加しているため、リストに含まれる次のシェーダーはトラバーサルシェーダーと呼ばれます。これは、一時停止を伴う採用に向けた進歩と関係がありますが、レイトレーシングブレーキはありません。ゲーム。 それが何で構成されているか、そしてそれがパフォーマンスの観点からゲームにどのような改善をもたらすかを見てみましょう。

トラバーサルシェーダーは、レイトレーシングの空間データ構造のパスの問題を提起するためのXNUMXつの哲学のXNUMXつです。これは、シェーダープログラムを使用して、特殊または専用の代わりにシーンを表す空間データ構造をトラバースすることで構成されます。ハードウェア。

まず、シェーダーとは何かを思い出しましょう

Ejemplofuncionamientoシェーダー

ソフトウェアでは、シェーダーとして口語的に、コア上で実行されるプログラムを知っています。 GPU、メーカーによって名前が異なります。 そう AMD これらのハードウェアをRadeonのコンピュータユニットと呼びます。 NVIDIA GeForceではそれらをStreamMultiprocessorsまたはSMと呼び、 インテル ARC名でこれらのユニットにXeCoreを付けます。

したがって、シェーダー自体は、これらのユニットのXNUMXつで実行されるソフトウェアであり、 CPU違いは、シェーダーは、頂点、プリミティブ、三角形、シャード、ピクセルなど、さまざまなステージのレンダリングパイプラインでグラフィックプリミティブ上で実行されるプログラムであるということです。 これらのカテゴリは私たちが作成する抽象化にすぎませんが、シェーダーユニットの場合、すべてがデータであり、これは、あらゆる種類のプログラムを実行できることを意味します。

では、CPUを使用してみませんか? 並列で動作するように設計されたGPUには、CPUよりも特定のコンテキストを解決する方がはるかにうまく機能するという問題があるため、GPUの場合と同じように機能します。

Microsoft、DirectXレイトレーシングとそのシェーダー

Microsoft DirectX12レイトレーシング

レドモンドが2018年のGamesDeveloper Conferenceでレイトレーシングの実装について最初に話したとき、NVIDIA RTX 20の発売まであと数か月あり、その時点では、少なくとも公的には、加速するユニットがあることはまったく知られていませんでした。 NVIDIAのRTコアやAMDのレイアクセラレーションユニットなどのレイトレーシング。

何だったの MicrosoftマルチメディアAPIを拡張するというの提案は? 次の図で定義されている一連の追加ステージを追加します。

エタパスDXR

図を理解するのは簡単です。

  • 青のブロックは、GPUレベルで実行されるシェーダープログラムです。
  • 緑のブロックは、GPUと連携してCPU、ドライバーで実行されます。
  • 灰色のひし形は、稲妻がシーンを通過するときに発生する可能性のある状態です。

さて、この図には含まれていない要素があり、レイトレーシングに関して存在する最大の問題のXNUMXつである加速構造のパスです。 そして、それは何ですか? レイトレーシングのチュートリアルでそれについて話しましたが、覚えておくのは決して痛いことではありません。

レイトレーシングを高速化するためのデータ構造

ÁrbolBVH

レイトレーシングアルゴリズムを高速化してより高速に実行するために、GPUよりもバイナリツリーのような形状のデータ構造でシーン内のオブジェクトの位置をマッピングします。 行かなければならないでしょう。

データ構造を通過するプロセスを理解するために行われるのは、シーン全体を表し、最後のレベルに到達するまでレベルによって指定されるルートから開始することです。 各レベルで行われるのは、交差点があるかどうかを計算するためにRTコアまたは同等のユニットに要求を行うことです。交差点がある場合は次のレベルに進み、ない場合はそのパスは完全に停止します。 これは、ツリーの終わりに到達するまで実行されます。ツリーの終わりでは、レイボックスの交差が作成されなくなり、レイとポリゴンの交差が実行されます。

洞察力があれば、前のセクションの図で、シェーダーのタイプの中に交差のタイプがありますが、BVHツリーのトラバース、つまりトラバースを担当するものはありませんが、特定のタイプのシェーダーはありませんが、このタスクはユニットシェーダーによって実行されることを理解しました。

トラバーサルシェーダー、それらは何であり、それらの起源は何ですか?

DirectXレイトレーシングのドキュメントには、いわゆるトラバーサルシェーダーが含まれています。これは、Microsoft APIの新しいバージョンでレイトレーシングのパイプライン内に将来追加される予定ですが、最善の方法は自分自身を置くことです。状況で。

これまでのデータ構造のトラバースの演習は、シェーダープログラムであるにもかかわらず、これは一般的であり、グラフィックドライバーによって制御されるため、トラバーサルシェーダーが提供することがよく理解されているため、プログラマーは何もする必要がありません。ノードごとにデータ構造をトラバースするプロセスを通過するアプリケーションコードコントロール。

そして、これはパフォーマンスにどのようなメリットをもたらしますか? 主なものは、交差点を作成する前にXNUMXつ以上の光線が破棄されるシナリオを定義できることです。これは、現時点では不可能です。 非常に明確な例は、カメラから非常に遠くにあるオブジェクトに直面している場合です。このオブジェクトでは、照明の詳細を近距離ほど高く評価することはできません。 Redmond APIの現在のバージョンでは、オブジェクトが光線生成シェーダーを介して光線を放出するかどうかを間接照明に関して定義できることを考慮に入れる必要がありますが、飛行によって光線を除外できるシナリオを作成することはできません。 、特に距離がある場合。

空間データ構造を構築するためのトラバーサルシェーダー

トラバーサルシェーダー

インテルグラフィックスのR&D部門は、2020年に「 トラバーサルシェーダーを使用した加速構造のレイジービルド シェイクスピア言語を少し習得している人は、トラバーサルシェーダーを使用して同じ空間データ構造を構築することで構成されていると推測できます。 したがって、これらはコースを制御するためだけでなく、コースを構築するためにも使用できます。

最初に目立つのはLazyBuildです。これは、少しの労力でビルドとして教育されていると解釈できます。 そしてそれは何で構成されていますか? さて、この手法が求めているのは、データ構造の構築時間が短縮されることです。 このため、これは可視性アルゴリズムに追加された前のフレームからの以前の情報に基づいています。これが紛らわしいと思われる場合は、3Dレンダリングについて話すときに可視性が何を意味するかを定義しましょう。

可視性

GPUがレンダリングするときは、空間内のポイントと特定の方向の最初の可視サーフェスとの間の可視性を計算するか、単純化するという原則から始める必要があります。つまり、XNUMXつの要素間の可視性です。 続行する前に、XNUMXつのことを考慮に入れる必要があります。これを読んでいると、XNUMXつのオブジェクトを見ていることを想像しているはずです。 そうではなく、あるオブジェクトが別のオブジェクトを見ることができた場合にどのように見えるかについて話しているのですが、最も単純な定義からは、レンダリング元のビューであるカメラを指します。

現在すべてのゲームで使用されているレイトレーシングとラスタライズを組み合わせたハイブリッドレンダリングでは、カメラの可視性は上記のアルゴリズムからではなく、ラスターアルゴリズムを使用して計算されます。 将来のアイデアは、カメラに関する可視性がレイトレーシングから作成されるため、この情報を使用して、GPUがトラバーサルシェーダーを介してシーン全体のデータ構造を構築することになるというものです。