一,multi_complie 还是 shader_feature
shader_feature 和 multi_complie 是两个很相似的预编译指令,在Editor模式下,他们是几乎没有区别的。
共同点是:
- 声明Keyword,用来产生Shader的变体(Variant)
#pragma multi_compile A B
//OR #pragma shader_feature A B
//-----------------------A模块----------------------
#if A
return fixed4(1,1,1,1);
#endif
//---------------------------------------------------
//-----------------------B模块-----------------------
#if B
return fixed4(0,0,0,1);
#endif
//---------------------------------------------------
- 这个Shader会被编译成两个变体:一是只包含A模块代码的变体A;二是只包含B模块代码的变体B;
- 指定的第一个关键字是默认生效的,即默认使用变体A;
- 在脚本里用Material.EnableKeyword或Shader.EnableKeyword来控制运行时具体使用变体A还是变体B;
- 它们声明的Keyword是全局的,可以对全局的包含该Keyword的不同Shader起作用;
- 全局最多只能声明256个这样的Keyword;
- 请注意Keyword的数量和变体的数量之间的关系,并可能由此导致的性能开销&#x