图形渲染流水线总流程
应用阶段
1.准备基本场景数据
包括场景物体数据(物体的缩放、旋转、位置、uv贴图、顶点位置等),摄像机数据,光源及阴影数据等等
2.粗粒度剔除
包括视锥体剔除和遮挡剔除
-视锥体剔除,剔除在视锥体外的物体
-遮挡剔除,如K-D树(轴对称的BSP树),八叉树,BVH树/AABB树算法等
3.进行渲染设置
-绘制设置——设置着色器,合批方式
-设置渲染模式——前向渲染/延迟渲染
-设置绘制物体的顺序——z深度/材质RenderQueue
-设置渲染目标——输出到FrameBuffer/RenderTexure
几何阶段
1.顶点着色器——顶点的空间变化和着色
2.曲面细分着色器(可选)——细分图元
3.几何着色器(可选)——对细分的图元着色
4.顶点裁剪——剔除视锥体外的物体、也可以设置剔除物体的正面或背面
5.屏幕映射——将图元转换到屏幕坐标系中得到归一化的屏幕设备坐标(NDC)
光栅化阶段
1.三角形设置——得到三角形网格的边界信息
2.三角形遍历——检查屏幕上每个像素是否被三角形覆盖,并使用三角形三个顶点的信息对三角形内部进行颜色插值
3.片元着色器——对每个片元进行着色
逐片元操作(属于光栅化阶段)
1.透明度测试,依据每个片元的alpha值来确定是否渲染此片元
2.模板测试,对每个片元使用一个自定义的值来确定是否渲染此片元
3.深度测试,依据每个片元的深度值来确定是否渲染此片元
4.颜色混合,例如不透明物体被透明物体遮挡,则需要混合两者的颜色
后处理
泛光,FXAA抗锯齿,景深,边缘检测,径向模糊等后处理效果