Unity 混合操作(Blending)
创始人
2024-05-30 19:32:49

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

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

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

混合简化流程图

文档语法:

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

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

Blend SrcFactor DstFactor, SrcFactorA DstFactorA:同上,但使用不同系数来混合 Alpha 通道。(SrcFactor DstFactor填混合系数控制RGB,SrcFactorA 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值,然后相加

示例工程下载

相关内容

热门资讯

警心暖民心 (来源:劳动午报)转自:劳动午报 近日,北京市公安局丰台分局在北京银座和谐广场设立主会场,开展以“四...
全旺镇办好民生实事 提升群众幸... (来源:衢州日报)转自:衢州日报  本报讯 (记者 毛慧娟 通讯员 吴齐凡 王晶) 1月9日,衢江区...
证监会:合力推动中长期资金进一...   证券时报记者 程丹 贺觉渊  1月11日,证监会副主席陈华平在参加第30届中国资本市场论坛时表示...
陶然亭街道总工会打造不打烊的“... (来源:劳动午报)转自:劳动午报 本报讯 (记者 陈曦) 近日,西城区陶然亭街道总工会打造的24小时...
最新或2023(历届)石家庄市...  最新或2023(历届)石家庄五险一金  1、缴存基数计算口径及标准。住房公积金缴存基数为职工上一年...