Unity 6.3
0 онлайн 96 гостей 3 в системе
Вход
Оптимизация Шаг 151 из 208

Access DOTS Свойства экземпляра в пользовательском шейдере

Для доступа к свойствам экземпляра DOTS ваш шейдер может использовать один из макросов доступа, предоставляемых Unity. Макросы доступа предполагают, что данные экземпляра в unity_DOTSInstanceData используют следующую схему:

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

Вы также можете установить значение метаданных напрямую, что полезно, если вы хотите использовать пользовательский источник данных, который не использует вышеуказанную схему, например, текстуру.

Пример использования этих макросов см. в Пример макроса доступа.