基于 Kaolin 的 SDS + SDF 学习路径(偏工程)

目标:从 0 到 1,真正跑通并理解

Camera Sampling
→ Ray Generation
→ SDF Evaluation
→ Ray Marching / Surface Hit
→ Differentiable Rendering
→ SDS Loss
→ Backprop 更新 SDF

核心框架选型:Kaolin + PyTorch + 外部 Diffusion


阶段 0:建立完整心智模型(不要跳过)

目标

在动手前,脑中必须存在完整梯度闭环,而不是“模块拼接感”。

必须掌握

阶段产出: 能在纸上画出:SDF → image → SDS → ∂θ 的完整路径

阶段 1:Camera 与 Ray Sampling(与 AI 无关)

目标

自己实现一套相机采样 + 像素射线生成代码。

必须掌握

工程要求

Input : camera pose + intrinsics
Output: rays_o (N,3), rays_d (N,3)
阶段产出: 一个独立的 camera.py,不依赖 Kaolin

阶段 2:SDF 网络与几何约束

目标

构建可被优化的连续 SDF 表示

必须掌握

工程要点

loss_eikonal = (||∇sdf|| - 1)^2
阶段产出: 一个稳定输出 signed distance 的 SDF 网络

阶段 3:基于 Kaolin 的 Ray Marching

目标

打通Ray → SDF → Surface Hit → Gradient

Kaolin 使用点

关键理解

渲染结果是否好看不重要,梯度是否稳定才重要。

阶段产出: 能稳定返回 hit points + normals,并可反传

阶段 4:Differentiable Rendering(极简)

目标

生成可送入 Diffusion 的 image tensor。

推荐最小渲染

注意

SDS 不需要 photorealism,只需要语义可识别结构

阶段产出: render(points, normals) → image

阶段 5:SDS Loss 接入(关键阶段)

目标

让 2D 扩散模型的 score 成为 3D SDF 的优化信号。

必须掌握

梯度路径

SDS loss
→ image
→ hit points
→ sdf(x)
→ SDF parameters
阶段产出: loss.backward() 后,SDF 参数发生有意义变化

阶段 6:稳定性与工程化

必须处理的问题

工程手段

阶段产出: 一个可重复生成、可 debug 的 SDS + SDF 系统

最终能力检验

如果三者答案都是“是”,说明你已经真正掌握这条路径。