从渲染到逆向图形学
传统渲染的方向很明确:给定几何、相机、光照和材质,计算一张图像。图像重建要走相反方向:给定图像,估计哪些三维参数能渲染出相近结果。这类问题通常归入逆向图形学。
一张图混合了多种原因
像素变暗,可能是表面朝向改变,也可能是光照减弱、材质更粗糙或存在遮挡。轮廓向外移动,可能来自身体变宽、服装变厚、相机焦距改变或角色离相机更近。
如果所有参数同时自由变化,系统很容易用错误原因解释图像。稳定的重建通常需要分阶段估计,并给不同变量加入合理约束。
可微渲染做了什么
普通渲染器可以生成图像,但不一定能告诉优化器“某个顶点往哪里移动会减少像素误差”。可微渲染器对渲染过程建立可求导关系,使图像损失能够反向传到顶点、纹理、相机或光照参数。
一个简化循环包括:
- 用当前三维参数渲染图像;
- 比较渲染图与目标图的轮廓、关键点、颜色或特征;
- 计算损失对参数的梯度;
- 更新参数并重新渲染;
- 直到误差不再明显下降或达到停止条件。
损失函数决定系统在意什么
只有像素颜色损失时,系统可能牺牲几何来拟合光照。加入轮廓损失可以约束外形,关键点损失可以约束关节位置,法线与平滑项可以减少表面噪声,多视图一致性则避免每个视角各自成立。
人物资产还需要额外约束:身体不能穿过衣物,左右肢体不能交换,关节附近要允许合理形变,硬质护甲不应像软布一样弯曲。这些条件无法只从像素差异中得到。
可微不等于答案唯一
可微渲染提供了优化路径,没有消除单视图歧义。优化器只会在给定参数化、损失和初值下寻找结果。错误的相机、过强的平滑约束或不合适的身体先验,都可能让数值误差下降而资产质量变差。
继续阅读
- PyTorch3D 可微渲染文档说明了其模块化渲染器与梯度计算方式。
- NeRF 项目页展示了体渲染如何与位置、方向和颜色场联合优化。
下一节把这些基本机制放回现代图生三维系统,梳理扩散模型、多视图生成与网格重建各自承担的工作。