Объявление ключевых слов шейдера
Для объявления ключевых слов шейдера используйте директиву #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 пытается найти наиболее близкий вариант шейдера. Это может привести к непредвиденным результатам.
Дополнительные ресурсы
- Направление моделей шейдеров и GPU особенностей в HLSL
- Shader Graph: Ключевой узел