Blend
ShaderLab:混合混合用于生成透明对象。
渲染图形时,在执行所有着色器并应用所有纹理后,像素将写入到屏幕。这些像素与已有像素的组合方式由 Blend 命令控制。
语法Blend Off
:关闭混合(这是默认值)
Blend SrcFactor DstFactor
:配置并启用混合。生成的颜色将乘以 SrcFactor。屏幕上的已有颜色乘以 DstFactor,然后将这两个值相加。
Blend SrcFactor DstFactor, SrcFactorA DstFactorA
:同上,但使用不同系数来混合 Alpha 通道。
BlendOp Op
:不将混合颜色相加,而是对它们执行不同的操作。
BlendOp OpColor, OpAlpha
:同上,但是对颜色 (RGB) 通道和 Alpha (A) 通道使用不同的混合操作。
此外,您还可以设置上层渲染目标混合模式。当 使用多渲染目标 (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
AlphaToMask On
:开启 alpha-to-coverage。使用 MSAA 时,alpha-to-coverage 会根据像素着色器结果 Alpha 值按比例修改多重采样覆盖率遮罩。这通常用于比常规 Alpha 测试更少锯齿的轮廓;对植被和其他经过 Alpha 测试的着色器非常有用。
可使用以下混合运算:
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 | !d) DX11.1 only.LogicalOrInvertedLogical operation: Inverted Or (!s | d) DX11.1 only. 混合系数以下所有属性对 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 乘法