neus 公式推导步骤及示意图解析
—来自Deepseek,仅做记录
公式推导步骤
已知条件
-
SDF函数:
f(p(t))f(\mathbf{p}(t))f(p(t))
SDF(Signed Distance Function)表示点 p(t)\mathbf{p}(t)p(t) 到表面的距离,正值为外部,负值为内部。 -
Sigmoid函数:
Φs(x)=11+e−sx\Phi_s(x) = \frac{1}{1 + e^{-sx}}Φs(x)=1+e−sx1
Sigmoid函数将SDF值映射到[0, 1]区间,用于表示表面的概率分布。 -
逻辑密度函数(Sigmoid导数):
ϕs(x)=dΦsdx=se−sx(1+e−sx)2\phi_s(x) = \frac{d\Phi_s}{dx} = \frac{se^{-sx}}{(1 + e^{-sx})^2}ϕs(x)=dxdΦs=(1+e−sx)2se−sx -
权重函数要求:
无偏(峰值在表面交点)、遮挡感知(近处权重更高)。
步骤1:理想情况(单一平面表面)
假设光线穿过一个平面表面,SDF为:
f(p(t))=−∣cosθ∣(t−t∗)f(\mathbf{p}(t)) = -|\cos\theta|(t - t^*)f(p(t))=−∣cosθ∣(t−t∗)
其中 t∗t^*t∗ 是交点位置,θ\thetaθ 是视线方向与表面法向量的夹角。
此时权重函数为:
w(t)=∣cosθ∣⋅ϕs(f(p(t)))
w(t) = |\cos\theta| \cdot \phi_s(f(\mathbf{p}(t)))
w(t)=∣cosθ∣⋅ϕs(f(p(t)))
步骤2:体积渲染框架
体积渲染中,权重函数定义为:
w(t)=T(t)ρ(t),T(t)=exp(−∫0tρ(u)du)
w(t) = T(t) \rho(t), \quad T(t) = \exp\left(-\int_0^t \rho(u) du\right)
w(t)=T(t)ρ(t),T(t)=exp(−∫0tρ(u)du)
将步骤1的 w(t)w(t)w(t) 代入:
T(t)ρ(t)=∣cosθ∣⋅ϕs(f(p(t)))
T(t)\rho(t) = |\cos\theta| \cdot \phi_s(f(\mathbf{p}(t)))
T(t)ρ(t)=∣cosθ∣⋅ϕs(f(p(t)))
步骤3:联立方程求 ρ(t)\rho(t)ρ(t)
对 T(t)T(t)T(t) 求导:
dTdt=−T(t)ρ(t)
\frac{dT}{dt} = -T(t)\rho(t)
dtdT=−T(t)ρ(t)
联立方程:
−dTdt=∣cosθ∣⋅ϕs(f(p(t)))
-\frac{dT}{dt} = |\cos\theta| \cdot \phi_s(f(\mathbf{p}(t)))
−dtdT=∣cosθ∣⋅ϕs(f(p(t)))
积分后得到:
T(t)=Φs(f(p(t)))
T(t) = \Phi_s(f(\mathbf{p}(t)))
T(t)=Φs(f(p(t)))
代入 T(t)=exp(−∫0tρ(u)du)T(t) = \exp\left(-\int_0^t \rho(u) du\right)T(t)=exp(−∫0tρ(u)du),取对数并求导:
ρ(t)=−dΦsdtΦs(f(p(t)))
\rho(t) = \frac{-\frac{d\Phi_s}{dt}}{\Phi_s(f(\mathbf{p}(t)))}
ρ(t)=Φs(f(p(t)))−dtdΦs
步骤4:一般情况(多表面交点)
当存在多个表面时,导数 dΦsdt\frac{d\Phi_s}{dt}dtdΦs 可能为负。为确保 ρ(t)≥0\rho(t) \geq 0ρ(t)≥0,添加最大值函数:
ρ(t)=max(−dΦsdtΦs(f(p(t))),0)
\rho(t) = \max\left( \frac{-\frac{d\Phi_s}{dt}}{\Phi_s(f(\mathbf{p}(t)))}, 0 \right)
ρ(t)=max(Φs(f(p(t)))−dtdΦs,0)
示意图说明
-
SDF沿光线变化:
SDF值在表面交点 t∗t^*t∗ 处为0,向外递增,向内递减。 -
逻辑密度 ϕs(f)\phi_s(f)ϕs(f):
峰值出现在 $ f=0 $(表面交点),两侧迅速衰减。 -
导数 dΦsdt\frac{d\Phi_s}{dt}dtdΦs:
在 t∗t^*t∗ 左侧(外部)为负,右侧(内部)为正。取负后得到正值区域。 -
最终 ρ(t)\rho(t)ρ(t):
通过截断负值,确保仅在表面附近有非零密度,实现无偏重建。
关键点总结
-
无偏性:
ρ(t)\rho(t)ρ(t) 的峰值严格对应表面交点 t∗t^*t∗(SDF=0)。 -
遮挡感知:
近处表面权重更高,避免颜色混合。 -
数学推导:
通过联立体积渲染方程和SDF特性,导出密度函数形式。
2.为什么有负号??
2.1负号在体积渲染中的核心作用
关键结论
负号通过校正SDF导数符号,确保不透明密度函数 ρ(t)\rho(t)ρ(t) 的非负性,从而满足体积渲染的物理约束与数学无偏性要求。
数学推导与物理意义
负号的来源与作用
1. SDF导数的符号特性
-
SDF行为分析:
- 表面外(正区域):f>0f > 0f>0,SDF值随光线深入逐渐减小
- 表面内(负区域):f<0f < 0f<0,SDF值继续保持减小
-
导数方向性:
dfdt=∇f⋅v<0(假设视线方向v与法向∇f夹角<90∘) \frac{df}{dt} = \nabla f \cdot \mathbf{v} < 0 \quad (\text{假设视线方向$\mathbf{v}$与法向$\nabla f$夹角}<90^\circ) dtdf=∇f⋅v<0(假设视线方向v与法向∇f夹角<90∘) -
逻辑密度导数推导:
dΦsdt=ϕs(f)⋅dfdt⏟<0<0 \frac{d\Phi_s}{dt} = \phi_s(f) \cdot \underbrace{\frac{df}{dt}}_{<0} < 0 dtdΦs=ϕs(f)⋅<0dtdf<0
(其中Φs(x)\Phi_s(x)Φs(x)为逻辑斯蒂CDF,ϕs(f)\phi_s(f)ϕs(f)为其PDF)
2. 确保非负密度
-
物理约束:
ρ(t)≥0(不透明密度必须非负) \rho(t) \geq 0 \quad (\text{不透明密度必须非负}) ρ(t)≥0(不透明密度必须非负) -
符号校正公式:
ρ(t)=max(−dΦsdtΦs(f(p(t)))⏟负号翻转操作,0) \rho(t) = \max\left( \underbrace{ \frac{-\frac{d\Phi_s}{dt}}{\Phi_s(f(\mathbf{p}(t)))} }_{\text{负号翻转操作}}, 0 \right) ρ(t)=max负号翻转操作Φs(f(p(t)))−dtdΦs,0
关键作用解析
flowchart LR
A[原始导数 dΦ/dt < 0] > B{负号操作 -dΦ/dt > 0}
B --> C[非负密度 ρ(t) ≥ 0]
C --> D[正确表面重建]
1. SDF导数特性分析
区域 | SDF符号 | 导数方向 dfdt\frac{df}{dt}dtdf | 物理意义 |
---|---|---|---|
表面外侧 | f>0f>0f>0 | ↓\downarrow↓ (负值) | 光线逐渐接近物体表面 |
表面交点 | f=0f=0f=0 | ↓\downarrow↓ (负值) | 光线与表面相交临界点 |
表面内侧 | f<0f<0f<0 | ↓\downarrow↓ (负值) | 光线穿透物体内部 |
2. 密度函数构造公式
ρ(t)=max(−dΦsdtΦs(f(p(t)))⏟符号校正项, 0) \rho(t) = \max\left( \underbrace{ \frac{-\frac{d\Phi_s}{dt}}{\Phi_s(f(\mathbf{p}(t)))} }_{\text{符号校正项}} ,\ 0 \right) ρ(t)=max符号校正项Φs(f(p(t)))−dtdΦs, 0
公式解析:
- dΦsdt=ϕs(f)⋅dfdt\frac{d\Phi_s}{dt} = \phi_s(f) \cdot \frac{df}{dt}dtdΦs=ϕs(f)⋅dtdf 原始导数为负
- 负号操作 −dΦsdt- \frac{d\Phi_s}{dt}−dtdΦs 实现符号翻转
- max(⋅,0)\max(\cdot, 0)max(⋅,0) 截断保证非负性,
- 通过取最大值 max(⋅,0),仅在 t *左侧(外部)保留正密度,右侧(内部)截断为0。