描述多通道渲染的附件

Describing attachments for multipass rendering

我正在尝试使用一个渲染通道和两个子通道在 vulkan 中创建一个延迟渲染器。第一个应该是填充 G-Buffer 的几何通道,第二个应该是应用光照的着色通道。现在的问题是我无法理解我应该如何描述 VkRenderPassCreateInfo.

中子通道之间的依赖关系

VkRenderPassCreateInfo有一个字段:

pAttachments 指向一个包含 attachmentCount 个描述附件属性的 VkAttachmentDescription 结构的数组,或者 NULL 如果 attachmentCount 为零。

但是 VkSubpassDescription 有一个字段:

pColorAttachments 是一个 colorAttachmentCount VkAttachmentReference 结构数组,其中列出了渲染通道的哪些附件将用作子通道中的颜色附件,以及每个附件的布局在子通道期间。数组的每个元素都对应一个片段着色器输出位置,即如果着色器声明了一个输出变量 layout(location=X),那么它会使用 pColorAttachments[X]

中提供的附件

所以根据我的理解,VkSubpassDescriptionpColorAttachments 声明了每个通道的输出布局。所以在我的示例中,第一个子通道将有 4 个输出:1 个位置、1 个法线、1 个镜面反射和 1 个深度附件。第二个子通道将有 1 个输出:屏幕上显示的颜色。如果是这样,VkRenderPassCreateInfo 中的 pAttachments 字段的用途是什么?

渲染过程定义附件;子传递 reference 它们。这就是为什么结构被称为:VkAttachmentReference;它引用由渲染过程定义的附件。渲染过程使用 VkAttachmentDescription 对象数组定义附件。 VkAttachmentReference 只是该数组的索引。

渲染通道中可以拥有的附件数量以及单个子通道可以使用的附件数量有硬性限制。