当GPU从CPU那里得到渲染命令后,就会进行一系列流水线操作,最终把图元渲染到屏幕上。
GPU渲染流水线接收顶点数据作为输入,这些数据是由应用阶段加载到显存中,再由drawcall指定的,随后传递给顶点着色器。
渲染流水线步骤:
- 顶点数据作为输入,
进入几何阶段
- vertexshader顶点着色器,通常用于实现顶点的的空间变换,顶点着色。
- tessellation shader曲面细分着色器,可选,细分图元
- geometry shader几何着色器,可选,被用于执行逐图元着色
- clipping裁剪,这一阶段将那些不在摄像机视野内的顶点裁剪掉,
- screen mapping屏幕映射 ,不可配着或编程,把每个图元的坐标转换到屏幕坐标系中去。
光栅化阶段
- 三角形设置固定函数阶段
- 三角形遍历固定函数阶段
- fragment shader片元着色器,实现逐片元操作
-
per—fragment逐片元操作,例如修改颜色,深度缓冲,混合。
最终输出到屏幕图像。
顶点着色器的输入来自于CPU,处理的单位是顶点,输入进来的每个顶点都会调用一次顶点着色器,主要完成坐标的变换把顶点坐标从模型空间转换到齐次裁剪空间和逐顶点光照。
裁剪:由于场景很大,摄像机视野范围不会覆盖到所有场景物体,那些不在摄像机视野范围内的就需要被裁剪掉,
屏幕映射:每个图元坐标转换到屏幕坐标系下
三角形设置:光栅化第一个阶段,上一阶段输出都是三角网格顶点,要得到整个三角网格覆盖情况。计算每条边上的像素坐标,为下一阶段做准备,
三角形遍历:检查每个像素是否被一个三角网格所覆盖,所过覆盖的话产生一个片元。
片元着色器:前面光栅化阶段实际上并不会影响屏幕上的像素颜色值,而是产生一系列数据,真正对象素产生影响的是下一个阶段。
逐片元:决定片元的可见性,涉及深度测试,模板测试等
如果一个片元通过所有测试就需要把该片元的颜色值和已经存在缓冲区的颜色进行合并混合。
点击关注我的微博,给大家带来欢乐