指定 Blend 命令使用的混合操作。要使该命令生效,在同一个 Pass 代码块(如果该命令在 Pass 代码块中)或 SubShader 代码块(如果该命令在 SubShader 代码块中)中还必须有一个 Blend 命令。
并非所有设备都支持所有混合操作,支持取决于图形 API 和硬件。对于不支持的混合操作,不同的图形 API 以不同的方式处理:GL 跳过不支持的操作,Vulkan 和 Metal 回退到 Add 操作。
| 功能名称 | 内置渲染管线 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义 SRP | 
|---|---|---|---|---|
| BlendOp | 是 | 是 | 是 | 是 | 
此命令会更改渲染状态。在 Pass 代码块中使用它可为该通道设置渲染状态,或者在 SubShader 代码块中使用它可为该子着色器中的所有通道设置渲染状态。
| 签名 | 示例语法 | 功能 | 
|---|---|---|
BlendOp <operation> | 
	BlendOp Sub | 
	设置 Blend 命令使用的混合操作。 | 
| 参数 | 值 | 功能 | 
|---|---|---|
| operation | Add | 
	将源和目标相加。 | 
Sub | 
	从源减去目标。 | |
RevSub | 
	从目标减去源。 | |
Min | 
	使用源和目标中的较小者。(参见注释 1) | |
Max | 
	使用源和目标中的较大者。(参见注释 1) | |
LogicalClear | 
	逻辑操作:Clear (0)(参见注释 2) | 
|
LogicalSet | 
	逻辑操作:Set (1)(参见注释 2) | 
|
LogicalCopy | 
	逻辑操作:Copy (s)(参见注释 2) | 
|
LogicalCopyInverted | 
	逻辑操作:Copy inverted (!s) 2 | 
|
LogicalNoop | 
	逻辑操作:Noop (d)(参见注释 2) | 
|
LogicalInvert | 
	逻辑操作:Invert (!d)(参见注释 2) | 
|
LogicalAnd | 
	逻辑操作:And (s & d)(参见注释 2) | 
|
LogicalNand | 
	逻辑操作:Nand !(s & d)(参见注释 2) | 
|
LogicalOr | 
	Logical operation: Or (s | d) (See note 2) | 
|
LogicalNor | 
	Logical operation: Nor !(s | d) (See note 2) | 
|
LogicalXor | 
	逻辑操作:Xor (s ^ d)(参见注释 2) | 
|
LogicalEquiv | 
	逻辑操作:Equivalence !(s ^ d)(参见注释 2) | 
|
LogicalAndReverse | 
	逻辑操作:Reverse And (s & !d)(参见注释 2) | 
|
LogicalAndInverted | 
	逻辑操作:Inverted And (!s & d)(参见注释 2) | 
|
LogicalOrReverse | 
	Logical operation: Reverse Or (s | !d) (See note 2) | 
|
LogicalOrInverted | 
	Logical operation: Inverted Or (!s | d) (See note 2) | 
|
Multiply | 
	高级 OpenGL 混合操作: Multiply(参见注释 3) | 
|
Screen | 
	高级 OpenGL 混合操作: Screen(参见注释 3) | 
|
Overlay | 
	高级 OpenGL 混合操作: Overlay(参见注释 3) | 
|
Darken | 
	高级 OpenGL 混合操作: Darken(参见注释 3) | 
|
Lighten | 
	高级 OpenGL 混合操作: Lighten(参见注释 3) | 
|
ColorDodge | 
	高级 OpenGL 混合操作: ColorDodge(参见注释 3) | 
|
ColorBurn | 
	高级 OpenGL 混合操作: ColorBurn(参见注释 3) | 
|
HardLight | 
	高级 OpenGL 混合操作: HardLight(参见注释 3) | 
|
SoftLight | 
	高级 OpenGL 混合操作: SoftLight(参见注释 3) | 
|
Difference | 
	高级 OpenGL 混合操作: Difference(参见注释 3) | 
|
Exclusion | 
	高级 OpenGL 混合操作: Exclusion(参见注释 3) | 
|
HSLHue | 
	高级 OpenGL 混合操作: HSLHue(参见注释 3) | 
|
HSLSaturation | 
	高级 OpenGL 混合操作: HSLSaturation(参见注释 3) | 
|
HSLColor | 
	高级 OpenGL 混合操作: HSLColor(参见注释 3) | 
|
HSLLuminosity | 
	高级 OpenGL 混合操作: HSLLuminosity(参见注释 3) | 
注意:
1.在 OpenGL ES 2 上,Min 和 Max 需要GL_EXT_blend_minmax。
2.逻辑操作需要 DX 11.1+ 或 Vulkan。
3.高级 OpenGL 混合操作需要 GLES3.1 AEP+、GL_KHR_blend_equation_advanced 或 GL_NV_blend_equation_advanced。它们只能与标准 RGBA 混合一起使用;与单独的 RGB 和 Alpha 混合不兼容。
Shader "Examples/CommandExample"
{
    SubShader
    {
         // 此处是定义子着色器的代码的其余部分。
        Pass
        {    
             // 为此通道启用减法混合
             Blend SrcAlpha One
             BlendOp RevSub
            
              // 此处是定义通道的代码的其余部分。
        }
    }
}
此示例代码演示在 SubShader 代码块中使用此命令的语法。
Shader "Examples/CommandExample"
{
    SubShader
    {
         // 为此子着色器启用减法混合
         Blend SrcAlpha One
         BlendOp RevSub
         // 此处是定义子着色器的代码的其余部分。
        Pass
        {    
              // 此处是定义通道的代码的其余部分。
        }
    }
}