Unity 关于shader variant 变体

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)(主要功能是这个,否则会在需要用到的时候才加载)

你可能感兴趣的:(unity3d)