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 命令使用的混合操作。 |
有效参数值
参数 | 值 | 功能 |
---|---|---|
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) |
注意:
- 在 OpenGL ES 2 上,Min 和 Max 需要
GL_EXT_blend_minmax
。 - 逻辑操作需要 DX 11.1+ 或 Vulkan。
- 高级 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
{
// 此处是定义通道的代码的其余部分。
}
}
}
由3D建模学习工作室整理翻译,转载请注明出处!