博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Unity 优化]Shader
阅读量:706 次
发布时间:2019-03-21

本文共 1143 字,大约阅读时间需要 3 分钟。

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;

按以上方法打包,理论上之后运行游戏,不会再有Shader.Parse和Shader.CreateGpuProgram;
如果还出现了Shader.Parse这说明Shader存在冗余;
如果还出现了Shader.CreateGpuProgram这说明Shader存在冗余或者ShaderVariantCollection收集不完全;

Shader冗余:

按以上Shader打包AB的方式进行打包,如果还存在Shader冗余,则可能是:

Resource目录下存在Shader并在运行时被使用了,常见第三方插件;
Unity默认材质引用的Shader,又没有添加到Always Inclueded Shaders;

ShaderLab内存占用:

ShaderLab内存占用较大,则可能是:

Shader冗余,可在Profiler界面Assets/Shader看到同一个Shader出现多个;
变种特别多的Shader使用不当,甚至把这种Shader加到了Always Inclueded Shaders,常见如FBX的默认材质使用Standard;

转载地址:http://wxyrz.baihongyu.com/

你可能感兴趣的文章