【论文精读】NeRF中的数学公式推导

这篇文章用于记录NeRF论文中数学公式的推导过程。
论文里的第一个公式就很硬核,展示了相机射线的期望颜色的计算方法。
5D 神经辐射场将场景表示为空间中任意点的体积密度和定向发射的辐射。文章使用经典体积渲染的原理,来渲染任何穿过场景的光线的颜色。体积密度 σ ( x ) σ(x) σ(x)可以解释为射线终止在位置 x x x 处无穷小粒子的微分概率。而期望的颜色 C ( r ) C(r) C(r)(相机光线 r ( t ) = o + t d r(t) = o + td r(t)=o+td,近处远处界限为 t n t_{n} tn t f t_{f} tf)可以被表示为:
在这里插入图片描述
这个结论来源于1995年Max的一篇文章Optical models for direct volume rendering,是体渲染的开山之作。这篇文章将光线模型分为三类,我们逐个看一看。

光线吸收模型

简单来说就是吸收它们拦截的所有光,却不散射或发射任何光。假设粒子是相同的球体,半径为 r r r,投影面积 A = π r 2 A =πr^{2} A=πr2,设 ρ ρ ρ 为每单位体积的粒子数。这个模型的传递方程是

d I d s = − ρ ( s ) A I ( s ) = − τ ( s ) I ( s ) \frac{dI}{ds} = -\rho(s)AI(s)=-\tau(s)I(s) dsdI=ρ(s)AI(s)=τ(s)I(s)

其中 s s s是沿光流方向的光线的长度, I ( s ) I(s) I(s) 是距离 s s s 处的光强度, ρ \rho ρ是光点密度。 τ ( s ) = ρ ( s ) A \tau(s) = \rho(s)A τ(s)=ρ(s)A 称为消光系数,反映了光被遮挡的速率。整理并且等式两边同时积分:
1 I ( s ) d I d s = − τ ( s ) \frac{1}{I(s)}\frac{dI}{ds}=-\tau(s) I(s)1dsdI=τ(s)
∫ 0 s 1 I ( s ) d I = ∫ 0 s − τ ( t ) d t \displaystyle \int^{s}_{0}{\frac{1}{I(s)}dI} = \displaystyle \int^{s}_{0}{-\tau(t)dt} 0sI(s)1dI=0sτ(t)dt
l n I ( s ) I ( 0 ) = ∫ 0 t − τ ( t ) d t ln\frac{I(s)}{I(0)}= \displaystyle \int^{t}_{0}{-\tau(t)dt} lnI(0)I(s)=0tτ(t)dt

这个微分方程的解是:

I ( s ) = I 0 e x p ( − ∫ 0 s τ ( t ) d t ) I(s)=I_{0}exp(-\displaystyle \int^{s}_{0}{\tau(t)dt}) I(s)=I0exp(0sτ(t)dt)

其中, I 0 I_{0} I0是在 s = 0 s=0 s=0处的强度,而 T ( s ) = e x p ( − ∫ 0 s τ ( t ) d t ) T(s)=exp(-\displaystyle \int^{s}_{0}{\tau(t)dt}) T(s)=exp(0sτ(t)dt)是介于 0 0 0 s s s 之间的介质的透明度。在体渲染中,消光系数 τ \tau τ通常称为不透明度。

光线发射模型

介质还可以通过外部照明的发射或反射来增加光线。
如果粒子是透明的,但以每单位投影面积的强度 C 发光,这个 I ( s ) I(s) I(s)的微分方程为:

d I d s = C ( s ) ρ ( s ) A = C ( s ) τ ( s ) = g ( s ) \frac{dI}{ds} = C(s)\rho(s)A=C(s)\tau(s)=g(s) dsdI=C(s)ρ(s)A=C(s)τ(s)=g(s)

这个 g ( s ) g(s) g(s)被叫做源项。
我们把式子可以变为:

d I = g ( s ) d s dI = g(s)ds dI=g(s)ds

对两边进行积分:

∫ 0 s d I = ∫ 0 s g ( s ) d s \displaystyle \int^{s}_{0}{dI} = \displaystyle \int^{s}_{0}{g(s)ds} 0sdI=0sg(s)ds

这个方程的解是:

I ( s ) = I 0 + ∫ 0 s g ( t ) d t I(s)=I_{0}+\displaystyle \int^{s}_{0}{g(t)dt} I(s)=I0+0sg(t)dt

其中 I 0 I_{0} I0 s = 0 s=0 s=0 处的光强度。

吸收发射模型

实际上,空间中的粒子会遮挡入射光,并添加自己的光。 因此,一个现实的微分方程应该包括源项 g ( s ) g(s) g(s)和衰减项 I ( s ) I(s) I(s) 。我们只需要将前两种模型进行简单的数值加和(微分方程右侧加在一起),就可以得到这个模型的传递方程:

