メッシュレット
メッシュレット
メッシュレット とは、単純にメッシュのサブチャンク、つまり固定数のプリミティブと頂点の集合です。メッシュ はメッシュレットのセットで完全に定義することができ、各メッシュレットはメッシュから取り出された一意なプリミティブ集合で構成されます。メッシュレット構造に変換されたメッシュを メッシュレット化 されたと呼びます。
メッシュレット化されたメッシュを構築するために使用する固定のプリミティブ数と頂点数は、メッシュレットのリスト全体で一貫しており、各メッシュレットの最大サイズを定義します。理想的には、各メッシュレットはこのサイズにできる限り近いことが望まれますが、必ずしもそれを埋め尽くす必要はありません。従来のインデックス バッファーは、メッシュレット リスト、一意な頂点インデックス リスト、プリミティブ リストの 3 つの新しいデータ構造に置き換わります。
図 1. メッシュレット単位で色付けされた、メッシュレット化メッシュのレンダリング (ドラゴン)。メッシュレットが妥当な空間的一貫性を持つプリミティブで構成されていることに注目してください。
以下のコード例は、実行時のメッシュレット構造の C++ 実装です。このデータは、レンダリング可能なメッシュを完全に記述します。
このメッシュレット構造には、メッシュ シェーダー レンダリングに対していくつかの利点があります。各メッシュレットは固定の最大サイズを持ち、固定サイズのスレッドグループを 1 つのメッシュレットにマッピングするのに理想的であり、スレッドから頂点/プリミティブへの直感的なマッピングを提供します。頂点数とプリミティブ数は事前に判明しているため、シェーダー コード内でそれらを計算する必要がありません。頂点インデックスは既に重複排除されており、冗長な頂点変換とエクスポートを排除します。プリミティブ インデックスはメッシュレットの頂点リストに対してローカル化されます。メッシュレットはまた、空間および方向情報を用いたカリングのための追加の粒度も提供します。
前のコード例は、新しいメッシュレット バッファー間の相互関係を示しています。メッシュレット リストは実行時 “meshlet” 構造体のフラットなリストであり、少なくとも一意な頂点インデックス リストとプリミティブ リストへのオフセットとカウントを含みます。一意な頂点インデックス リストは、頂点データ バッファーへのインデックスの重複排除されたリストです。プリミティブ リストはメッシュのプリミティブを定義し、メッシュレットの頂点オフセットに対してローカル化された、一意な頂点インデックス リストへのインデックスで構成されます。
図 2. メッシュレット バッファー間の関係を示す図。
最終更新日 2026年8月24日
関連トピック
メッシュレット カリングの例XBOX Series X|S のメッシュ シェーダーとメッシュレットなぜメッシュ シェーダーなのか?XBOX タイトル向けのゲーム メッシュ ネットワークメッシュ シェーダー パイプラインの概要