什么是渲染管线
渲染管线(渲染流水线)是将三维场景模型转换到屏幕像素空间输出的过程。图形渲染管线主要包括两个功能:一是将物体3D坐标转变为屏幕空间2D坐标,二是为屏幕每个像素点进行着色。
渲染管线的流程
渲染管线的一般流程如下图所示。分别是:顶点数据的输入、顶点着色器、曲面细分过程、几何着色器、图元组装、裁剪剔除、光栅化、片段着色器以及混合测试。
此外还可以抽象为4个阶段
-
应用阶段:由CPU主要负责的阶段,且完全由开发人员掌控。CPU将决定递给GPU什么样的数据(目标场景的灯光、模型),有时候还会对这些数据进行处理(将摄像机不可见的元素被**剔除(culling)**出去),并且告诉GPU这些数据的渲染状态(譬如纹理、材质、着色器等)。
这一阶段最重要的输出是渲染所需的几何信息,即渲染图元(通俗来讲可以是点、线、面等)
-
几何阶段:负责大部分多边形操作和顶点操作,将三维空间的数据转换为二维空间的数据。
-
光栅化阶段:决定每个渲染图元中哪些像素应该被绘制在屏幕上,它需要对上一阶段得到的逐顶点数据进行插值
-
像素处理阶段:给每一个像素正确配色,最后绘制出整幅图像
应用程序阶段在CPU端完成,后面的所有阶段都是在GPU端完成(所以又称GPU渲染管线)
特点
渲染管线的一个特点就是每个阶段都会把前一个阶段的输出作为该阶段的输入。
例如,片段着色器会将光栅化后的片段(以及片段的数据块)作为输入进行光照计算。除了图元组装和光栅化几个阶段是由硬件自动完成之外,管线的其他阶段管线都是可编程/可配置的。
各个阶段的功能
应用阶段
渲染管线的起点是CPU,CPU与GPU的通信即上文的应用阶段
(1)把数据加载到显存:将数据加载到显存中能使GPU更快的访问这些数据,当把数据加载到显存后,便可以释放了数据,但一些数据仍需留在内存中,如CPU需要网格数据进行碰撞检测。
(2)设置渲染状态:渲染状态的