Skip to main content
まず メッシュレット のトピックを読むことをお勧めします。 このメッシュレット カリングの例のトピックでは、メッシュレット カリング と呼ばれる手法を Amplification Shader で実装した疑似コードを示します。メッシュレットのプリミティブは、理想的には空間的および方向的な一貫性を持っているため、メッシュレットごとに効率的なカリング データを保存できます。これを利用して、Amplification Shader 内でメッシュレット リストをビューに対して素早くカリングし、生き残ったメッシュレットに対してのみメッシュ シェーダー インスタンスをディスパッチできます。 この手法は、各スレッドが 1 つのメッシュレットを処理する Amplification Shader から始まります。つまり、コマンド リストに対して ceil(MeshletCount / GROUP_SIZE) 個のスレッドグループをディスパッチする必要があります。 その後、各 Amplification Shader スレッドグループは GROUP_SIZE 個のメッシュレットを処理する責任を持ちます。各スレッドは自身のメッシュレットをビュー フラスタムに対してカリングし、エクスポート スロットを決定し、そのインデックスをペイロード データに書き込みます。次に DispatchMesh を使用して、レンダリングのために生き残った各メッシュレットに対して 1 つのメッシュ シェーダー スレッドグループをディスパッチします。次に、各メッシュ シェーダー スレッドグループはペイロード データからメッシュレットを読み込み、そのジオメトリをエクスポートします。 完全なサンプルは、XBOX Developer Downloads ページで入手できます。

Amplification Shader

Amplification Shader の構造はコンピュート シェーダーと同一ですが、末尾で最大 1 回の ‘DispatchMesh(…)’ 呼び出しで終わります。まず、各スレッドが自身のメッシュレットを読み込んでビューに対してカリングします。次にコンパクション ルーチンを実行して、各スレッドの最終的な書き込み場所を決定します。これによりスレッドグループ内でカリングされずに残ったメッシュレット数の最終的なカウントも得られます。最後に、メッシュレット インデックスがグループ共有のペイロード データに書き込まれ、生き残ったメッシュレット数とペイロード データを引数として DispatchMesh が呼び出されます。 以下の例は、メッシュレット カリングを実装した Amplification Shader の疑似コードです。

メッシュ シェーダー

パイプラインのメッシュ シェーダーは、ペイロード データからスレッドグループのメッシュレット インデックスを読み取る点を除いて、メッシュ シェーダーのみのパイプラインを使用したメッシュレット レンダリングと非常によく似ています。ペイロード データは、前段の Amplification Shader によって構築されエクスポートされたものと同じデータです。GroupID と DispatchThreadID は、呼び出し元の Amplification Shader スレッドグループからディスパッチされたメッシュ シェーダー クラスター内でローカル化されており、それらすべてが同じペイロード データを共有します。 以下のコード例は、前述の Amplification Shader に続くメッシュ シェーダーを示しています。

関連項目

メッシュ シェーダー パイプラインの概要 なぜメッシュ シェーダーなのか? メッシュ シェーダー API の概要 メッシュレット
最終更新日 2026年8月24日