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