Unity 6.3
0 онлайн 3 гостей 3 в системе
Вход

Объявление ключевых слов шейдера

Для объявления ключевых слов шейдера используйте директиву #pragma в коде HLSL. Например:

#pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3

Используйте одну из следующих директив шейдера:

  • dynamic_branch для сохранения ветвящегося кода в одной скомпилированной шейдерной программе.
  • multi_compile или shader_feature для компиляции нескольких вариантов шейдеров, что означает, что для каждого ветка есть отдельная программа шейдера.

Информацию о том, когда использовать какую директиву, см. в Как Unity компилирует ветвящиеся шейдеры.

Если шейдер использует более 128 ключевых слов в общей сложности, ваш проект может быть медленнее. В результате, лучше держать количество ключевых слов низким. Общее количество ключевых слов включает 4 ключевых слова на шейдер, которые Unity всегда резервирует.

Заявление наборов ключевых слов

Ключевые слова в одном заявлении #pragma вместе называются набором.

Например, чтобы объявить набор из трех ключевых слов:

#pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3

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

#pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3
#pragma shader_feature RED GREEN BLUE WHITE

Вы не можете выполнять следующие действия:

  • Включите два ключевых слова с одинаковым названием в одном наборе.
  • Включить дубликаты наборов ключевых слов в один шейдер.
  • Объявите ключевое слово как dynamic_branch и shader_feature или multi_compile. Unity использует dynamic_branch, если вы это сделаете.

Включение нескольких ключевых слов в наборе

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

Если вы используете shader_feature и включаете несколько ключевых слов из одного набора, Unity пытается найти наиболее близкий вариант шейдера. Это может привести к непредвиденным результатам.

Дополнительные ресурсы