小记渲染管线,不会涉及复杂的底层原理,仅供简单概念理解。

本文将以游戏中常见的3D模型渲染出画面的过程为例,讲述什么是渲染管线。

在了解渲染管线前

在电脑中,整个绘制工作一般由CPU指挥GPU进行——CPU会提供具体任务和数据,而GPU负责执行和计算。

为了绘制所要准备的那些数据

电脑所要渲染的三维物体,其实是由模型和材质贴图构成,而模型在电脑中则是由一个个点以及点上的数据(例如uv信息、法线等等),这些数据被称为顶点缓存(Vertex Buffer)

由点可以构成面,但是很多面都是形状各异的,为此可以通过顶点组合的方式将面分成数个三角形面进行绘制,例如一个正方形可以通过选中4个顶点的3个绘制三角形,然后再绘制另一个三角形,组合起来便可形成一个完整的正方形,这样所有形状各异的面都会被分割成为数个可以绘制的三角形。

不过因为分解和绘制是分开的(CPU不会进行绘制),因此和顶点缓存一样,分出来的三角面的数据也要存储,具体些则是顶点组合需要存储,而在顶点组合中,记录的不是具体顶点的坐标,而是顶点的索引(代号),因此存储的数据会被称为索引缓冲(Index Buffer)

除此之外,在游戏中还有摄像机相关的数据以及光照相关的数据需要一并准备。

还有一个更重要且较为耳熟能详的东西,就是着色器(Shader)——可以草率理解为一些用于对模型贴图进行处理的代码脚本。也是在绘制前需要准备的数据。

渲染管线

从CPU将绘制所需要的数据给GPU后,GPU通过对数据的处理并绘制的过程,则是渲染管线

值得一提的是,广义上的渲染管线也包括了CPU准备数据的阶段。

开始绘制

GPU收到了CPU的数据,开始绘制,其中有几个重要的流程,下面会按顺序进行介绍。

顶点着色 Vertex Shader

在这一步,GPU会按照着色器里写的脚本对顶点缓冲里的数据进行额外处理。例如将模型的顶点坐标变换为屏幕上的坐标。

Triangle Processing

在这一步,GPU会绘制上面提到的三角形面。

光栅化 Rasterization

因为屏幕是一个个像素组成,因此GPU会将三角面变为具体的像素。

同时在这一步GPU会进行深度测试——也就是判断三角面之前的遮挡关系。

像素着色 Pixel Shader

在这一步,GPU会根据Shader给模型上材质或者是上光影效果。

Frame Buffer

在这一步,GPU会添加一些后处理手段,例如抗锯齿、辉光之类的效果。

参考文章

业余蚊子.【游戏开发基础知识】什么是渲染管线?如何绘制3D物体?