Unity着色器变种 (Shader Variants)

用法

移动端游戏,在运行时根据实际情况开关渲染功能,达到效果和性能的平衡。
如 Kabam 的 Marvel: Contest of Champions

开发时帮助美术判断效果。

Unity实现

Unity提供了着色器变种功能:
Making multiple shader program variants

- 允许生成shader的变种通常称为 “mega shaders” 或 “uber shaders”

- 变种数量是指数级增长的

1
2
#pragma multi_compile A B C
#pragma multi_compile D E

会生成6个变种。
某些情况下可以考虑Shader Hardware Variants:

1
#pragma hardware_tier_variants renderer

生成3种不同变种

1
2
3
#pragma multi_compile __ Enable_NORMAL
#pragma multi_compile __ Enable_SPECULAR
#pragma multi_compile __ Enable_REFLECTION

- multi_compile 和 shader_feature 的区别

未使用的shader_feature不会build。

所以对于我们运行时控制渲染的要求:

  1. 用shader_feature,只要build时把能用到的feature全开就好(更通用)
  2. 用multi_compile(更安全)
分享