Version: 2022.2
ShaderLab 命令:Blend
ShaderLab 命令:ColorMask

ShaderLab 命令:BlendOp

指定 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_advancedGL_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
        {    
              // 此处是定义通道的代码的其余部分。
        }
    }
}
ShaderLab 命令:Blend
ShaderLab 命令:ColorMask