https://docs.unity3d.com/ScriptReference/ShaderVariantCollection.html
https://docs.unity3d.com/Manual/OptimizingShaderLoadTime.html
shader variants shader变体
在写shader的时候,会写一些小段代码,通过关键字去开启或者关闭它们,当Unity去编译他们的时候,会根据关键字开关的组合去生成不同的shader程序,每一个单独的程序就叫做shader variants, shader变体。
shader_feature 和 multi_compile
shader_feature在打包(Build)的时候会裁剪掉材质没有用到的变体,multi_compile不会。
shader优化
shader是运行在GPU上的小程序。加载他们需要花费一定的时间。
虽然单个shader并不会花太多时间加载,但是shader会有很多的变体。
standard shader,如果完全编译的话,会产生几千个小变体。会导致
- 增加build时间和游戏大小
- 拖慢游戏运行速度和内存大小
当build游戏的时候,Unity会检测一些内部的没有使用到的shader变体,然后剔除它
如果完全编译standard shader的话,会产生几百兆的体积。但通常可以缩小到几兆。
变体收集器ShaderVariantCollection
- 记录每一个实际使用到的shader的变体(好像不是筛选用的)
- 在第一次运行的时候,会进行预加载(warmup)(主要功能是这个,否则会在需要用到的时候才加载)