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

本文详细介绍了图形渲染中的混合操作,包括 BlendOff、BlendSrcFactorDstFactor 等模式,以及各种混合系数和混合运算如 Add、Sub、RevSub。还探讨了在多渲染目标下的不同混合模式设置,并列举了常见的混合类型及其应用场景。同时,通过示例解释了不同 BlendOp 如何影响最终屏幕颜色的计算。
摘要由CSDN通过智能技术生成

语法

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 乘法

示例

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

如果shader使用了 Blend SrcAlpha OneMinusSrcAlpha

Blend SrcAlpha OneMinusSrcAlpha

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

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

如果指定了 BlendOp为BlendOp Sub,即

Blend SrcAlpha OneMinusSrcAlpha
BlendOp Sub

则屏幕最终的颜色是:

outColor = RmGmBmAm * SrcAlpha - RsGsBsAs * OneMinusSrcAlpha = RmGmBmAm * Am - RsGsBsAs * (1 - Am)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值