要访问 DOTS Instanced 属性,着色器可以使用 Unity 提供的访问宏之一。访问宏假定 unity_DOTSInstanceData 中的实例数据使用以下布局:
unity_DOTSInstanceData 缓冲区批次中第一个实例的字节地址。0,则每个实例都使用实例索引 0 中的值。这表示每个实例会直接从元数据值中的字节地址进行加载。在这种情况下,缓冲区只需要存储单个值,而无需每个实例存储一个值。1,则地址应包含一个数组,您可以在数组中使用 AddressOfInstance0 + sizeof(PropertyType) * instanceID 查找实例索引 instanceID 的值。在这种情况下,应确保每个渲染的实例索引在缓冲区中存在有效数据。否则,可能会出现越界访问以及未定义行为。用户还可以直接设置元数据值,如果要使用一个不使用上述布局的自定义数据源(例如纹理),这将非常有用。
有关如何使用此类宏的示例,请参阅访问宏示例。