Link

至此,我们已经成功设置了主渲染循环,现在是时候开始渲染内容了。

要渲染内容,我们必须理解 Vulkan 渲染管线的工作原理。

渲染管线

GPU 具有许多用于渲染对象的功能。这不仅包括着色器(在 GPU 上运行的程序),还包括硬件本身的功能。

可以将 GPU 视为装配线。它有许多不同的部分执行不同的任务,输出是在帧缓冲区上渲染的像素。我们称这个“装配线”为图形管线。

在图形管线中,数据和程序输入,像素输出。图形程序员的工作是确保自定义它以获得期望的结果。

完整的 Vulkan 图形管线非常复杂,因此我们将查看其简化版本。

数据 -> 顶点着色器 -> 光栅化 -> 片段着色器 -> 渲染输出。

两个着色器阶段将运行自定义程序,这些程序将执行我们想要的任何操作。光栅化和渲染输出是固定阶段,我们只能调整它们的参数和配置。

首先,我们需要数据。数据可以是任何我们想要的东西,可以是我们的纹理、3D 模型、材质参数等等。一切都围绕着数据被各个阶段转换,直到它变成屏幕上的像素。

顶点着色器是一个小程序,它将为我们绘制的每个顶点运行一次。它的工作是以 GPU 理解的方式输出顶点位置和顶点参数,供光栅化阶段使用。

光栅化阶段将获取由顶点着色器生成的顶点,并找到三角形覆盖的像素。这些像素将被发送到片段着色器。

片段着色器负责将这些像素转换为输出的真实彩色像素,对光栅化阶段发送给它的每个像素运行一次着色器。

有了最终的彩色像素,我们通过渲染输出阶段将它们放到输出帧缓冲区上。如果我们有透明像素,此阶段将混合它们,但如果是opaque渲染,它将直接覆盖。

着色器

要对 GPU 进行编程,我们使用着色器。着色器是一种受限的编程模型,具有自己的语言和功能,专为 GPU 的并行性而设计,并能很好地与图形管线结合。

与 CPU 不同,GPU 有很多核心,而且这些核心是非常宽的核心,可以同时执行很多任务。GPU 一次可以处理的数据量是惊人的,因此普通的 CPU 风格编程模型不适用于它。

在本教程中,我们专注于渲染所需的最低限度,即片段着色器和顶点着色器

下一步:设置三角形着色器