Unity Shader - sahder变体剔除

文章目录

  • 吐槽
  • [优化方案 - 目前最靠谱的方式](#优化方案 - 目前最靠谱的方式)

吐槽

我之所以单独写这边文章,是因为之前写的一篇: 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 接口的使用