让我们好好聊聊Unity Shader中的multi_complie
2021-02-03 04:15
标签:同名 pre 控制 highlight 脚本 enables always 代码 variant https://zhuanlan.zhihu.com/p/77043332 shader_feature 和 multi_complie 是两个很相似的预编译指令,在Editor模式下,他们是几乎没有区别的。 共同点是: 区别在于: 如果使用shader_feature,build时没有用到的变体会被删除,不会打出来。也就是说,在build以后环境里,运行代码Material.EnableKeyword("B")可能不起作用,因为没有Material在使用变体B,所以变体B没有被build出来,运行时也找不到变体B。 如果想解决这个问题,可以采取以下办法中的其中一种: 上文已经提到了,最多声明256个全局Keyword,因此我们要尽量节省Keyword的使用数量。其中一个技巧是使用 __(两条下划线),如: 全局的Keyword只能有256个,这或许会最终对我们造成限制,而且大部分Keyword并不需要进行全局声明。 因此,我们可以使用multi_complie_local来声明局部的、只在该Shader内部起作用的Keyword,用法相似: 但需要注意: 让我们好好聊聊Unity Shader中的multi_complie 标签:同名 pre 控制 highlight 脚本 enables always 代码 variant 原文地址:https://www.cnblogs.com/nafio/p/12805697.html一,multi_complie 还是 shader_feature
#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
//---------------------------------------------------
二,__
#pragma multi_compile __ A
//OR #pragma shader_feature __ A
//-----------------------A模块----------------------
#if A
return fixed4(1,1,1,1);
#endif
//---------------------------------------------------
return fixed4(0,0,0,1);
三,multi_complie_local
#pragma multi_compile_local __ A
//OR #pragma shader_feature_local __ A
//-----------------------A模块----------------------
#if A
return fixed4(1,1,1,1);
#endif
//---------------------------------------------------
return fixed4(0,0,0,1);
下一篇:帝国CMS自定义列表的排序
文章标题:让我们好好聊聊Unity Shader中的multi_complie
文章链接:http://soscw.com/index.php/essay/50250.html