版本:Unity 6 (6000.0)
语言:英语
在 URP 中的自定义着色器中声明 DOTS 实例化属性
URP 中的 DOTS 实例化着色器的最佳实践

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

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

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

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

有关如何使用这些宏的示例,请参见 访问宏示例

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