Version: 6000.3
语言: 中文
Unity 如何编译分支着色器
使着色器行为以关键字为条件

声明着色器关键字

声明着色器在 GPU 上运行的程序。更多信息
请参阅术语表
关键字,请使用#pragma指令。例如:

#pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3

使用以下着色器指令之一:

  • dynamic_branch将分支代码保留在一个已编译的着色器程序中。
  • multi_compileshader_feature编译多个着色器变体,这意味着每个分支都有一个单独的着色器程序。

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

如果着色器总共使用超过 128 个关键字,则项目可能会变慢。因此,最好保持较低的关键字数量。关键字总数包括 Unity 始终保留的每个着色器 4 个关键字。

声明关键字集

单个关键字#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

您无法执行以下作:

  • 在一组中包含两个同名关键字。
  • 在一个着色器中包含重复的关键字集。
  • 将关键字声明为 bothdynamic_branchshader_featuremulti_compile.Unity 使用dynamic_branch如果你这样做。

在一组中启用多个关键字

在运行时,Unity 没有集合的概念。您可以独立启用或禁用任何关键字。因此,可以同时启用同一集中的两个或多个关键字,或禁用所有关键字。

如果您使用shader_feature并启用同一集中的多个关键字,Unity 会尝试找到最匹配的着色器变体。这可能会导致意想不到的结果。

其他资源

Unity 如何编译分支着色器
使着色器行为以关键字为条件