d I d s = g ( s ) − τ ( s ) I ( s ) \frac{dI}{ds} =g(s)-\tau(s)I(s) dsdI=g(s)τ(s)I(s)

我们把 τ ( s ) I ( s ) \tau(s)I(s) τ(s)I(s)移到等式左边,然后都乘上 e x p ( ∫ 0 s τ ( t ) d t ) exp(\displaystyle \int^{s}_{0}{\tau(t)dt}) exp(0sτ(t)dt),得到:

( d I d s + τ ( s ) I ( s ) ) e x p ( ∫ 0 s τ ( t ) d t ) = g ( s ) e x p ( ∫ 0 s τ ( t ) d t ) (\frac{dI}{ds}+\tau(s)I(s))exp(\displaystyle \int^{s}_{0}{\tau(t)dt}) =g(s)exp(\displaystyle \int^{s}_{0}{\tau(t)dt}) (dsdI+τ(s)I(s))exp(0sτ(t)dt)=g(s)exp(0sτ(t)dt)

也可以表示为:

d d s ( I ( s ) e x p ( ∫ 0 s τ ( t ) d t ) ) = g ( s ) e x p ( ∫ 0 s τ ( t ) d t ) \frac{d}{ds}(I(s)exp(\displaystyle \int^{s}_{0}{\tau(t)dt}))=g(s)exp(\displaystyle \int^{s}_{0}{\tau(t)dt}) dsd(I(s)exp(0sτ(t)dt))=g(s)exp(0sτ(t)dt)

从volume边缘的 s = 0 s = 0 s=0 积分到眼睛的 s = D s = D s=D,我们得到:

I ( D ) e x p ( ∫ 0 D τ ( t ) d t ) − I 0 = ∫ 0 D ( g ( s ) e x p ( ∫ 0 s τ ( t ) d t ) ) d s I(D)exp(\displaystyle \int^{D}_{0}{\tau(t)dt})-I_{0} = \displaystyle \int^{D}_{0}{(g(s)exp(\displaystyle \int^{s}_{0}{\tau(t)dt}))ds} I(D)exp(0Dτ(t)dt)I0=0D(g(s)exp(0sτ(t)dt))ds

I 0 I_{0} I0移到等式右边,然后等式两边都乘上 e x p ( − ∫ 0 D τ ( t ) d t ) exp(-\displaystyle \int^{D}_{0}{\tau(t)dt}) exp(0Dτ(t)dt),我们可以得到 I D I_{D} ID

I ( D ) = I 0 e x p ( − ∫ 0 D τ ( t ) d t ) + ∫ 0 D ( g ( s ) e x p ( − ∫ s D τ ( t ) d t ) ) d s I(D) = I_{0}exp(-\displaystyle \int^{D}_{0}{\tau(t)dt})+ \displaystyle \int^{D}_{0}{(g(s)exp(-\displaystyle \int^{D}_{s}{\tau(t)dt}))ds} I(D)=I0exp(0Dτ(t)dt)+0D(g(s)exp(sDτ(t)dt))ds

第一项表示来自背景的光,乘以空间的透明度。第二项是源项 g ( s ) g(s) g(s) 在每个位置 s s s 贡献的积分,乘以位置 s s s到眼睛的透明度 T ′ ( s ) = e x p ( − ∫ s D τ ( x ) d x ) T'(s)=exp(-\displaystyle \int^{D}_{s}{\tau(x)dx}) T(s)=exp(sDτ(x)dx),那么:

