图形渲染管线
大体上分,可以分为:应用阶段、几何处理阶段、光栅化阶段。在知乎上偷了一个图:
应用阶段
CPU传入数据到显存,设置参数,调用DrawCall通知显卡绘制图像。
几何处理阶段
对顶点数据的几何处理,例如位移、细分网格等。顶点着色器、曲面细分着色器、几何着色器在这个阶段发挥作用。
在这个阶段,会进行各种变换:MVP变换、裁剪、透视除法、视口变换,转换到屏幕空间上,以便光栅化。
光栅化阶段
首先是图元装配,将一个个顶点组装为三角形。可能是每3个顶点一组一个三角形,也可能是triangle-strip那样组织三角形。然后是遍历三角形,插值属性,调用片元着色器着色。这里的片元不一定是像素,像MSAA一个像素可能会渲染4个片元求平均。插值也要进行透视矫正,直接按照屏幕空间坐标插值会出来错误的效果。
在这个阶段,会可能会进行:深度测试,混合(或透明度测试)。以便实现遮挡或半透明效果。如果深度测试在片元着色器之前进行,称为early-z,可以减少片元着色器的大开销(因为深度值可以提前插值出来,不依赖片元着色器)。