确定 GPU 如何将片元着色器的输出与渲染目标进行合并。
此命令的功能取决于混合操作,您可以使用 BlendOp 命令进行设置。请注意,虽然所有图形 API 和硬件都支持混合功能,但对某些混合操作的支持较为有限。
启用混合会禁用 GPU 上的一些优化(主要是删除隐藏的表面/Early-Z),这些优化会增加 GPU 帧时间。
此命令会更改渲染状态。在 Pass 代码块中使用它可为该通道设置渲染状态,或者在 SubShader 代码块中使用它可为该子着色器中的所有通道设置渲染状态。
| 功能名称 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义 SRP | 内置渲染管线 |
|---|---|---|---|---|
| Blend | 是 | 是 | 是 | 是 |
| 签名 | 示例语法 | 功能 |
|---|---|---|
Blend <state> |
Blend Off |
禁用默认渲染目标的混合。这是默认值。 |
Blend <render target> <state> |
Blend 1 Off |
如上,但针对给定的渲染目标。(1) |
Blend <source factor> <destination factor> |
Blend One Zero |
启用默认渲染目标的混合。设置 RGBA 值的混合系数。 |
Blend <render target> <source factor> <destination factor> |
Blend 1 One Zero |
如上,但针对给定的渲染目标。(1) |
Blend <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> |
Blend One Zero, Zero One |
启用默认渲染目标的混合。为 RGB 和 Alpha 值设置单独的混合系数。(2) |
Blend <render target> <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> |
Blend 1 One Zero, Zero One |
如上,但针对给定的渲染目标。(1) (2) |
如果启用了混合,则会发生以下情况:
Add。Add、Sub、RevSub、Min 或 Max,GPU 会将片元着色器的输出值乘以源系数。Add、Sub、RevSub、Min 或 Max,GPU 会将渲染目标中现有的值乘以目标系数。注意:
GL_ARB_draw_buffers_blend 或 OpenGL ES 3.2。
| 参数 | 值 | 功能 |
|---|---|---|
| render target | 整数,范围 0 到 7 | 渲染目标索引。 |
| 状态 | Off |
禁用混合。 |
| factor | One |
此输入的值是 one。该值用于使用源或目标的颜色的值。 |
Zero |
此输入的值是 zero。该值用于删除源或目标值。 | |
SrcColor |
GPU 将此输入的值乘以源颜色值。 | |
SrcAlpha |
GPU 将此输入的值乘以源 Alpha 值。 | |
SrcAlphaSaturate |
GPU 将此输入的值乘以 source alpha 和 (1 - destination alpha) 的最小值。 |
|
DstColor |
GPU 将此输入的值乘以帧缓冲区的源颜色值。 | |
DstAlpha |
GPU 将此输入的值乘以帧缓冲区的源 Alpha 值。 | |
OneMinusSrcColor |
GPU 将此输入的值乘以(1 - 源颜色)。 | |
OneMinusSrcAlpha |
GPU 将此输入的值乘以(1 - 源 Alpha)。 | |
OneMinusDstColor |
GPU 将此输入的值乘以(1 - 目标颜色)。 | |
OneMinusDstAlpha |
GPU 将此输入的值乘以(1 - 目标 Alpha)。 |
混合等式为:
finalValue = sourceFactor * sourceValue operation destinationFactor * destinationValue
在这个等式中:
finalValue 是 GPU 写入目标缓冲区的值。sourceFactor 在 Blend 命令中定义。sourceValue 是片元着色器输出的值。operation 是混合操作。destinationFactor 在 Blend 命令中定义。destinationValue 是目标缓冲区中现有的值。