Unity有两种产生shader变种的方式:
| multi_compile | shader_feature |
适用情况 | 整体开关,如阴影开关,画面质量级别等 | 逐Material特性,如是否使用法线贴图,brdf选项等 |
编译情况 | Build时会穷举编译所有变种 启动时会加载所有变种 过多的变种会导致内存耗尽直接崩溃(大约11个multi_compile) | 仅编译和加载实际使用到的变种。具体时机尚不明晰。 |
用途 | 用于测试所有变种中是否有错 | 大量变种时只能用它 |
补充:不要混合使用shader_feature和UsePass,有真机上无法编译的问题(报错:找不到vertex shader)。
将UsePass内容直接复制粘贴可以正常运行,multi_compile也可以和UsePass正常搭配使用。
我的测试环境是Unity5.3.6,iphone5S,metal