[从零开始的SoftRenderer]3. 渲染管线
GPU在接受了CPU的指令和数据后,所做的一系列流水线作业,被称作渲染管线。
GPU渲染管线
上图就是GPU渲染管线的图示。图中绿色表示完全可编程,黄色表示可配置,蓝色表示完全固定。下面介绍下一些主要的渲染阶段:
- 顶点着色器: 完全可编程,主要做的是我们在本系列第二章中所讲的坐标变换的过程,所以将输入的顶点乘以MVP矩阵输出,就是一个最简单的顶点着色器。除此之外,这一阶段还可以对一些顶点的属性(法线、纹理等等)进行处理,交给后面的阶段去用。
- 裁剪: 在NDC空间进行裁剪,被截取的三角形会在边界处生成新的顶点。
- 屏幕映射: 将顶点坐标映射到屏幕上,即进行视口变换。
- 三角形设置: 之前所处理的都是顶点,这里则会计算三角形的网格表示数据,以为后面的阶段做准备。
- 三角形遍历: 这里则是本系列第一章讲的内容,即遍历三角形可能覆盖的像素,根据重心坐标确定像素是否在三角形内部,然后则将顶点的各种属性进行插值得到该像素(片元)的属性,交给后面的片元着色器去处理。
- 片元着色器: 根据对三角形各顶点插值得到的属性,决定此片元需要绘制什么颜色。一般各种着色计算都是在此处。
- 逐片元操作: 根据配置对片元进行一各种操作,如:深度测试、模板测试、混合等等。
除此之外,还有可选的曲面细分着色器和几何着色器。曲面细分着色器可以将三角形分割成更小的三角形,以提升模型的精度。几何着色器则可在多边形网格处理并增删顶点。不过这两个我目前都还没有实践过,理解不够,以后再细讲吧。