Unity 常用 Render State 属性 UI
有时候想把 ZTest
、Cull
等属性暴露到面板中配置,避免重复写相似的 Shader。这里直接把常用的都整理出来。
Properties
[Header(Option)]
[Enum(UnityEngine.Rendering.CullMode)] _CullMode("Cull Mode", float) = 2
[Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorMask("Color Mask", Float) = 15
[Enum(Off, 0, On, 1)] _ZWriteMode("ZWrite Mode", float) = 1
[Enum(UnityEngine.Rendering.CompareFunction)] _ZTestMode("ZTest Mode", Float) = 4
[Header(Blend)]
[Enum(UnityEngine.Rendering.BlendOp)] _BlendOp("Blend Op", Float) = 0
[Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("Src Blend", Float) = 1
[Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("Dst Blend", Float) = 0
[Header(Stencil)]
[IntRange] _StencilRef("Stencil Ref", Range(0, 255)) = 0
[IntRange] _StencilReadMask("Stencil ReadMask", Range(0, 255)) = 255
[IntRange] _StencilWriteMask("Stencil WriteMask", Range(0, 255)) = 255
[Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Comp", Float) = 8
[Enum(UnityEngine.Rendering.StencilOp)] _StencilPass("Stencil Pass", Float) = 0
[Enum(UnityEngine.Rendering.StencilOp)] _StencilFail("Stencil Fail", Float) = 0
[Enum(UnityEngine.Rendering.StencilOp)] _StencilZFail("Stencil ZFail", Float) = 0
建议自己写一个 MaterialPropertyDrawer
绘制 _ColorMask
。因为 ColorWriteMask
是一个 Flags,但是 [Enum(UnityEngine.Rendering.ColorWriteMask)]
只能绘制成普通 Enum,无法组合多个值。
Commands
相关文档:ShaderLab: commands。
Cull [_CullMode]
ColorMask [_ColorMask]
ZWrite [_ZWriteMode]
ZTest [_ZTestMode]
BlendOp [_BlendOp]
Blend [_SrcBlend] [_DstBlend]
Stencil
{
Ref [_StencilRef]
ReadMask [_StencilReadMask]
WriteMask [_StencilWriteMask]
Comp [_StencilComp]
Pass [_StencilPass]
Fail [_StencilFail]
ZFail [_StencilZFail]
}
Enum
相关的枚举都声明在 Runtime/Export/Graphics/GraphicsEnums.cs 里。
下面的表基于 Unity 2023.3.0b5 的代码。
BlendMode
Name | Value |
Zero | 0 |
One | 1 |
DstColor | 2 |
SrcColor | 3 |
OneMinusDstColor | 4 |
SrcAlpha | 5 |
OneMinusSrcColor | 6 |
DstAlpha | 7 |
OneMinusDstAlpha | 8 |
SrcAlphaSaturate | 9 |
OneMinusSrcAlpha | 10 |
BlendOp
Name | Value |
Add | 0 |
Subtract | 1 |
ReverseSubtract | 2 |
Min | 3 |
Max | 4 |
LogicalClear | 5 |
LogicalSet | 6 |
LogicalCopy | 7 |
LogicalCopyInverted | 8 |
LogicalNoop | 9 |
LogicalInvert | 10 |
LogicalAnd | 11 |
LogicalNand | 12 |
LogicalOr | 13 |
LogicalNor | 14 |
LogicalXor | 15 |
LogicalEquivalence | 16 |
LogicalAndReverse | 17 |
LogicalAndInverted | 18 |
LogicalOrReverse | 19 |
LogicalOrInverted | 20 |
Multiply | 21 |
Screen | 22 |
Overlay | 23 |
Darken | 24 |
Lighten | 25 |
ColorDodge | 26 |
ColorBurn | 27 |
HardLight | 28 |
SoftLight | 29 |
Difference | 30 |
Exclusion | 31 |
HSLHue | 32 |
HSLSaturation | 33 |
HSLColor | 34 |
HSLLuminosity | 35 |
CompareFunction
Name | Value |
Disabled | 0 |
Never | 1 |
Less | 2 |
Equal | 3 |
LessEqual | 4 |
Greater | 5 |
NotEqual | 6 |
GreaterEqual | 7 |
Always | 8 |
CullMode
Name | Value |
Off | 0 |
Front | 1 |
Back | 2 |
ColorWriteMask
Name | Value (Flags) |
Alpha | 1 |
Blue | 2 |
Green | 4 |
Red | 8 |
All | 15 |
StencilOp
Name | Value |
Keep | 0 |
Zero | 1 |
Replace | 2 |
IncrementSaturate | 3 |
DecrementSaturate | 4 |
Invert | 5 |
IncrementWrap | 6 |
DecrementWrap | 7 |
参考