2.1 综述
2.1.2 什么是渲染流水线(概念流水线)
ü 计算机的渲染流水线:
计算机的图像渲染工作流水线和工厂的运作的流水线是有一定的相似性的。渲染流水线的工作任务在于从一个3D的场景出发,生成(或者说渲染)我们屏幕上看到的一张2D的图像。计算机从一系列的Mesh网格数据(3D场景中的模型展开后一般包括纹理贴图和在建模软件中以线框形式显示的模型文件,而这个文件就是模型的网格数据,就是我们所说的Mesh)、纹理等信息出发,把这些信息转换为一张我们人眼可以看到的图像,而这个工作通常是由计算机的CPU和GPU共同完成的。
ü 渲染的流程:
一个渲染流程一般可以大致地分为3个概念性的阶段:应用阶段、几何阶段、光栅化阶段。而每个阶段本身通常也是一个流水线系统。
ü 应用阶段(在CPU上进行):
该阶段是由我们的应用主导的,开发者在该阶段拥有绝对的控制权。在该阶段中,开发者的任务有3个:1、3D场景的组建:我们需要准备好数据来组建场景,例如摄像机的位置、场景中包含了哪些场景、使用了那些光源等等。2、粗粒度剔除:为了提高渲染的性能,我们需要进行一个粗粒度剔除(culling)工作,将不可见的物体从场景中移除,以把那些不可见的物体剔除出去,这样就不需要在移交给集合阶段进行处理。3、设置模型的渲染状态:这些渲染状态包括但不限于模型使用的材质(漫反射颜色、高光反射颜色)、使用的纹理、使用的Shader等。在应用阶段中输出渲染所需的几何信息,即渲染图元。通俗的来讲,这些渲染图元将会被传递给几何阶段。
ü 几何阶段(在GPU上进行):
该阶段的重要任务就是对上一阶段传过来的渲染图元进行逐顶点,逐多边形操作,将顶点坐标转换为屏幕空间中的坐标,再交给光栅器(光栅化阶段)进行处理。通过对输入渲染图元进行多步处理以后,这一阶段将会输出屏幕空间的二维顶点坐标、每个顶点对应的深度值、着色等相关信息,并传给光栅化阶段。
ü 光栅化阶段(在GPU上进行):
该阶段将会使用上个阶段传递的数据来产生屏幕上的像素,并渲染出最终的图像。光栅化的主要任务是决定每个渲染图元中的哪些像素应当被绘制在屏幕上。它对上一个阶段得到的逐顶点数据(例如纹理坐标、顶点颜色等)进行插值,然后再进行逐像素处理。
2.2 CPU和GPU之间的通信:CPU流水线,概念流水线中的应用阶段
渲染流水线的起点是CPU,即应用阶段。应用阶段大致可以分为下面3个阶段:
1) 把数据加载到显存中;
2) 设置渲染状态;
3) 调用Draw Call(会有更详细的解释);