Version: 6000.3
语言: 中文
ShaderLab 参考中的 AlphaToMask 命令
ShaderLab 参考中的 BlendOp 命令

ShaderLab 参考中的混合命令

确定 GPU 如何组合片段的输出着色器在 GPU 上运行的程序。更多信息
请参阅术语表
替换为渲染目标。

此命令的功能取决于混合作,您可以使用 BlendOp 命令进行设置。请注意,虽然所有图形 API 和硬件都支持混合本身,但某些混合作的支持更为有限。

启用混合会禁用GPU上的某些优化(主要是隐藏表面移除/Early-Z),这可能导致GPU帧时间增加。

此命令对渲染状态进行更改。在Pass块来设置该通道的渲染状态,或在SubShader块来设置该子着色器中所有通道的渲染状态。

渲染管线兼容性

功能名称 普遍渲染管线(Render Pipeline) 获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管道中进行选择,或编写自己的渲染管道。更多信息
请参阅术语表
(URP)
高清渲染管线 (HDRP) 定制 SRP 内置渲染管线
混合 是的 是的 是的 是的

语法

签名 语法示例 功能
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)

如果启用了混合,则会发生以下情况:

  • 如果使用 BlendOp 命令,则混合作将设置为该值。否则,混合作默认为Add.
  • 如果混合作是Add,Sub,RevSub,MinMax,则 GPU 将片段着色器的输出值乘以源因子。
  • 如果混合作是Add,Sub,RevSub,MinMax,则 GPU 将呈现目标中已有的值乘以目标因子。
  • GPU 对结果值执行混合作。

笔记:

  1. 任何指定呈现目标的签名都需要 OpenGL 4.0+,GL_ARB_draw_buffers_blend,或 OpenGL ES 3.2。
  2. 单独的 RGB 和 Alpha 混合与高级 OpenGL 混合作不兼容。

参数

参数 价值 功能
渲染目标 整数,范围 0 到 7 呈现目标索引。
Off 禁用混合。
因素 One 此输入的值为 1。使用此值可使用源颜色或目标颜色的值。
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在“混合”命令中定义。
  • sourceValue是片段着色器输出的值。
  • operation是混合作。
  • destinationFactor在“混合”命令中定义。
  • destinationValue是目标缓冲区中已有的值。

其他资源

ShaderLab 参考中的 AlphaToMask 命令
ShaderLab 参考中的 BlendOp 命令