参考官方关于ShaderVariant的文章https://docs.unity3d.com/Manual/OptimizingShaderLoadTime.html;
最近项目中引入了ShaderVariant机制,将部分shader的变体放到了variant中,但是在加载variant执行warmUp的时候发现卡的时间特别长,连接真机profiler看到如下
之前看到过文章,在Unity5.*后,shader的加载和解析是分开的,但是从上图可以看到,加载的时候进行了解析,经过实验发现,当去通过loadasset方法加载variant时,会同步进行解析过程,将variant引用的shader全部解析,因而造成较大的开销,后面同样经过实验,将variant单独打成一个bundle,发现仍然开销很大,但是从bundle中加载单个bundle的时候,开销较小
在使用AssetBundle加载shader时,只要保证shader的bundle不卸载即可,慎重使用shadervariant,个人觉得shadervariant和bundle机制差不多