Vulkan:'附件'是什么意思

Des*_*ess 10 vulkan

关于Vulkan API,"附件"是什么意思?我看到与渲染通道相关的单词(即:颜色附件).我对我认为它们的含义模糊不清,但我想听听专家的定义.

我是第一次进行图形编程,并决定从Vulkan开始直接进入深层.

Ekz*_*uzy 16

要了解Vulkan中的附件,首先需要了解渲染过程和子过程.

渲染过程是步骤的一般描述您的绘图命令被分为和渲染过程中使用的资源.没有渲染过程,我们无法在Vulkan中渲染任何东西.每个渲染过程必须有一个或多个步骤.这些步骤称为子通道,每个子通道使用为渲染通道定义的(子)资源集合.渲染通道的资源可能包括渲染范围(颜色,深度/模板,分辨率)和输入数据(可能是在同一渲染通道的先前子通道中渲染目标的资源).这些资源称为附件(它们不包括描述符/纹理/采样器和缓冲区).

为什么我们不称它们只是渲染目标或图像?因为我们不仅渲染它们(输入附件),而且因为它们只是描述(元数据).应该在渲染过程中用作附件的图像通过帧缓冲区提供.

所以一般来说我们可以称它们为图像,因为(据我所知)只有图像可以用于附件.但是如果我们想要完全正确:图像是特定的Vulkan资源,可以用于许多目的(描述符/纹理,附件,分段资源); 附件是渲染过程中使用的资源的描述.

  • 我一直在阅读 /r/vulkan,我看到你也在那里发帖。我希望你能坚持下去,因为你的文章非常清晰,读起来很享受。你就像一个天生的老师和我们图形菜鸟的真正资产。 (3认同)
  • 谢谢!我非常感谢您还解释了附件的概念。这不仅有助于解释依恋本身,而且对其他概念也有一点暗示。我一直在阅读 Vulkan 规范。这是一个写得很好的文档,但它假定读者已经熟悉 OpenGL。我们中的一些人是完全的菜鸟! (2认同)

Ant*_*ier 7

实际上有几种附件。我将解释两种最常见的情况。

颜色/深度附件

这些是您写入其中的图像。正如Zebrafish所说,它允许您(通过vkCmdDraw *)向其中绘制一些内容。您可以阅读它们之后。它们是一个输出

输入附件:

顾名思义,这些用作输入而不是输出。例如,假设您正在构建一个延迟渲染器,则将有几个子通道(简单来说为2个)。

您的第一个子通道将写入几个图像(您的G_BUFFER):反照率/正常/深度。

一旦完成了该子通道,就可以开始另一个(光照),并进行光照计算,您需要为此传递一些输入(您的G缓冲区)。您将G缓冲区图像设置为输入附件。

输入附件和“采样器”有什么区别?输入附件不适用,您只能获取正在处理的像素。它可能允许驱动程序进行一些优化,并且可以用作临时附件来优化使用Tiled GPU的渲染(但这是另一个问题)。