什么是渲染管线?
GPU的渲染管线,我们可以把它理解为一个流程,就是我们告诉GPU一堆数据,最后得出来一副二维图像,而这些数据就包括了”视点、三维物体、光源、照明模型、纹理”等元素。
图形渲染管线主要包括两个功能:一是将物体3D坐标转变为屏幕空间2D坐标,二是为屏幕每个像素点进行着色。渲染管线的一般流程如下图所示。分别是:顶点数据的输入、顶点着色器、曲面细分过程、几何着色器、图元组装、裁剪剔除、光栅化、片段着色器以及混合测试。
【着色器分两个部分,一个顶点,一个片断,中间就是光册化.也就是先顶点处理,计算出每个顶点的坐标,颜色,纹理坐标等等,也可以是任何其它千奇百怪的东西(寿命,温度,身高,婚否,饭量………). 然后经过光册化,给他们差值.最后片断阶段,你会获得每个像素的坐标,颜色,纹理,寿命,温度……】
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
渲染管线的一个特点就是每个阶段都会把前一个阶段的输出作为该阶段的输入。除了图元组装和光栅化几个阶段是由硬件自动完成之外,管线的其他阶段管线都是可编程/可配置的。其中顶点着色器、曲面细分相关着色器、几何着色器和片段着色器是可编程的阶段,而混合测试是可高度配置的阶段。管线的可编程/可配置是渲染管理的另一个特点。因为早期的渲染管线采用的是立即渲染模式(Immediate mode,也就是固定渲染管线),不允许开发人员改变GPU渲染的方式,而核心渲染默认(Core-profile mode)允许开发人员定制化GPU的渲染方式。
渲染管线的工作流程
管线程序段输入=>顶点着色器=>光栅化=>像素着色器=>屏幕颜色
(上一个函数的)输出 传递给=> (下一个函数作为)输入
1. 输入数据
输入的数据包括三角形顶点的位置坐标,根据摄像机确定的观察矩阵和投影矩阵。这些信息将作为将三维的空间坐标映射到二维的屏幕坐标的输入数据进行运算。
2. 顶点处理
主要负责顶点坐标变换、投影以及屏幕映射,该阶段基于GPU进行运算,在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标。简而言之,几何阶段的主要工作就是“变换三维顶点坐标”。WVP矩阵是包含了世界、观察、投影的合矩阵,用于对顶点进行坐标变换,通过它可以将三维的空间坐标映射到二维的屏幕上。
3. 光栅化
光栅化其实是一种将几何图元变为二维图像的过程。该过程包含了两部分的工作。第一部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工作:分配一个颜色值和一个深度值到各个区域。光栅化就是把顶点数据转换为片元的过程。片元中的每一个元素对应于帧缓冲区中的一个像素。
```
通俗点说,你告诉GL我要画条线,然后告诉他线两个端点的坐标是(0,0)和(0,10),那么GL自动脑补出中间10个点的坐标,这个过程就叫光册化,脑补的方法叫线性差值.
复杂点,现在我要画个三角形,给他三个顶点的坐标,它会计算出里面所有像素的坐标.
```
经过光栅化我们的三角形已经变成下图中的样子。其中灰色的方块代表光栅化后产生的像素点
4. 像素处理(片段着色)
在光栅化之后,要对像素进行着色。通过对产生像素的处理,我们的三角形拥有了颜色。
至此我们就成功的画出了一个三角形。