图形绘制管线描述 GPU 渲染流程,即“给定视点、三维物体、光源、照明模 式,和纹理等元素,如何绘制一幅二维图像”。
在《实时计算机图形学》一书中,将图形绘制管线分为三个主要阶段:应用程序阶段(CPU,内存)、几何阶段(GPU)、光栅阶段(为像素正确配色)。
输入到计算机中的是一系列三维坐标点,但是我们最终需 要看到的是,从视点出发观察到的特定点(这句话可以这样理解,三维坐标点, 要使之显示在二维的屏幕上)。
从视点坐标到屏幕坐标
因为在不规则的体( viewing frustum)中进行裁剪并非易事,所以经过图形学前辈们的 精心分析,裁剪被安排到一个单位立方体中进行,该立方体的对角顶点分别是(-1,-1,-1)和(1,1,1),通常称这个单位立方体为规范立方体( Canonical view volume,CVV)(实时计算机图形学第 9 页)
从视点坐标空间到屏幕坐标空间 ( screen coordinate space)事实上是由三步组成:
1. 用透视变换矩阵把顶点从视锥体中变换到裁剪空间的 CVV 中;
2. 在 CVV 进行图元裁剪;
3. 屏幕映射:将经过前述过程得到的坐标映射到屏幕坐标系上。
为了减少需要绘制的顶点个数, 而识别指定区域内或区域外的图形部分的算法都称之为裁减。裁减算法主要包括:视域剔除( View Frustum Culling)、背面剔除 ( Back-Face Culling)、遮挡剔除( Occlusing Culling)和视口裁减等。
处理三角形的过程被称为 Triangle Setup。到目前位置,我们得到了一堆在屏幕坐标上的三角面片,这些面片是用于做光栅化的( Rasterizing)。
光栅化
Pixel operation 又称为 Raster Operation,是在更新帧缓存之前,执行最后一系列针对每个片段的操作,其目的是:计算出每个像素的颜色值。在这个阶段,被遮挡面通过一个被称为深度测试的过程而消除,这其中包含了很多种计算颜色的方法以及技术。 Pixel operation 包含哪些事情呢?
1: 消除遮挡面
2: Texture operation,纹理操作,也就是根据像素的纹理坐标,查询对应的纹理值;
3: Blending,混色,根据目前已经画好的颜色,与正在计算的颜色的透明度( Alpha), 混合为两种颜色,作为新的颜色输出;
4: Filtering,将正在算的颜色经过某种 Filtering(滤波或者滤镜)后输出。 可以理解为:经过一种数学运算后变成新的颜色值。
——《GPU 编程与CG 语言之阳春白雪下里巴人》
总结:
- 顶点数据通过GPU“几何阶段”的坐标变换与裁剪,最后获得屏幕上的三角面片(3D物体的几何信息);
- 光栅化利用“几何阶段”得到的三角面片作为输入,对屏幕上的像素正确配色
- 渲染管线的目的是为了在2D屏幕上通过最少的顶点和像素填充(裁剪实现)来达到显示图形的效果