I ( D ) = I 0 T ( D ) + ∫ 0 D g ( s ) T ′ ( s ) d s I(D) = I_{0}T(D)+\displaystyle \int^{D}_{0}{g(s)T'(s)ds} I(D)=I0T(D)+0Dg(s)T(s)ds

等式右侧第一项代表着从坐标 0 0 0点出发经过 0 0 0 D D D的介质入射到摄像机的光强,称之为背景光,在NeRF中,这一项考虑为 0 0 0。所以在NeRF中,这个式子化简为:
I ( D ) = ∫ 0 D g ( s ) T ′ ( s ) d s = ∫ 0 D T ′ ( t ) τ ( t ) c ( t ) d t I(D) = \displaystyle \int^{D}_{0}{g(s)T'(s)ds}=\displaystyle \int^{D}_{0}{T'(t)\tau(t)c(t)dt} I(D)=0Dg(s)T(s)ds=0DT(t)τ(t)c(t)dt
其中 T ′ ( t ) = e x p ( − ∫ t D τ ( x ) d x ) T'(t)=exp(-\displaystyle \int^{D}_{t}{\tau(x)dx}) T(t)=exp(tDτ(x)dx)

转变为NeRF当中的形式

上面的式子和NeRF原文中仍然有差别,这是因为NeRF和Max的文章中使用的坐标不同。Max文章中的坐标是让相机在D坐标,而无穷远点在0坐标,这样前面的推导就是正确的。但是NeRF中的坐标,是让相机在坐标原点,无穷远坐标就是无穷远,这样就可以得到:

I ( 0 ) = ∫ 0 ∞ g ( s ) T ′ ( 0 , s ) d s = ∫ 0 ∞ T ′ ( 0 , t ) τ ( t ) c ( t ) d t I(0) = \displaystyle \int^{\infty}_{0}{g(s)T'(0,s)ds}=\displaystyle \int^{\infty}_{0}{T'(0,t)\tau(t)c(t)dt} I(0)=0g(s)T(0,s)ds=0T(0,t)τ(t)c(t)dt

其中 T ′ ( 0 , t ) = e x p ( − ∫ 0 t τ ( x ) d x ) T'(0,t)=exp(-\displaystyle \int^{t}_{0}{\tau(x)dx}) T(0,t)=exp(0tτ(x)dx)

试想,其实在 0 0 0 ∞ \infty 不是所有位置上都有介质,介质总有边界,我们就可以定义近平面和远平面 t n t_{n} tn t f t_{f} tf,那么上述的积分其实可以写成:
I ( 0 ) = ∫ t n t f T ′ ( t n , t ) τ ( t ) c ( t ) d t I(0) = \displaystyle \int^{t_{f}}_{t_{n}}{T'(t_{n},t)\tau(t)c(t)dt} I(0)=tntfT(tn,t)τ(t)c(t)dt

NeRF中把消光系数(也就是不透明度) τ ( t ) \tau(t) τ(t)叫做体积密度 σ ( t ) \sigma(t) σ(t),那么上式可以整理为:

I ( 0 ) = ∫ t n t f T ′ ( t n , t ) σ ( t ) c ( t ) d t I(0) = \displaystyle \int^{t_{f}}_{t_{n}}{T'(t_{n},t)\sigma(t)c(t)dt} I(0)=tntfT(tn,t)σ(t)c(t)dt

如果记 T ( t ) = e x p ( ∫ t n t − σ ( t ) d t ) T(t)=exp(\displaystyle \int^{t}_{t_{n}}{-\sigma(t)dt}) T(t)=exp(tntσ(t)dt),那么上式可以变成:

I ( 0 ) = ∫ t n t f T ( t ) σ ( t ) c ( t ) d t I(0) = \displaystyle \int^{t_{f}}_{t_{n}}{T(t)\sigma(t)c(t)dt} I(0)=tntfT(t)σ(t)c(t)dt

而这一切讨论都是在固定射线的情况下,如果这个射线是动态的,我们还需要用 r ( t ) = o + t d r(t) = o + td r(t)=o+td来表示的话,那么 τ ( r ( t ) ) \tau(r(t)) τ(r(t))其实可以表示在 r r r这条射线上, t t t位置的体积密度, c ( r ( t ) , d ) c(r(t),d) c(r(t),d)就可以表示在 r r r这条射线上, t t t位置对 d d d方向的光强。那么上式可以进一步变为:

I ( 0 ) = ∫ t n t f T ( t ) σ ( r ( t ) ) c ( r ( t ) , d ) d t , w h e r e   T ( t ) = e x p ( − ∫ t n t σ ( r ( s ) ) d s ) I(0) = \displaystyle \int^{t_{f}}_{t_{n}}{T(t)\sigma(r(t))c(r(t),d)dt}, where~T(t)=exp(-\displaystyle \int^{t}_{t_{n}}{\sigma(r(s))ds}) I(0)=tntfT(t)σ(r(t))c(r(t),d)dt,where T(t)=exp(tntσ(r(s))ds)

因为我们研究的是 r r r这条射线上的光,眼睛位置固定不变,所以可以隐去相机位置 0 0 0,而添加参数 r r r来强调射线也是个变量,再用C替换掉光强I,所以最终式子变为:

C ( r ) = ∫ t n t f T ( t ) σ ( r ( t ) ) c ( r ( t ) , d ) d t , w h e r e   T ( t ) = e x p ( − ∫ t n t σ ( r ( s ) ) d s ) C(r) = \displaystyle \int^{t_{f}}_{t_{n}}{T(t)\sigma(r(t))c(r(t),d)dt}, where~T(t)=exp(-\displaystyle \int^{t}_{t_{n}}{\sigma(r(s))ds}) C(r)=tntfT(t)σ(r(t))c(r(t),d)dt,where T(t)=exp(tntσ(r(s))ds)

这就是原文当中的公式 1 1 1

把上式离散化,将近远平面区间等分为N份,在每个小区间内取样。
把积分符号变为求和, T ( t ) T(t) T(t)变为 T i T_{i} Ti c ( r ( t ) , d ) c(r(t),d) c(r(t),d)变为 c i c_{i} ci σ ( r ( t ) ) d t \sigma(r(t))dt σ(r(t))dt 变为 σ i δ i \sigma_{i}\delta_{i} σiδi,则得到最终的离散化公式。

  • 46
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuhsiHu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值