将两个颜色附件混合在一起成为最终图像

Blend two color attachments together into final image

如果我有多个颜色附件,据说我可以将它们混合在一起以呈现最终图像。

我了解如何配置固定混合函数:

    VkPipelineColorBlendAttachmentState
    VkPipelineColorBlendStateCreateInfo

问题是,如果我说 VK_BLEND_FACTOR_ZEROVK_BLEND_FACTOR_ONE,哪个颜色附件是来源,哪个目的地?如果我有 3 个附件(2 个颜色 + 1 个深度模板),我可以在哪里指定它们:

    { colorAttachment1, colorAttachment2, depthImage }

说,我想将 colorAttachment2 混合到 colorAttachment1 上,因为只有 colorAttachment1 是可呈现的,而另一个不是,它只是一个“内部”图像。

没有所谓的“混色附件”。混合发生在附件中的当前值和为特定片段生成的片段颜色之间。

如果你有两个帧缓冲区附加图像,并且你想在它们之间混合,你需要做的是渲染一个全屏四边形,这样你就可以从 FS 中的一个附件读取并写入(混合)到另一个。您必须从其中一个附件中读取作为输入附件,因此您需要将此渲染命令放入新的子通道中。

如果您正在写入第三张图片(这并不理想,因为您的图片比您需要的多了一张),那么您可以只读取两张图片,在着色器中使用常规数学进行混合, 并写给第三个。