格式
c++
#pragma blend [SrcBT] [DstBT]描述
执行该命令用于确定渲染系统以什么方式组合 片元(Fragment),输出 着色器(Shader)与渲染目标,不执行此命令默认状态下不会进行混合。混合的方式基于以下公式:
c++
FValue = SrcBT * SrcValue blendop DstBT * DstValueFValue(Final Value)是渲染系统将混合结果写入目标缓冲区的值。SrcBT在blend命令中使用 [SrcBT] 字段定义。SrcValue(Source Value)是 片元着色器(Fragment Shader)输出值,即 着色器(Shader)对应物体上的 RGBA 值。blendop是混合操作,您可以使用 blendop 命令进行设置此命令的混合操作方式,默认值为add(相加)。DstBT在blend命令中使用 [DstBT] 字段定义。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