Version: Unity 6.0 (6000.0)
言語 : 日本語
カスタムシェーダーでの DOTS インスタンシングプロパティの宣言 (URP)
URP の DOTS インスタンシングシェーダーのベストプラクティス

カスタムシェーダーでの DOTS Instancing プロパティへのアクセス

DOTS Instanced プロパティにアクセスするにあたって、シェーダーは、Unity が提供するアクセスマクロのいずれかを使用できます。アクセスマクロは、unity_DOTSInstanceData 内のインスタンスデータが以下のレイアウトを使用していることを想定します。

  • メタデータ値の最下位 31 ビットが、unity_DOTSInstanceData バッファ内のバッチ内の最初のインスタンスのバイトアドレスを含んでいる。
  • メタデータ値の最上位ビットが 0 の場合、すべてのインスタンスがインスタンスインデックス 0 の値を使用している。つまり、各インスタンスがメタデータ値のバイトアドレスから直接ロードされるということです。この場合、バッファはインスタンスごとに 1 つの値を格納せずに、単一の値を格納するだけで済みます。
  • メタデータ値の最上位ビットが 1 の場合、AddressOfInstance0 + sizeof(PropertyType) * instanceID を使用してインスタンスインデックス instanceID の値を確認できる配列がアドレスに含まれている必要がある。この場合、レンダリングされたすべてのインスタンスインデックスにバッファ内の有効なデータがあることを確認する必要があります。そうでないと、アウトオブバンドのアクセスや未定義の動作が発生する可能性があります。

メタデータの値を直接設定することもできます。これは、テクスチャなどの、上記のレイアウトを使用しないカスタムデータソースを使用する場合に便利です。

これらのマクロの使用例は、アクセスマクロの例 で参照できます。

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