关于Vulkan API,'附件'意思?我看到与渲染通道有关的单词(即:颜色附件)。我对我认为它们的含义含糊不清,但想听听专家的定义。
我是第一次进行图形编程,并决定从Vulkan开始直接进入深层。
答案 0 :(得分:9)
要了解Vulkan中的附件,首先需要了解渲染过程和子遍历。
渲染过程是您的绘图命令分为以及渲染过程中使用的资源的一般描述。我们无法在没有渲染过程的情况下在Vulkan中渲染任何东西。每个渲染过程必须有一个或多个步骤。这些步骤称为子通道,每个子通道使用为渲染过程定义的(子)资源集合。渲染通道的资源可能包括渲染范围(颜色,深度/模板,分辨率)和输入数据(可能是在同一渲染通道的先前子通道中渲染目标的资源)。这些资源称为附件(它们不包含描述符/纹理/采样器和缓冲区)。
为什么我们不称它们只是渲染目标或图像?因为我们不仅渲染它们(输入附件),而且因为它们只是描述(元数据)。应该在渲染过程中用作附件的图像是通过帧缓冲区提供的。
所以一般来说我们可以称它们为图像,因为(据我所知)只有图像可以用于附件。但是如果我们想要完全正确:图像是特定的Vulkan资源,可以用于许多目的(描述符/纹理,附件,分段资源);附件是渲染过程中使用的资源的描述。
答案 1 :(得分:4)
实际上有几种类型的附件。我将解释两个最常见的。
这些是您写入的图像。正如Zebrafish所说,它允许你绘制一些东西(通过vkCmdDraw *)。你可以看完它们。它们是一个输出。
这些,正如所说的名称用作输入而不是输出。例如,假设您正在构建一个延迟渲染器,您将有几个子通道(2很简单)。
您的第一个子通道将写入多个图像(您的 G_BUFFER ):反照率/正常/深度。
完成此子通道后,您可以开始另一个(光照一个)并进行光照计算,您需要为此传递一些输入(您的G缓冲区)。您将G-Buffer图像设置为输入附件。
输入附件和“采样器”之间有什么区别?输入附件不是可附加的,您只能获得正在处理的像素。它可能允许驱动程序进行一些优化,并且可以用作瞬态附件以使用Tiled GPU优化渲染(但这是另一个问题)。