Пример DOTS Инстансирующего шейдера, который получает доступ к постоянным данным в URP
В этом примере:
- Значение метаданных для
Colorявляется0x00001000. - Индекс экземпляра —
5. - Например, данные 0 начинаются с адреса 0x1000.
- Наиболее значимый бит не устанавливается, так что данные для примера 5 находятся на том же адресе, что и пример 0.
Поскольку наиболее значимый бит не установлен, макросы доступа, которые возвращаются к значениям по умолчанию, не получают доступ к unity_DOTSInstanceData. Это означает, что:
c0будет содержать значение изunity_DOTSInstanceDataадреса0x1000.c1будет содержать значение свойства обычного материала Цвет, и вызвать ошибку компиляции, если свойство Color не существует.c2будет содержать(1, 2, 3, 4), так как это было передано как явное значение по умолчанию.
void ExampleConstant()
{
// rawMetadataValue will contain 0x00001000
uint rawMetadataValue = UNITY_DOTS_INSTANCED_METADATA_NAME(float4, Color);
float4 c0 = UNITY_ACCESS_DOTS_INSTANCED_PROP(float4, Color);
float4 c1 = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4, Color);
float4 c2 = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_CUSTOM_DEFAULT(float4, Color, float4(1, 2, 3, 4));
}