Declaring and using shader keywords in HLSL
Make shader behavior conditional

Declare shader keywords

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:

Declare sets of keywords

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:

  • You cannot include two keywords with the same name in one set.
  • You cannot include duplicate keyword sets in one shader.
  • You cannot declare a keyword as both dynamic_branch and shader_feature or multi_compile - Unity uses dynamic_branch if you do this.

Make keywords local

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

Additional resources


对文档有任何疑问,请移步至开发者社区提问,我们将尽快为您解答
Declaring and using shader keywords in HLSL
Make shader behavior conditional
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961