Access DOTS Свойства экземпляра в пользовательском шейдере
Для доступа к свойствам экземпляра DOTS ваш шейдер может использовать один из макросов доступа, предоставляемых Unity. Макросы доступа предполагают, что данные экземпляра в unity_DOTSInstanceData используют следующую схему:
- 31 наименее значимый бит значения метаданных содержит адрес байт первого экземпляра в партии в буфере
unity_DOTSInstanceData. - Если наиболее значимый бит значения метаданных равен
0, то каждый экземпляр использует значение от нуля индекса экземпляра. Это означает, что каждый экземпляр загружается непосредственно из адреса байта в значении метаданных. В этом случае буферу нужно хранить только одно значение, а не одно значение на экземпляр. - Если наиболее значимый бит значения метаданных —
1, адрес должен содержать массив, в котором можно найти значение для, например, индексаinstanceIDс помощьюAddressOfInstance0 + sizeof(PropertyType) * instanceID. В этом случае следует убедиться, что каждый отображаемый индекс экземпляра имеет действительные данные в буфере. В противном случае может возникнуть доступ за пределы границ и неопределенное поведение.
Вы также можете установить значение метаданных напрямую, что полезно, если вы хотите использовать пользовательский источник данных, который не использует вышеуказанную схему, например, текстуру.
Пример использования этих макросов см. в Пример макроса доступа.