图形渲染管线
应用程序阶段
该阶段完全可控,一般使用cpu进行计算。
一些应用程序阶段的计算任务可以使用compute shader转移到gpu进行计算。
该阶段最重要的任务就是将渲染图元送到几何处理阶段。
该阶段基于软件,不像其他阶段一样被分为多个小阶段。
为了提升效率,该阶段会采用多个cup核心进行并行运算。
该阶段一般会处理碰撞检测,IO,裁剪算法等其他阶段不好处理的过程。
几何处理阶段
该阶段主要处理大部分的逐顶点处理,逐三角形处理。
顶点着色
该阶段主要完成以下两个任务:
- 计算顶点的位置
- 输出程序员想输出的任何顶点数据(法线、纹理坐标。。)
该阶段的着色是计算每个顶点的颜色并储存在顶点上,然后通过插值将颜色扩散到整个三角形上。但是现在着色已经不是该阶段的主要任务了。
该阶段的主要任务还是设置输出有关于顶点的相关数据。
投影
主要分为正交投影和透视投影。
裁剪
在裁剪空间将不必要的图元裁剪掉。这要求顶点着色阶段必须将顶点变换到裁剪空间并将其输出,否则裁剪将无法被正常执行。
裁剪会将一部分在视锥体范围内的图元进行裁剪。
裁剪会在投影之后进行,这时场景中的物体已经被投影到立方体中了,这样可以保证无论什么投影,裁剪会遇到的问题都是一样的。
裁剪过程使用齐次坐标,主要是为了保证在透视投影下能够正确的在图元间进行插值。
Screen Mapping
该阶段接受裁剪后的图元,将其x轴和y轴转化为屏幕坐标。将其z轴缩放至[0,1]
小结
整个阶段结束后,z值将不会被储存在输出的产生的图片上,而是被保存在z-buffer上,这说明模型从3维被变成了2维。
可选阶段
诸如曲面细分、几何处理阶段。这些阶段不是所有的gpu都包含。对其进行编程也比较少见。
曲面细分着色器
曲面细分着色器可以根据物体的深度将三角形细分,越近的物体使用越多的三角形进行绘制。
几何着色器
几何着色器接受各种各样的图元并能够产生新的顶点,比如将一个顶点扩展为一个正方形(两个三角形)。经典的应用是采用几何着色器处理粒子。
stream output
这个阶段可以选择将我们产生的图元输出到一个数组之中,供cpu或者gpu使用。
参考资料
RTR4