Skip to content

图形管道

这里讨论一个简化的图形管道,不考虑动画和全局光照(如:阴影和辐射度)。此外管道中的数据流顺序也不是固定,为了优化可能会调整任务的提交顺序。

而且不详细探讨CPU和渲染硬件间的任务负担分配,但是正确组织渲染任务,以求达到最大的并行效果对高效渲染是至关重要的。

基本流程

  • 建立场景

在进行渲染之前,需要设置场景中的参数,例如摄像机位置、选择进行渲染的起点--视点、渲染的输出--视图,另外还需要设置光照、雾化、z-缓存

  • 可见行检测

设置好摄像机之后,就必须检查场景中哪些物体是可见的,不浪费时间去渲染不可见的物体

  • 设置物体级的渲染状态

对于可见的物体,需要设置它的渲染状态,例如:纹理、材质

  • 几何体的生成和提交

通过API,将几何体(通常是各种形式的三角形或独立的三角形,例如索引三角网格与三角带)提交到渲染硬件中渲染,这里可能应用LOD或者渐进式生成几何体

  • 变换和光照

渲染API得到几何体的数据之后,由模型空间向摄像机空间的顶点坐标转换以及顶点光照计算即开始

  • 背面剔除和裁剪

背对摄像机的三角形被去除(又称为“背部剔除”),在视锥体外部的部分也会被去除(又称为“裁剪”)--这可能会产生多边形

  • 投影到屏幕空间

将3D裁剪空间中的几何体投影到2D屏幕空间里

  • 光栅化

转换到屏幕空间之后就进入了光栅化阶段。光栅化指计算几何体哪些像素需要绘制的过程,并为接下来的像素着色阶段提供合理的插值参数(如:光照和纹理映射坐标)

  • 像素着色

在管道的最后阶段,计算三角形的色彩。接着把这些颜色写至屏幕,这时可能需要alpha混合z-缓存

伪代码

实现方式不同,渲染管道也不同,以下是上述流程的伪代码

img.png

img.png

参考

【1】细节层次