URP | 着色器变体和关键字
目的
认识unity有那线变体关键词
这些变体有什么区别,都有什么功能。
着色器变体
这是支持创建变体的类型

下图定义方式

multi_compile 示例
第一种
此指令示例生成两个着色器变体:
一个定义了 FANCY_STUFF_OFF
,另一个定义了 FANCY_STUFF_ON
。
在运行时,Unity 根据材质或全局着色器关键字来激活其中一个变体。
如果这两个关键字均未启用,则 Unity 使用第一个关键字(在此示例中为 FANCY_STUFF_OFF
)。
第二种
也可以定义多个关键字,
这个指令生成4个变体
SIMPLE_SHADING
BETTER_SHADING
GOOD_SHADING
BEST_SHADING
multi_compile_local示例
shader_feature 与 multi_compile 二者区别
multi_compile 更适合Shader 变体,通过代码来全局设置的关键字
比如默认的阴影

shader_feature 用于材质中设置的关键字

第一个属性,是我们需要全局去控制物体是否受多光源影响。
第二个只是本地变体。
关键字限制
shader_feature和 multi_compile的主要缺点是其中定义的所有关键字均会影响 Unity 的全局关键字,关键字是有上限的,unity全局关键字上限是(384 个全局关键字,外加 64 个本地关键字)
所以就出现上面俩个类型的变体。
本地关键字
这里就说明 后面 带 Local 和不带Local的区别。
#pragma multi_compile
#pragma multi_compile_local
#pragma shader_feature
#pragma shader_feature_local
本地关键字示例
shader_feature_local:__类似于 shader_feature__,但是枚举的关键字为本地关键字。
multi_compile_local:__类似于 multi_compile__,但是枚举的关键字为本地关键字。
注意 :这里是俩个下划线(__)
注意:定义语法
总结
Unity Shader里有4种着色器变体


这些变体有什么区别,都有什么功能。
shader_feature和 multi_compile 一个是给材质使用变体,一个是给Shader变体使用。
shader_feature_local 和 multi_compile_local 变体,是本地关键字
资料参考
着色器变体和关键字 - Unity 手册