首页 > 技术文章 > 什么是渲染流水线

xhg986 2017-08-30 10:51 原文

  渲染流水线的工作任务在于由一个三维场景出发、生成(或者说渲染)一张二维图像。换句话说,计算机需要从一系列的定点数据、纹理等信息出发,把这些信息最终转换成一张人眼可以识别的图像。而这个工作通常是由CPU和GPU共同完成的。

  渲染流程分为3个阶段:应用阶段(Application)、几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage).

  注意,这里仅仅是概念性阶段,每个阶段本身通常也是一个流水线系统,即包含了子流水线阶段下图显示了3个概念阶段之间的联系。

应用阶段

  从这个名字我们可以看出,这个阶段是由我们的应用主导的,因此通常由CPU负责实现,换句话说,我们这些开发者具有这个阶段的绝对控制权。

  在这个阶段中,开发者有3个主要任务:首先,我们需要准备好场景数据,例如摄像机的位置、视锥体、场景中包含了哪些模型、使用了哪些光源等等;其次,为了提高渲染性能,我们往往需要做一个粗粒度的剔除(culling)工作,以把那些不可见的物体剔除出去,这样就不需要再移交给几何阶段处理;最后,我们需要设置好每个模型的渲染状态。这些渲染状态包括但不限于它使用的材质(漫反射颜色、高光反射颜色)、使用的纹理、使用的Shader等。这一阶段最重要的是输出渲染所需要的几何信息,即渲染图元(rendering primitives)、通俗来讲,渲染图元可以是点、线、三角面等。这些渲染图元将会被传递给下一个阶段——几何阶段。

几何阶段

  几何阶段用于处理所有和我们要绘制的几何相关的事情。例如,决定需要绘制的图元是什么,怎样绘制它们,在哪里绘制它们。这个阶段通常在GPU上进行。

  几何阶段负责和每个渲染图元打交道,进行逐定点、逐多边形的操作。这个阶段可以进一步分成更小的流水线阶段,几何阶段的一个重要任务就是把定点的坐标转换屏幕空间中,再交给光栅器进行处理。通过对输入的渲染图元进行多步处理后,这一阶段将会输出屏幕空间的二维定点坐标、每个定点对应的深度值、着色等相关信息,并传递给下一个阶段。

光栅化阶段

  这一阶段将会使用上个阶段传递的数据产生屏幕上的像素,并渲染出最终的图像。这一阶段也是在GPU上运行。光栅化的任务主要是决定每个渲染图元的哪些像素应该被绘制在屏幕上。它需要对上一个阶段得到的逐顶点数据(例如纹理坐标、顶点颜色等)进行插值,然后再进行逐像素处理。

文章参考:Shader入门精要

推荐阅读