神经辐射场 (Neural Radiance Field, NeRF) 是Ben Mildenhall 等人ECCV2020 的工作。它利用多个视角的RGB图像,训练神经网络构建一个隐式的三维表征,即可渲染得到模型没有见过的新视角下的图像。也就是说模型学到了一种在多个输入视角之间进行插值(内推外延)的能力。NeRF工作的过程可以分成两部分: I. **从多视角图像构建三维模型(反渲染)** 从图像和pose经过MLP得到网络参数(含密度和颜色),网络学到一个 连续的三维场景表示,可以从任意位置、方向查询该点的颜色与密度。NeRF网络的作用就是学习微元的赋色因子 σ(t) 和颜色 c(t)。之后,我们根据光线上每个微元的赋色因子和颜色进行积分,渲染得到该光线最终的像素颜色 C(r) ,并利用真值计算 Rendering Loss 优化模型,如下图所示。 II. 计算某视角下的二维图像(体渲染)。给定一个相机视角,用训练好的 MLP 查询每个采样点的(\sigma_i) 和 (c_i),生成该视角下的 2D 图像

NeRF原文中的MLP实质上充当了三维网格 这一作用,只不过其中并没有显式地记录每个点的参数。并且,这里的MLP是一个连续的三维网格,不需要进行额外操作就能天然地得到连续空间中的值。

由此可见,NeRF原文中MLP的泛化性体现在当前场景下,对空间中没有GT的采样点属性的插值,因为MLP 学到了一种连续的空间-方向映射。

相比Plenoxel,标红色箭头的地方变了。

当然,显式与隐式的表征在性质和效果上会有不同(例如:显式表征收敛快,但更容易有伪影),具体研究可以参考Plenoxel、TensoRF等Shape Representation的论文。

NeRF 中的形状表示是一种雾状的软不透明度场 (soft opacity field), 而外观则是借助辐射场(或表面光场)的形式表示。软不透明度场 (soft opacity field), 不像 Mesh 等 Hard Geometry 一样具有确定性的空间边界,而是以一定概率连续地弥散在整个空间中的。

例子:

将初始化的白色球体,通过可微分渲染和图像监督,优化成奶牛mesh

  • 初始化带有N个顶点的球体mesh,并且每个顶点对应一个可学习的位置偏移量和颜色;
  • 通过Differentiable Rendering,将该mesh渲染成图片;
  • 将渲染图片与GT图片做loss,梯度回传并优化参数。

NeRF 采用的“Absorption only”模型

NeRF 用的体渲染公式是 RTE 的一个简化版本:

  • 只考虑吸收(absorption)和透射(transmittance)

  • 不考虑外散射(out-scattering)、内散射(in-scattering)、自发发射(emission)

  • 也就是说,场景中每个体素点只会吸收光,不会把光散射到别的方向,也不会发光


数学形式

在 NeRF 中,从相机沿着射线积分时,颜色是这样算的:

其中:

  • 是密度(决定吸收强度)
  • 是点的颜色(被视为直接可见,不考虑散射)
  • 是透射率,表示光从相机到达深度 这一段中没被吸收的比例

这个公式等价于:

  • 光在传播过程中可能被吸收(密度越高吸收越多)
  • 剩下的光线直接从该点的颜色贡献到相机

为什么这样做

  • 简化计算:不需要模拟复杂的多向散射过程

  • 适合 NeRF 的假设:场景中每个点的颜色可以直接由 MLP 预测,不必追踪多次光交互

  • 足够真实:在多数室外、弱散射的场景中,这个近似能生成高质量结果