# variant

shader 变体与宏定义

### Shader 变体

* [Unity Shader 变体优化与故障排除技巧](https://mp.weixin.qq.com/s/0l6SkXNwuoRzFt9Xg0ZV4A)
* [Shader变体收集与打包 - 知乎](https://zhuanlan.zhihu.com/p/68888831)
* [AssetBundle中的shader变体丢失问题 - 简书](https://www.jianshu.com/p/2f886fefb7f3)

### Shader 多重编译

有多重编译的 Shader 被称为 uber shader

* [unity shader 变种（多重编译 multi\_compile）](https://www.jianshu.com/p/8750704a2f4c)

**全局宏定义**

* \#pragma multi\_compile 打包所有变体
* \#pragma shader\_feature 打包会剔除未被材质使用的着色器变体。

**本地宏定义**

* \#pragma multi\_compile\_local \_ LIGHTMAP\_SHADOW\_MIXING
* \#pragma shader\_feature\_local \_RECEIVE\_SHADOWS\_OFF

不能使用 Shader.EnableKeyword 全局开启定义, 而是通过材质面板或者代码 EnableKeyword

**指定宏定义阶段**

* \#pragma shader\_feature\_local\_fragment \_LASER\_SCAN

指定只有 fragment 阶段才开启宏定义
