Version: 6000.3
语言: 中文
在URP的自定义着色器中声明DOTS实例化属性
URP中DOTS实例化着色器的最佳实践

在自定义着色器中访问 DOTS 实例化属性

要访问 DOTS 实例化属性,您的着色器在 GPU 上运行的程序。更多信息
请参阅术语表
可以使用 Unity 提供的访问宏之一。访问宏假定实例数据在unity_DOTSInstanceData使用以下布局:

  • 元数据值的 31 个最低有效位包含批处理中第一个实例的字节地址,其中unity_DOTSInstanceData缓冲区。
  • 如果元数据值的最有效位是0,每个实例都使用实例索引零中的值。这意味着每个实例直接从元数据值中的字节地址加载。在这种情况下,缓冲区只需要存储一个值,而不是每个实例一个值。
  • 如果元数据值的最有效位是1,则地址应包含一个数组,您可以在其中找到实例索引的值instanceIDAddressOfInstance0 + sizeof(PropertyType) * instanceID.在这种情况下,应确保每个呈现的实例索引在缓冲区中都有有效数据。否则,可能会发生越界访问和未定义的行为。

您还可以直接设置元数据值,如果您想使用不使用上述布局的自定义数据源(例如纹理),这非常有用。

有关如何使用这些宏的示例,请参阅 Access 宏示例

在URP的自定义着色器中声明DOTS实例化属性
URP中DOTS实例化着色器的最佳实践