当前位置:   article > 正文

【Unity Shader入门】6、Blend-混合_blend srcalpha oneminussrcalpha

blend srcalpha oneminussrcalpha

语法

Blend Off关闭混合(这是默认值)
Blend SrcFactor DstFactor配置并启用混合。生成的颜色将乘以 SrcFactor。屏幕上的已有颜色乘以 DstFactor,然后将这两个值相加。
Blend SrcFactor DstFactor, SrcFactorA DstFactorA同上,但使用不同系数来混合 Alpha 通道。
BlendOp Op不将混合颜色相加,而是对它们执行不同的操作。
BlendOp OpColor, OpAlpha同上,但是对颜色 (RGB) 通道和 Alpha (A) 通道使用不同的混合操作。

如果开启混合,默认的混合运算(没有使用BlendOp Op或BlendOp OpColor, OpAlpha)是两个值相加的,即:BlendOp Add。

当 使用多渲染目标 (MRT) 渲染时,上面的常规语法 将为所有渲染目标设置相同的混合模式。以下语法可以为各个渲染目标设置不同的混合模式,其中 N 是渲染目标索引(0 到 7)。此功能适用于大多数现代 API/GPU(DX11/12、GLCore、Metal 和 PS4):
Blend N SrcFactor DstFactor
Blend N SrcFactor DstFactor, SrcFactorA DstFactorA
BlendOp N Op
BlendOp N OpColor, OpAlpha

混合运算

Add将源和目标相加。
Sub从源减去目标。
RevSub从目标减去源。
Min使用源和目标中的较小者。
Max使用源和目标中的较大者。
LogicalClear逻辑运算:清除 (0) 仅限 DX11.1。
LogicalSet逻辑运算:设置 (1) 仅限 DX11.1。
LogicalCopy逻辑运算:复制 (s) 仅限 DX11.1。
LogicalCopyInverted逻辑运算:逆复制 (!s) 仅限 DX11.1。
LogicalNoop逻辑运算:空操作 (d) 仅限 DX11.1。
LogicalInvert逻辑运算:逆运算 (!d) 仅限 DX11.1。
LogicalAnd逻辑运算:与 (s & d) 仅限 DX11.1。
LogicalNand逻辑运算:与非 !(s & d) 仅限 DX11.1。
LogicalOrLogical operation Or (s 、d) DX11.1 only.
LogicalNorLogical operation: Nor !(s 、d) DX11.1 only.
LogicalXor逻辑运算:异或 (s ^ d) 仅限 DX11.1。
LogicalEquiv逻辑运算:相等 !(s ^ d) 仅限 DX11.1。
LogicalAndReverse逻辑运算:反转与 (s & !d) 仅限 DX11.1。
LogicalAndInverted逻辑运算:逆与 (s & d) 仅限 DX11.1。
LogicalOrReverseLogical operation: Reverse Or (s
LogicalOrInvertedLogical operation: Inverted Or (!s

混合系数

以下所有属性对 Blend 命令中的 SrcFactor 和 DstFactor 都有效。源是指计算所得颜色,目标是指屏幕上已有的颜色。如果 BlendOp 在使用逻辑运算,则将忽略混合系数。

One值为 1 - 让源或目标颜色通过。
Zero值为 0 - 删除源或目标值。
SrcColor此阶段的值乘以源颜色值。
SrcAlpha此阶段的值乘以源 Alpha 值。
DstColor此阶段的值乘以帧缓冲区源颜色值。
DstAlpha此阶段的值乘以帧缓冲区源 Alpha 值。
OneMinusSrcColor此阶段的值乘以(1 - 源颜色)。
OneMinusSrcAlpha此阶段的值乘以(1 - 源 Alpha)。
OneMinusDstColor此阶段的值乘以(1 - 目标颜色)。
OneMinusDstAlpha此阶段的值乘以(1 - 目标 Alpha)。

以下是比较常见的混合类型:

Blend SrcAlpha OneMinusSrcAlpha // 传统透明度
Blend One OneMinusSrcAlpha // 预乘透明度
Blend One One // 加法
Blend OneMinusDstColor One // 软加法
Blend DstColor Zero // 乘法
Blend DstColor SrcColor // 2x 乘法
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

示例

按照下图:
在这里插入图片描述

如果shader使用了 Blend SrcAlpha OneMinusSrcAlpha

Blend SrcAlpha OneMinusSrcAlpha
  • 1

因为没有指定 BlendOp 所以默认为 BlendOp Add
则屏幕最终的颜色是:

outColor = RmGmBmAm * SrcAlpha + RsGsBsAs * OneMinusSrcAlpha = RmGmBmAm * Am + RsGsBsAs * (1 - Am)
  • 1

如果指定了 BlendOp为BlendOp Sub,即

Blend SrcAlpha OneMinusSrcAlpha
BlendOp Sub
  • 1
  • 2

则屏幕最终的颜色是:

outColor = RmGmBmAm * SrcAlpha - RsGsBsAs * OneMinusSrcAlpha = RmGmBmAm * Am - RsGsBsAs * (1 - Am)
  • 1
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号