Version: 6000.3
语言: 中文
声明着色器关键字
在编辑器中切换着色器关键字

使着色器行为以关键字为条件

要标记您的部分着色器在 GPU 上运行的程序。更多信息
请参阅术语表
代码条件,基于是启用还是禁用着色器关键字,请使用 HLSL if 语句

例如:

#pragma multi_compile QUALITY_LOW QUALITY_MED QUALITY_HIGH

if (QUALITY_LOW)
{
    // code for low quality setting
}
else if (QUALITY_MED)
{
    // code for medium quality setting
}
else if (QUALITY_HIGH)
{
    // code for high quality setting
}

现在,可以使用检查器C# 脚本启用和禁用关键字。

有关何时使用哪个着色器指令的更多信息,请参阅 Unity 如何编译分支着色器

如果关键字存在,则分支

对于集合中的每个关键字,Unity 会自动添加一个_KEYWORD_DECLARED关键词。例如,如果您声明QUALITY_LOW关键字,Unity 会添加一个QUALITY_LOW_KEYWORD_DECLARED关键词。

您可以使用它来检查关键字是否存在,无论它是启用还是禁用。

例如:

#pragma multi_compile QUALITY_LOW QUALITY_MED QUALITY_HIGH

#if defined(QUALITY_LOW_KEYWORD_DECLARED)
{
    // The QUALITY_LOW keyword exists
}

禁用集合中的所有关键字时分支

shader_featuremulti_compileset 被禁用,则 Unity 必须为该状态创建额外的着色器变体。

如果您使用shader_feature要创建单个关键字,Unity 会自动创建额外的着色器变体。例如:

// Creates a variant for when FEATURE_1_ON is enabled, and another for when FEATURE_1_ON is disabled. 
#pragma shader_feature FEATURE_1_ON

如果您使用shader_featuremulti_compile要创建包含两个或多个关键字的集合,请在声明关键字集时添加。例如:_

// Creates 5 shader variants, including one for when RED, GREEN, BLUE, and WHITE are all disabled.
#pragma shader_feature _ RED GREEN BLUE WHITE

// Creates 2 shader variants, including one for when FEATURE_3_ON is disabled.
#pragma multi_compile _ FEATURE_3_ON

如果您使用dynamic_branch,当禁用所有关键字时,Unity 不需要额外的统一整数。但是,要指示您在条件代码中使用该状态,您应该在声明关键字集时添加。例如:_

// Creates 3 uniform integers.
// The underscore doesn't create an additional uniform integer, but it indicates you use the additional state in conditional code.
#pragma dynamic_branch _ QUALITY_LOW QUALITY_MED QUALITY_HIGH

使用其他语句使着色器行为有条件

还可以使用以下 HLSL 预处理器指令创建条件代码shader_featuremulti_compile:

使用这些代替if使更改#pragma关键字指令。例如,如果需要减少着色器变体的数量,则更难更改为dynamic_branch.

其他资源

声明着色器关键字
在编辑器中切换着色器关键字