包含此页的版本:
不含此页的版本:
要标记您的部分着色器在 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
}
有关何时使用哪个着色器指令的更多信息,请参阅 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_feature或multi_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_feature或multi_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_feature或multi_compile:
使用这些代替if使更改#pragma关键字指令。例如,如果需要减少着色器变体的数量,则更难更改为dynamic_branch.