To declare shaderA program that runs on the GPU. More info
See in Glossary keywords, use a #pragma
directive in the HLSL code. For example:
#pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3
Use one of the following shader directives:
Shader directive | Branching type | Shader variants Unity creates |
---|---|---|
shader_feature |
Static branching | Variants for keyword combinations you enable at build time with material properties |
multi_compile |
Static branching | Variants for every possible combination of keywords |
dynamic_branch |
Dynamic branching | No additional variants |
Refer to the following:
In Shader Graph, see Shader Graph: Keyword Node instead.
The keywords in a single #pragma
statement are together called a ‘set’.
For example, to declare a set of three keywords:
#pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3
You can declare multiple sets of keywords in a single shader. For example, to create 2 sets:
#pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3
#pragma shader_feature RED GREEN BLUE WHITE
You can’t do the following:
dynamic_branch
and shader_feature
or multi_compile
- Unity uses dynamic_branch
if you do this.Keywords are affected by global keyword state by default.
Add _local
to the shader directive to make the keywords local. If you enable or disable a global keyword, you don’t affect the state of local keywords with the same name.
For example:
#pragma shader_feature_local REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3