您可以使用 Unity 着色器指令快捷方式来创建着色器关键字和变体集合。例如,以下示例添加了 SHADOWS_DEPTH 和 SHADOWS_CUBE 关键字及变体:
#pragma multi_compile_shadowcaster
| 方式 | Unity 添加的着色器关键字 | Unity 在所有关键字关闭时添加变体 | 使用变体的着色器通道 |
|---|---|---|---|
multi_compile_fog |
FOG_LINEAR、FOG_EXP、FOG_EXP2
|
是 | 雾 |
multi_compile_fwdadd |
POINT DIRECTIONAL SPOT POINT_COOKIE DIRECTIONAL_COOKIE
|
否 | PassType.ForwardAdd |
multi_compile_fwdadd_fullshadows |
POINT、DIRECTIONAL、SPOT、POINT_COOKIE、DIRECTIONAL_COOKIE、SHADOWS_DEPTH SHADOWS_SCREEN SHADOWS_CUBE SHADOWS_SOFT SHADOWS_SHADOWMASK、LIGHTMAP_SHADOW_MIXING
|
No |
PassType.ForwardAdd。添加了光源具有实时阴影的功能。 |
multi_compile_fwdbase |
DIRECTIONAL、LIGHTMAP_ON、DIRLIGHTMAP_COMBINED、DYNAMICLIGHTMAP_ON、SHADOWS_SCREEN、SHADOWS_SHADOWMASK、LIGHTMAP_SHADOW_MIXING、LIGHTPROBE_SH
|
否 | PassType.ForwardBase。 |
multi_compile_fwdbasealpha |
DIRECTIONAL、LIGHTMAP_ON、DIRLIGHTMAP_COMBINED、DYNAMICLIGHTMAP_ON、LIGHTMAP_SHADOW_MIXING、VERTEXLIGHT_ON、LIGHTPROBE_SH
|
否 | PassType.ForwardBase |
multi_compile_instancing |
INSTANCING_ON。如果项目使用程序实例化,还会添加 PROCEDURAL_ON。 |
是 | 实例化 |
multi_compile_lightpass |
POINT、DIRECTIONAL、SPOT、POINT_COOKIE、DIRECTIONAL_COOKIE、SHADOWS_DEPTH、SHADOWS_SCREEN、SHADOWS_CUBE、SHADOWS_SOFT、SHADOWS_SHADOWMASK、LIGHTMAP_SHADOW_MIXING
|
否 | 所有绘制实时光照和阴影的通道,光照探针除外。 |
multi_compile_particles |
SOFTPARTICLES_ON |
是 | 粒子系统通道。 |
multi_compile_prepassfinal |
LIGHTMAP_ON、DIRLIGHTMAP_COMBINED、DYNAMICLIGHTMAP_ON、UNITY_HDR_ON、SHADOWS_SHADOWMASK、LIGHTPROBE_SH
|
是 | PassType.Deferred |
multi_compile_shadowcaster |
SHADOWS_DEPTH、SHADOWS_CUBE
|
否 | PassType.ShadowCaster |
multi_compile_shadowcollector |
SHADOWS_SPLIT_SPHERES、SHADOWS_SINGLE_CASCADE
|
是 | 屏幕空间阴影。 |
您可以使用 skip_variants 指令删除不使用的关键字。
例如,以下示例为 multi_compile_fwdadd 集合添加了关键字,但删除了 POINT 和 POINT_COOKIES 变体。
#pragma multi_compile_fwdadd
#pragma skip_variants POINT POINT_COOKIE
如需详细了解删除变体,请参阅着色器变体剥离。