Unity 混合操作(Blending)

渲染图形时,在执行所有着色器并应用所有纹理后,像素将写入到屏幕。这些像素与已有像素的组合方式由 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值,然后相加

示例工程下载

猜你喜欢

转载自blog.csdn.net/st75033562/article/details/129409187