引言
渲染管线的主要功能是在给定一个虚拟相机、三维物体、光源以及其他条件的基础上,生成一个二维的图像。
物体在图像中的位置和形状取决于它们的几何特征、环境特征和相机在环境的位置,而物体的外表则取决于材质属性、光源、纹理和着色方程。
一、渲染管线整体结构
实时渲染管线在大体上可以分为四个主要步骤:
- 应用阶段
- 几何处理阶段
- 光栅化
- 像素处理
每个步骤都包含了若干个子步骤。这里的步骤是功能逻辑上的分割,在实际的实现结构中,有可能会将其中部分步骤合在一起执行。
- 应用步骤是由应用本身来驱动的,因此会在CPU上运行的软件来实现。应用步骤里通常会包括碰撞检测、全局加速算法、动画、物理仿真等等;
- 几何处理阶段用于处理变换、投影,以及其他的几何处理。这个步骤会计算绘制什么、怎样绘制和绘制在哪的问题。该步骤通常运行在GPU上;
- 光栅化用于寻找那些像素在三角形内,并将其作为结果传递到下一步骤;
- 最后是像素处理步骤。该步骤会对每一个像素执行,决定该像素的颜色,同时可能会进行深度测试来决定该像素是否可见,以及颜色混合。
二、 应用阶段
该阶段通常在CPU上运行,所以开发者可以完全控制该阶段。
应用阶段最重要的任务是,在该阶段的末尾,将需要渲染的几何信息被传递给几何处理阶段。
因为是基于软件实现,所以该阶段不会分成各个子阶段,不过可以利用CPU的多核特性来提升性能。
碰撞检测通常在该阶段实现;该阶段也负责接收来自其他来源的输入,如键盘鼠标等;还有加速算法可以在该阶段实现。
三、几何处理
几何处理阶段运行在GPU上,主要负责大部分单三角形和单顶点的操作。
该阶段可以分为四个子阶段:顶点着色、投影、裁剪和屏幕映射。
3.1 顶点着色
顶点着色主要有两个任务:
- 计算顶点位置;
- 评估顶点输出哪些数据,如法线、纹理坐标等。
顶点着色器(vertex shader):通常情况下,对物体的着色操作会对每个顶点的位置和法线应用光照;仅存储顶点的颜色结果。通常用于顶点相关的数据装配,一般不会执行渲染方程。
模型变换(model transform):