Version: Unity 6.0 (6000.0)
言語 : 日本語
URP のカスタムシェーダーで DOTS インスタンシングをサポートする
カスタムシェーダーでの DOTS Instancing プロパティへのアクセス

カスタムシェーダーでの DOTS インスタンシングプロパティの宣言 (URP)

変換行列などのインスタンスデータをロードするには、シェーダーは DOTS Instanced プロパティを定義する必要があります。以下は、単純な DOTS Instanced プロパティブロックの例です。

UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)
    UNITY_DOTS_INSTANCED_PROP(float4, Color)
UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)

プロパティブロックの開始と終了を示すには、UNITY_DOTS_INSTANCING_START および UNITY_DOTS_INSTANCING_END マクロの後にブロック名を付加します。この例では MaterialPropertyMetadata という名前を使用しています。使用可能なブロック名は以下の 3 つです。

  • BuiltinPropertyMetadata
  • MaterialPropertyMetadata
  • UserPropertyMetadata

シェーダーはそれぞれ 1 つを宣言できるため、DOTS Instanced シェーダーはこのようなブロックを 0 から 3 つ持つことがあります。Unity 定義のシェーダーコードは UserPropertyMetadata を使用しないため、この名前は自由に使用することが保証されています。URP と HDRP は提供するシェーダーごとに BuiltinPropertyMetadata を定義し、そのほとんどに MaterialPropertyMetadata も定義するため、UserPropertyMetadata を使用するのがベストプラクティスです。カスタムシェーダーは、考えられる 3 つの名前をすべて同時に使用できます。

ブロックは、以下のようなフォーマットで、DOTS Instanced プロパティの定義をいくつでも含むことができます。

UNITY_DOTS_INSTANCED_PROP(PropertyType, PropertyName)

PropertyType は、ブーリアンベクトル以外の任意の HLSL ビルトイン型 (uint、float4、float4x4、int2x4 など) にすることができ、PropertyName は DOTS Instanced プロパティの名前です。DOTS Instanced プロパティは 通常のマテリアルプロパティ とは完全に別になっており、これには他の通常のマテリアルプロパティと同じ名前を付けることができます。これが可能な理由は、UNITY_DOTS_INSTANCED_PROP マクロが、Unity によって認識され他のプロパティ名と競合しない、特殊な定数名を生成するからです。Unity 提供のシェーダーは DOTS Instanced プロパティに通常のマテリアルプロパティと同じ名前を付けますが、この規則に従う必要はありません。

内部的には、Unity は、シェーダーが宣言する DOTS Instanced プロパティごとに、32 ビット整数のメタデータ値をシェーダーに提供します。Unity は、コードが (描画に関連するバッチを作成するために) BatchRendererGroup.AddBatch を呼び出す時に、メタデータ値を設定します。メタデータ値は、Unity が設定しなければデフォルトの 0 になります。またシェーダーは、BatchRendererGroup.AddBatch に引数として渡される GraphicsBuffer に Unity が設定する、ByteAddressBuffer unity_DOTSInstanceData にもアクセスできます。このバッファは通常、シェーダーがインスタンスデータをロードする (ロード元の) 場所です。複数のバッチで 1 つの GraphicsBuffer を共有することもできますが、バッチごとに個別に unity_DOTSInstanceData 用の GraphicsBuffer を使用することも可能です。

ノート: Unity は DOTS Instanced データを自動的に提供しません。開発者は、各バッチの unity_DOTSInstanceData バッファに正しいデータが含まれていることを確認する必要があります。インスタンスデータには、変換行列、ライトプローブ係数、ライトマップテクスチャ座標など、Unity のゲームオブジェクトに通常提供される、多くのプロパティが含まれている必要があります。

URP のカスタムシェーダーで DOTS インスタンシングをサポートする
カスタムシェーダーでの DOTS Instancing プロパティへのアクセス
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961