Unity 混合操作(Blending)

文章详细阐述了在Unity中渲染图形时,如何通过着色器和纹理处理像素,并使用Blend命令控制像素与已有像素的混合方式,创建透明效果。混合过程涉及源颜色和目标颜色的混合函数、混合系数以及混合运算,例如传统的透明度、预乘透明度、加法、软加法和乘法等不同混合模式的效果展示。

渲染图形时,在执行所有着色器并应用所有纹理后,像素将写入到屏幕。这些像素与已有像素的组合方式由 Blend 命令控制。用于生成透明对象。

《Unity Shader入门精要》大致解释:

片元通过了模板测试和深度测试之后,会进行混合步骤。如果开启了混合,GPU会取出源颜色(该片元着色器的颜色值)和目标颜色(颜色缓冲区中的颜色值)使用一个混合函数来进行混合操作。

混合简化流程图

文档语法:

Blend Off:关闭混合(这是默认值)

Blend SrcFactor DstFactor:配置并启用混合。生成的颜色将乘以SrcFactor。屏幕上的已有颜色乘以DstFactor,然后将这两个值相加。(SrcFactor DstFactor填混合系数控制RGBA)

Blend SrcFactor DstFactor, SrcFactorA DstFactorA:同上,但使用不同系数来混合 Alpha 通道。(SrcFactor DstFactor填混合系数控制RGBSrcFactorA DstFactorA填混合系数控制Alpha (A) 通道)

BlendOp Op:不将混合颜色相加,而是对它们执行不同的操作。(Op填混合运算控制RGBA)

BlendOp OpColor, OpAlpha:同上,但是对颜色 (RGB) 通道和 Alpha (A) 通道使用不同的混合操作。(OpColor填混合运算控制RGB,OpAlpha填混合运算控制Alpha (A) 通道)

混合运算语法(一切仅支持DX的不再赘述):

Add 将源和目标相加。

Sub 从源减去目标。

RevSub 从目标减去源。

Min 使用源和目标中的较小者。

Max 使用源和目标中的较大者。

混合系数语法:

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、Blend One One

两个颜色值相加

当背景面板偏蓝时显示

当背景面板全白时显示,这里效果图是全白,会与文章背景色相同导致看不出来

注意这里变成了全白,原因是两个颜色值相加,超过了(1,1,1,1).所以是全白。

2、Blend SrcAlpha OneMinusSrcAlpha 传统透明度

源颜色乘以源Alpha 值,目标颜色乘以1-源颜色Aplha值,然后相加

示例工程下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一零壹0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值