Version: Unity 6.0 (6000.0)
语言 : 中文
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) (1)
LogicalSet 逻辑操作:Set (1) (1)
LogicalCopy 逻辑操作:Copy (s) (1)
LogicalCopyInverted 逻辑操作:Copy inverted (!s) 2
LogicalNoop 逻辑操作:Noop (d) (1)
LogicalInvert 逻辑操作:Invert (!d) (1)
LogicalAnd 逻辑操作:And (s & d) (1)
LogicalNand 逻辑操作:Nand !(s & d) (1)
LogicalOr 逻辑操作:Or (s | d) (1)
LogicalNor 逻辑操作:Nor !(s | d) (1)
LogicalXor 逻辑操作:Xor (s ^ d) (1)
LogicalEquiv 逻辑操作:Equivalence !(s ^ d) (1)
LogicalAndReverse 逻辑操作:Reverse And (s & !d) (1)
LogicalAndInverted 逻辑操作:Inverted And (!s & d) (1)
LogicalOrReverse 逻辑操作:Reverse Or (s | !d) (1)
LogicalOrInverted 逻辑操作:Inverted Or (!s | d) (1)
Multiply 高级 OpenGL 混合操作:Multiply (2)
Screen 高级 OpenGL 混合操作:Screen (2)
Overlay 高级 OpenGL 混合操作:Overlay (2)
Darken 高级 OpenGL 混合操作:Darken (2)
Lighten 高级 OpenGL 混合操作:Lighten (2)
ColorDodge 高级 OpenGL 混合操作:ColorDodge (2)
ColorBurn 高级 OpenGL 混合操作:ColorBurn (2)
HardLight 高级 OpenGL 混合操作:HardLight (2)
SoftLight 高级 OpenGL 混合操作:SoftLight (2)
Difference 高级 OpenGL 混合操作:Difference (2)
Exclusion 高级 OpenGL 混合操作:Exclusion (2)
HSLHue 高级 OpenGL 混合操作:HSLHue (2)
HSLSaturation 高级 OpenGL 混合操作:HSLSaturation (2)
HSLColor 高级 OpenGL 混合操作:HSLColor (2)
HSLLuminosity 高级 OpenGL 混合操作:HSLLuminosity (2)

注意:

  1. 逻辑操作需要 DX 11.1+ 或 Vulkan。
  2. 高级 OpenGL 混合操作需要 GLES3.1 AEP+GL_KHR_blend_equation_advancedGL_NV_blend_equation_advanced。它们只能与标准 RGBA 混合一起使用;它们与单独的 RGB 和 Alpha 混合不兼容。

示例

Shader "Examples/CommandExample"
{
    SubShader
    {
         // The rest of the code that defines the SubShader goes here.

        Pass
        {    
             // Enable subtractive blending for this Pass
             Blend SrcAlpha One
             BlendOp RevSub
            
              // The rest of the code that defines the Pass goes here.
        }
    }
}

此示例代码演示在 SubShader 代码块中使用此命令的语法。

Shader "Examples/CommandExample"
{
    SubShader
    {
         // Enable subtractive blending for this SubShader
         Blend SrcAlpha One
         BlendOp RevSub

         // The rest of the code that defines the SubShader goes here.        

        Pass
        {    
              // The rest of the code that defines the Pass goes here.
        }
    }
}

其他资源

ShaderLab 中的 Blend 命令参考
ShaderLab 中的 ColorMask 命令参考