<aside>
💡
基本概念
- 光栅化:将3d模型的图元(如线段、三角形)映射到2d像素网格的过程。确定哪些像素对应于场景中的几何对象,并对这些像素进行着色,从而生成图像。
</aside>
首先了解我们要解决的问题是什么:
我们从一个比较传统的OpenGL渲染管线出发,思考一下到底是其中的哪些步骤 不可微 。

- 顶点着色器:对顶点进行各类操作,包括平移、缩放、旋转和投影,本质上都是矩阵乘法,均是线性操作,所以天然可微。
- 图元装配:把顶点装配成不同的几何结构(三角形、线段等)
- 几何着色器:可选阶段,一般用于产生新图元或做LOD操作。
- 光栅化:通过将3d模型的图元(如线段、三角形)映射到2d像素网格,对每个像素的采样和插值来确定像素的颜色。由于这是一个离散的过程,光栅化步骤不是在连续的参数空间上操作,因此 不具备可微性 。
- 片段着色器:首先找到片段所在的三角形并计算片段中心的重心坐标, 通过重心插值把顶点的属性赋给每个片段。对许多常用模型来说都是可微的,但也可能会包含不可微的部分。
- 测试与混合操作,包括深度测试、模板测试和颜色混合等。这些操作都是非线性操作,求导很困难,因此通常被认为是 不可微 的。
可以发现只有4、6中包含有必定不可微的部分。基于光栅化的可微渲染也是解决这两个问题为主