将两种颜色附件混合到最终图像中

问题描述

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

我了解如何配置固定混合功能

    VkPipelineColorBlendAttachmentState
    VkPipelineColorBlendStateCreateInfo

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

    { colorAttachment1,colorAttachment2,depthImage }

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

解决方法

没有“混合颜色附件”这样的东西。附件中的当前值与为特定片段生成的片段颜色之间发生混合。

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

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