Unity3D:ShaderLab 命令-BlendOp

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

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 命令使用的混合操作。

有效参数值

参数功能
operationAdd将源和目标相加。
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)
LogicalOrLogical operation: Or (s | d) (See note 2)
LogicalNorLogical 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)
LogicalOrReverseLogical operation: Reverse Or (s | !d) (See note 2)
LogicalOrInvertedLogical 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
        {    
              // 此处是定义通道的代码的其余部分。
        }
    }
}

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D:ShaderLab 命令-Blend (mvrlink.com)

下一篇:Unity3D:ShaderLab 命令-ColorMask (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号