Contents

渲染流水线概述

什么是渲染流水线?

计算机从一些列的顶点数据、纹理等信息出发,把这些信息最终转换成一张人眼可以见到的图像的过程叫做渲染流水线,这个工作通常是由CPU和GPU共同完成的。

渲染流水线分为三个阶段:

  • 应用阶段
  • 几何阶段
  • 光栅化阶段

应用阶段

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

首先,我们需要准备好场景数据(摄像机位置、视锥体、场景中包含那些模型、光源等)。

其次,为了提高渲染性能,通常需要做一个粗颗粒度剔除(culling)工作,把不可见的物体剔除出去,这样就不需要再移交给几何阶段处理。

最后,我们需要设置好每个模型的渲染状态,包括但不限于材质(漫反射颜色、高光反射颜色)使用的纹理、shader等。

这一阶段最重要的输出是渲染所需的几何信息 即渲染图元(rendering primitives)。

通俗来讲,渲染图元可以是点、线、三角面等。这些渲染图元会传递给下一个阶段——几何阶段。


几何阶段

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

几何阶段负责和每个渲染图元打交道,进行逐顶点、逐多边形的操作。这个阶段可以进一步分成更小的流水线阶段。

几何阶段的一个重要任务就是把顶点坐标变换到屏幕空间中,再交给光栅器进行处理,通过对输入的渲染图元进行多步处理后,

将会输出屏幕空间的二维顶点坐标、每个顶点对应的深度值、着色器相关信息,并传递给下一阶段。


光栅化阶段

这一阶段将会使用几何阶段传递的数据来产生屏幕上的像素,并渲染出最终的图像。

这一阶段也是在GPU上进行,光栅化的任务 主要是决定每个渲染图元中的哪些像素应该被绘制再屏幕上。

他需要对上一个阶段得到的 逐顶点数据 (例如纹理坐标、顶点颜色等)进行插值,然后再进行逐像素处理。

和上一阶段类似,光栅化阶段也可以分成更小的流水线阶段


注意:

我们需要把上面的3个流水线阶段和GPU流水线阶段区分开来。这里的流水线均是概念流水线,是我们为了给一个渲染流程进行基本的功能划分而提出的。


来源作者:《UnityShader入门精要》冯乐乐