【问题标题】:Describing attachments for multipass rendering描述多通道渲染的附件
【发布时间】:2018-01-03 14:14:52
【问题描述】:

我正在尝试在 vulkan 中创建一个延迟渲染器,其中包含一个渲染通道和两个子通道。第一个应该是填充 G-Buffer 的几何通道,第二个应该是应用照明的着色通道。现在的问题是我不知道应该如何描述VkRenderPassCreateInfo 中子通道之间的依赖关系。

VkRenderPassCreateInfo 有一个字段:

pAttachments 指向一组attachmentCount 描述附件属性的VkAttachmentDescription 结构的数组,如果attachmentCount 为零,则指向NULL

但是VkSubpassDescription 有一个字段:

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

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

【问题讨论】:

    标签: c++ render renderer vulkan


    【解决方案1】:

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

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

    【讨论】:

    • 因此,渲染通道指定附件的总量和类型,子通道仅引用它们将使用的那些。非常感谢。
    • 没错。这就是为什么当您创建帧缓冲区时,它的图像对应于渲染通道的附件(那些用VkAttachmentDescription 对象数组指定的附件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多