Specifies the blending operation used by the Blend command. For this command to have any effect, there must also be a Blend command in the same Pass block (if this command is in a Pass block) or SubShader block (if this command is in a SubShader block).
Not all blending operations are supported on all devices, and support depends on both the graphics API and the hardware. Different graphics APIs handle unsupported blending operations differently: GL skips unsupported operations, and Vulkan and Metal fall back to Add operations.
| Feature name | Built-in Render PipelineA series of operations that take the contents of a Scene, and displays them on a screen. Unity lets you choose from pre-built render pipelines, or write your own. More info See in Glossary | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Custom SRP | 
|---|---|---|---|---|
| BlendOp | Yes | Yes | Yes | Yes | 
This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.
| Signature | Example syntax | Function | 
|---|---|---|
| BlendOp <operation> | BlendOp Sub | Sets the blending operation used by the Blend command. | 
| Parameter | Value | Function | 
|---|---|---|
| operation | Add | Add source and destination together. | 
| Sub | Subtract destination from source. | |
| RevSub | Subtract source from destination. | |
| Min | Use the smaller of source and destination. (1) | |
| Max | Use the larger of source and destination. (1) | |
| LogicalClear | Logical operation: Clear (0)(1) | |
| LogicalSet | Logical operation: Set (1)(1) | |
| LogicalCopy | Logical operation: Copy (s)(1) | |
| LogicalCopyInverted | Logical operation: Copy inverted (!s)2 | |
| LogicalNoop | Logical operation: Noop (d)(1) | |
| LogicalInvert | Logical operation: Invert (!d)(1) | |
| LogicalAnd | Logical operation: And (s & d)(1) | |
| LogicalNand | Logical operation: Nand !(s & d)(1) | |
| LogicalOr | Logical operation: Or (s | d)(1) | |
| LogicalNor | Logical operation: Nor !(s | d)(1) | |
| LogicalXor | Logical operation: Xor (s ^ d)(1) | |
| LogicalEquiv | Logical operation: Equivalence !(s ^ d)(1) | |
| LogicalAndReverse | Logical operation: Reverse And (s & !d)(1) | |
| LogicalAndInverted | Logical operation: Inverted And (!s & d)(1) | |
| LogicalOrReverse | Logical operation: Reverse Or (s | !d)(1) | |
| LogicalOrInverted | Logical operation: Inverted Or (!s | d)(1) | |
| Multiply | Advanced OpenGL blending operation: Multiply(2) | |
| Screen | Advanced OpenGL blending operation: Screen(2) | |
| Overlay | Advanced OpenGL blending operation: Overlay(2) | |
| Darken | Advanced OpenGL blending operation: Darken(2) | |
| Lighten | Advanced OpenGL blending operation: Lighten(2) | |
| ColorDodge | Advanced OpenGL blending operation: ColorDodge(2) | |
| ColorBurn | Advanced OpenGL blending operation: ColorBurn(2) | |
| HardLight | Advanced OpenGL blending operation: HardLight(2) | |
| SoftLight | Advanced OpenGL blending operation: SoftLight(2) | |
| Difference | Advanced OpenGL blending operation: Difference(2) | |
| Exclusion | Advanced OpenGL blending operation: Exclusion(2) | |
| HSLHue | Advanced OpenGL blending operation: HSLHue(2) | |
| HSLSaturation | Advanced OpenGL blending operation: HSLSaturation(2) | |
| HSLColor | Advanced OpenGL blending operation: HSLColor(2) | |
| HSLLuminosity | Advanced OpenGL blending operation: HSLLuminosity(2) | 
Notes:
GLES3.1 AEP+, GL_KHR_blend_equation_advanced, or GL_NV_blend_equation_advanced. They can only be used with standard RGBA blending; they are not compatible with separate RGB and alpha blending.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.
        }
    }
}
This example code demonstrates the syntax for using this command in a SubShader block.
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.
        }
    }
}