ShaderVariantCollection解决shader_feature丢失

Author Avatar
Kanglai Qian 8月 06, 2018

之前在利用shader_feature打造最小版本Shader提到shader_feature配合AssetBundle使用的BUG。当时是通过multi_compile绕开,现在在Unity 2017里通过ShaderVariantCollection可以完美解决,记录一下遇到的坑。

使用过程中只遇到一个问题:

  • 直接Debug模式打包AssetBundle没问题
  • 使用依赖分析零冗余打包之后遇到了丢失

后来仔细的查了下log发现是依赖分析之后SVC被自动抽到通用的AB中,没有和Shader在一起;这里改动了下就好。网上找到一篇博客Unity中Shader是否可以热更新的测试,看了下也能和我的理解对上:

Shader只有在和材质球/ShaderVariantCollection打包到同一个AssetBundle里的时候才能知道需要哪些shader_feature,否则会丢失…

ps. 顺便使用ShaderVariantCollection的意义好处还有选择性的WarmUp部分Shader