Shader变种:
multi_compile:代码控制关键字开关,一定会编译变种;
shader_feature:一般使用材质控制是否使用,被使用才会生成变种(打AB的话,Shader要和材质球/ShaderVariantCollection打包到同一个AB里的时候才能知道需要哪些shader_feature);
skip_variants:可以剪裁变种;
Graphics设置里面设置Always Inclueded Shaders,则所有变种一定都会被打包;
变种太多会导致ShaderLab内存占用变大,Shader.Parse(编译Shader)和Shader.CreateGpuProgram(创建CPU执行程序片段)占用CPU时间变长;
ShaderVariantCollection使用:
使用ShaderVariantCollection来WarmUp,而不是全部WarmUp,是为了优化Shader.CreateGpuProgram(创建CPU执行程序片段);
使用ClearCurrentShaderVariantCollection和SaveCurrentShaderVariantCollection来计算生成多个ShaderVariantCollection,多帧进行WarmUp;
Shader打包AB:
把所有Shader和ShaderVariantCollection一起打包到一个AB,游戏运行时加载这个AB全部资源并缓存,并调用其中所有ShaderVariantCollection.WarmUp;<