在计算机体系结构中,管线定义为数据序列并用于处理元素。其中,某一元素的输出内容将用作下一阶段的输入内容。
相应地,GPU渲染管线接收3D场景的表达内容,并将作为输入数据。随后,将计算2D多边形的像素颜色,并输出场景图像。
渲染管线主要由以下各阶段组成:
顶点处理阶段,光栅化阶段,片元处理阶段和输出合并操作
顶点处理阶段:针对存储于顶点缓冲区内的各个输入顶点执行各种相关操作,如转换操作
光栅化阶段:将根据顶点对多边形加以整合,并将多个多边形转换成片元集合
片元定义为一组数据,并对颜色缓冲区进行更新(颜色缓冲区定义为某一内存空间,该空间存储的是在屏幕上显示的像素)
片元处理阶段:主要是对各个片元进行操作(如纹理操作),进而通过各种操作确定片元的颜色值。
输出合并阶段:片元与颜色缓冲区中的像素将进行比较或合并操作,进而更新像素的颜色值。
其中,顶点和片元处理阶段均呈现为可编程状态(处于该阶段的相关程序称为顶点程序和片元程序)。当执行此类程序时,用户可针对顶点执行任何转换操作,并可通过各种方式确定片元的颜色值
世界坐标:
视见体:
考虑到相机有限的视域范围,通常无法捕捉到场景中的全部对象。
场景中的可见区域称为视见体,且通过如下4个参数加以定义,即fovy、aspect、n和f。从形状上来看,可将视见体视为一个无限的金字塔对象,其顶点位于原点位置,并采用-z轴作为资深轴向。
fovy:定义了垂直方向上的可见区域;
aspect:表示视见体的宽高比,即视见体的宽度值除以其高度值。
n:定义了原点与近剪裁面之间的距离
f:定于了原点与远剪裁面之间的距离
注:
由fovy和aspect定义的金字塔对象则通过平面z = -n和z=-f进行截取,截取后的金字塔对象被称为视锥体
近剪裁面和远剪裁面并不符合真实相机或人类视觉系统原理,其存在原因仅出于计算效率考量。
在较为典型的视锥体剔除实现过程中,将在预处理阶段计算多边形网格的包围盒或包围球,并于随后在CPU程序中执行包围体——视锥体测试。如果包围体在视锥体的外部,则可丢弃多边形网格且不会进入渲染管线,视锥体的操作将节省GPU的计算量和减少CPU的开销,当多边形网格包含大量的顶点数据时表现的尤为明显。
注:
实际的剪裁操作并未发生于相机空间。在顶点处理阶段,投影转换可视为最后一步操作,该操作将相机空间内的对象转换至剪裁空间内。随后剪裁操作将在剪裁空间内完成。
投影矩阵:
投影转换并不生成2D图像,仅使得场景中的3D对象产生变形效果。