Skip to content

格式

c++
#pragma blend [SrcBT] [DstBT]

描述

执行该命令用于确定渲染系统以什么方式组合 片元(Fragment),输出 着色器(Shader)与渲染目标,不执行此命令默认状态下不会进行混合。混合的方式基于以下公式:

c++
FValue = SrcBT * SrcValue blendop DstBT * DstValue
  1. FValue(Final Value)是渲染系统将混合结果写入目标缓冲区的值。

  2. SrcBT 在 blend 命令中使用 [SrcBT] 字段定义。

  3. SrcValue(Source Value)是 片元着色器(Fragment Shader)输出值,即 着色器(Shader)对应物体上的 RGBA 值。

  4. blendop 是混合操作,您可以使用 blendop 命令进行设置此命令的混合操作方式,默认值为 add(相加)。

  5. DstBT 在 blend 命令中使用 [DstBT] 字段定义。

  6. DstValue(Destination Value)是目标缓冲区中已有的缓存值,即加载完非透明物体后屏幕上的 RGBA 值。

字段

字段名是否必须字段值描述
[SrcBT]请参阅 有效参数值 小节片元着色器(Fragment Shader)输出的 RGBA 值的混合因子。
[DstBT]请参阅 有效参数值 小节缓存 RGBA 值的混合因子。

有效参数值

[SrcBT] 或 [DstBT] 字段值描述
one表示完整的颜色,不加修改,无论是本物体的颜色还是屏幕上的颜色。
zero表示混合因子为 0,本物体和屏幕上的颜色都删除。
srcColor表示本物体的颜色值。
srcAlpha表示本物体的透明度(Alpha 值)。
dstColor表示屏幕上的颜色值。
dstAlpha表示屏幕上的透明度(Alpha 值)。
oneMinusSrcColor表示 1-srcColor,即反转本物体上的 RGB 颜色值。
oneMinusSrcAlpha表示 1-srcAlpha,即反转本物体上的 Alpha 值。
oneMinusDstColor表示 1-dstColor,即反转屏幕上的 RGB 颜色值。
oneMinusDstAlpha表示 1-dstAlpha,即反转屏幕上的 Alpha 值。

值得注意的是表格中描述的屏幕,指的是加载完非透明物体后屏幕上的 RGBA 值。

代码示例

以下是常用的混合类型示例:

  • 通用半透明物体的混合示例。
c++
#pragma blend srcAlpha oneMinusSrcAlpha
  • 预乘 Alpha(Premultiplied Alpha)体系下的透明物体混合示例。
c++
#pragma blend one oneMinusSrcAlpha
  • 叠加混合示例,是粒子特效常用的混合方法。
c++
#pragma blend one one
  • 羽化叠加混合示例。
c++
#pragma blend oneMinusDstColor one
  • 相乘混合示例。
c++
#pragma blend DstColor Zero
  • 两倍相乘混合示例。
c++
#pragma blend DstColor SrcColor