文章目录
吐槽
我之所以单独写这边文章,是因为之前写的一篇: Unity Shader - Built-in管线下优化变体,编辑后,无法保存,一直提示:操作超时。
等了差不多 30S~60S,就出现: 操作超时请重试。
已经能确定的是,这个问题,100% 必现。从上周就出现,到现在,就是比我不再使用 XSDN。
打开CSDN首页里面的连接,是秒开的,到底怎么回事,看来准备博客搬家。
优化方案 - 目前最靠谱的方式
shader
注意尾部我们增加了一些 CUSTOM_SKIP_START(xxx)
... CUSTOM_SKIP_END
注释来方便剔除的
c
Shader "xxx"
{
Properties {}
XXXPROGRAM
...
#pragma multi_compile _ A
#pragma multi_compile _ B
#pragma multi_compile _ C
ENDXXX
}
// jave.lin :
// completely_match_group : 完全吻合的变体,就是不多也不少的匹配规则
// CUSTOM_SKIP_START(completely_match_group)
A C
// CUSTOM_SKIP_END(xxx)
// jave.in :
// any_match_group : 只要变体中 同时存在 A B 的
// CUSTOM_SKIP_START(any_match_group)
A B
// CUSTOM_SKIP_END(xxx)
// jave.lin :
// 其他的规则可以自行添加
// 如果是想要剔除 多个变体,只要包含,就剔除,可以使用unity shaderlab自带的: #pragma skip_variants xxx1 xxx2 xxx3
csharp
在 IPreprocessShaders
接口实现中,我们要对 shader 的 CUSTOM_SKIP_START(xxx)
... CUSTOM_SKIP_END
提取
然后这个 shader 变体是否需要剔除
这里的代码我就不写了,具体可以参考:Unity Shader - Built-in管线下优化变体里面的 IPreprocessShaders
接口的使用