将两个颜色附件混合在一起成为最终图像
Blend two color attachments together into final image
如果我有多个颜色附件,据说我可以将它们混合在一起以呈现最终图像。
我了解如何配置固定混合函数:
VkPipelineColorBlendAttachmentState
VkPipelineColorBlendStateCreateInfo
问题是,如果我说 VK_BLEND_FACTOR_ZERO
和 VK_BLEND_FACTOR_ONE
,哪个颜色附件是来源,哪个目的地?如果我有 3 个附件(2 个颜色 + 1 个深度模板),我可以在哪里指定它们:
{ colorAttachment1, colorAttachment2, depthImage }
说,我想将 colorAttachment2
混合到 colorAttachment1
上,因为只有 colorAttachment1
是可呈现的,而另一个不是,它只是一个“内部”图像。
没有所谓的“混色附件”。混合发生在附件中的当前值和为特定片段生成的片段颜色之间。
如果你有两个帧缓冲区附加图像,并且你想在它们之间混合,你需要做的是渲染一个全屏四边形,这样你就可以从 FS 中的一个附件读取并写入(混合)到另一个。您必须从其中一个附件中读取作为输入附件,因此您需要将此渲染命令放入新的子通道中。
如果您正在写入第三张图片(这并不理想,因为您的图片比您需要的多了一张),那么您可以只读取两张图片,在着色器中使用常规数学进行混合, 并写给第三个。
如果我有多个颜色附件,据说我可以将它们混合在一起以呈现最终图像。
我了解如何配置固定混合函数:
VkPipelineColorBlendAttachmentState
VkPipelineColorBlendStateCreateInfo
问题是,如果我说 VK_BLEND_FACTOR_ZERO
和 VK_BLEND_FACTOR_ONE
,哪个颜色附件是来源,哪个目的地?如果我有 3 个附件(2 个颜色 + 1 个深度模板),我可以在哪里指定它们:
{ colorAttachment1, colorAttachment2, depthImage }
说,我想将 colorAttachment2
混合到 colorAttachment1
上,因为只有 colorAttachment1
是可呈现的,而另一个不是,它只是一个“内部”图像。
没有所谓的“混色附件”。混合发生在附件中的当前值和为特定片段生成的片段颜色之间。
如果你有两个帧缓冲区附加图像,并且你想在它们之间混合,你需要做的是渲染一个全屏四边形,这样你就可以从 FS 中的一个附件读取并写入(混合)到另一个。您必须从其中一个附件中读取作为输入附件,因此您需要将此渲染命令放入新的子通道中。
如果您正在写入第三张图片(这并不理想,因为您的图片比您需要的多了一张),那么您可以只读取两张图片,在着色器中使用常规数学进行混合, 并写给第三个。