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

Пример шейдера экземпляров DOTS, который получает доступ к данным по экземплярам в URP

В этом примере:

  • Значение метаданных для Color является 0x80001000.
  • Индекс экземпляра — 5.
  • Например, данные 0 начинаются с адреса 0x1000.
  • Данные, например, 5 находятся на адресе 0x1000 + 5 * sizeof(float4) = 0x1050

Поскольку наиболее значимый бит уже установлен, макросы доступа не загружают значения по умолчанию. Это означает, что c0, c1, и c2 будут иметь одинаковое значение, загруженные из unity_DOTSInstanceData адрес 0x1050.

void ExamplePerInstance()
{
    // rawMetadataValue will contain 0x80001000
    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));
}