NeRF:基础神经辐射场

A. 本篇主题

本篇围绕 NeRF(Neural Radiance Field) 这一基础框架,完整阐述其核心建模思想、网络架构、位置编码机制、体积渲染方程与层级采样策略。目标是为后续笔记中”效率改进”与”3DGS 显式化”两条演进路线提供坚实的基线。

B. 本篇在整条路线中的位置

NeRF 于 2020 年提出,将场景建模为连续的颜色场与密度场的神经网络隐式函数。相比此前的体素(Minecraft et al., 2017)和点云方法,NeRF 首次实现了 photorealistic novel-view synthesis,核心突破在于连续场表示与可微体积渲染的结合。本篇仅聚焦 NeRF 基础本身,不展开后续优化路线。

本篇的结尾将指出 NeRF 的两个根本瓶颈:训练速度极慢(数十小时收敛),以及隐式 MLP 表达方式难以编辑。这两个问题将驱动后续笔记的演进方向——从 mip-NeRF 的抗锯齿改进,到 Instant-NGP 的哈希加速,再到 3DGS 用显式高斯完全替代 MLP,最终走向 4D 时空建模。

C. 数学建模

C.1 符号定义

符号维度含义
3D三维空间位置
3D观察方向单位向量($\
3D辐射颜色(RGB)
标量体积密度(不透明度)
神经网络参数NeRF MLP 的权重与偏置
位置编码函数将低维坐标映射到高频空间
神经网络映射NeRF 的 MLP

C.2 核心映射

NeRF 的核心是一个连续的场景表示函数:

该函数由 MLP 参数化。注意颜色 与观察方向 相关(不同视角看到不同颜色,即视角相关外观 View-Dependent Appearance),而密度 仅与位置 相关。

C.3 网络架构

原始 NeRF 的 MLP 架构如下:

输入: (x, y, z)  →  位置编码 γ(x)  →  8层全连接 (256通道, ReLU)  →  输出 σ 和中间特征
                                                        ↓
                                   拼接 γ(d) 和中间特征  →  4层全连接 (128通道, ReLU)  →  输出 c

注意:颜色分支在第 8 层之后才接入方向 ,这使得密度预测与方向无关(物理直觉:密度是场景的固有属性,与观察角度无关)。

C.4 位置编码(Positional Encoding)

直接输入 到 MLP 难以表达高频变化(纹理、边缘)。解决方案是映射到高频空间:

  • 对位置 :编码为 维向量(论文用 ,即 60 维)
  • 对方向 :编码为 维向量(论文用 ,即 24 维)

物理直觉:位置编码等价于在傅里叶基下展开,使低维神经网络能表示高频函数。这与核方法中的随机傅里叶特征(Random Fourier Features)有深刻联系。

D. 详细推导

D.1 体积渲染方程的积分推导

体积渲染的核心是计算沿相机光线 到达相机的总颜色。

第一步:定义透射比(Transmittance)

设光线从近平面 到远平面 传播。在 处的瞬时拦截概率密度为 。定义透射比 为光束从 没有被任何粒子拦截的概率:

物理直觉:当密度 较高时, 快速衰减,光束被遮挡;当 时,,光线自由通过。

第二步:建立微元方程

考虑区间 的贡献。光束在该区间被拦截的概率为 ,被拦截时携带的颜色为 ,且必须之前未被拦截(乘以 )。因此该微元对最终颜色的贡献为:

第三步:积分得到终态颜色

沿整条光线积分:

这就是体积渲染方程的积分形式。

D.2 离散化的 alpha 合成推导

实际计算需要离散化。将 划分为 个均匀区间,区间 的中点为 ,长度

第一步:离散透射比

对第 个区间,定义不透明度:

含义:光线在该区间被拦截的概率(类似 alpha blending 中的 alpha 值)。

累积透射比(从 的未被拦截概率):

第二步:离群体积渲染

像素颜色的离散估计:

展开写法:

其中 是第 个区间对最终颜色的贡献权重。等价于 alpha blending 公式。

D.3 层级采样的概率推导

问题:均匀采样效率低下——空旷区域密度接近零,仅在物体表面附近有高密度。

解决方案:两阶段粗细采样(coarse/fine sampling)。

第一阶段(粗采样):均匀采样 个点,计算权重:

第二阶段(细采样):根据权重进行重要性采样。

将权重归一化为概率分布:

在该分布上采样 个新点,使得高密度区域获得更多采样点。

数值稳定性:对权重做最大值归一化防止极端值主导:

E. 算法与训练流程

E.1 NeRF 训练流程

输入:多视角图像集 {I_1, ..., I_M},对应相机参数 {π_1, ..., π_M}
输出:NeRF MLP 参数 θ

1.  for iteration = 1 to N do
2.      for each camera π_i do
3.          for each pixel (u, v) in image I_i do
4.              r ← Ray(π_i, (u, v))          // 生成相机光线
5.              {t_j}_{j=1}^{N_c} ← UniformSamples(r, N_c)   // 粗采样
6.              {σ_j, c_j} ← F_θ(r(t_j), d)                   // 查询 MLP
7.              Ĉ_c ← VolumeRender({σ_j, c_j, t_j})           // 粗渲染
8.              {t_k}_{k=1}^{N_f} ← ImportanceSample({w_j})   // 基于权重细采样
9.              {σ_k, c_k} ← F_θ(r(t_k), d)                   // 再次查询 MLP
10.             Ĉ_f ← VolumeRender({σ_k, c_k, t_k})           // 细渲染
11.             L ← ‖Ĉ_f - C_gt‖²                              // 重建损失
12.             θ ← θ - η · ∇_θ L                               // 梯度更新
13.         end for
14.     end for
15. end for

注意:coarse 和 fine 使用同一个 MLP(不是两个独立网络)。粗采样阶段的权重 只用于指导细采样点的分布,不直接参与最终损失。

E.2 渲染推断流程

输入:NeRF 参数 θ,相机参数 π,像素坐标 (u, v)
输出:像素颜色 Ĉ

1.  r ← Ray(π, (u, v))                        // 光线
2.  {t_j} ← HierarchicalSample(r, N_c + N_f)  // 合并采样
3.  for each t_j do
4.      (c_j, σ_j) ← F_θ(r(t_j), d)          // MLP 前向
5.  end for
6.  Ĉ ← VolumeRender({c_j, σ_j, t_j})         // 体渲染
7.  return Ĉ

渲染时沿光线采样约 128 个点(coarse 64 + fine 64)。

F. 关键直觉

  1. 场景是连续的函数:密度场 和颜色场 是连续定义的,不存在体素的离散分辨率限制,可在任意位置查询。

  2. 透射比是概率累积 本质上是”之前未被拦截”的累积概率,乘以颜色积分得到最终像素颜色。

  3. 位置编码将学习转化为谐波分析:傅里叶特征使 MLP 能表示高频变化,等价于用无限维的谐波基函数展开任意函数。

  4. 层级采样将计算资源分配给高密度区域:通过粗采样估计权重分布,将细采样集中在物体表面附近,避免了在空旷区域浪费采样点。

  5. MLP 权重是场景的隐式记忆:整个场景完全编码在 MLP 的权重中,存储成本低但无法直接编辑/操控场景组成部分。

G. 局限性

  1. 训练速度极慢:单场景需数十小时收敛,每次迭代需多次 MLP 前向(粗+细采样),无法实时渲染。

  2. 无法编辑场景组成部分:隐式 MLP 表示使得无法单独修改某个物体的颜色或形状,缺乏可解释性。

  3. 视角相关外观建模困难:虽然方向编码 允许视角相关颜色,但 MLP 的连续性约束可能导致不同视角的颜色不连续。

  4. 过平滑与缺乏几何先验:在稀疏视角下,NeRF 倾向于产生模糊或过度光滑的结果,缺乏几何先验约束。

  5. 无界场景(unbounded scenes)处理困难:原始 NeRF 仅适用于小规模、前向场景(bounded scenes),无法直接扩展到大尺度环境。

H. 与前后篇的衔接

本篇承接:无(这是系列笔记的第一篇)。

本篇引出:NeRF 的两个根本瓶颈——训练速度和隐式表示——驱动了后续笔记的两条演进路线:

  • 效率路线:mip-NeRF(抗锯齿)→ Instant-NGP(哈希加速)→ 3DGS(显式高斯)
  • 动态扩展路线:K-Planes → 4DGS

本篇的数学推导(体渲染积分、离散 alpha 合成)是后续所有方法的基础框架,无论是 mip-NeRF 的锥体渲染还是 3DGS 的高斯投影,核心积分思想保持一致。


本篇必须记住的结论

  1. NeRF 将场景建模为连续函数 ,通过 MLP 隐式存储场景。

  2. 体积渲染方程 本质是沿光线的颜色积分, 是累积透射比。

  3. 离散形式的 alpha 合成 与 alpha blending 等价,其中

  4. 位置编码 将低维坐标映射到高频空间,使 MLP 能表达纹理边缘等高频细节。

  5. 层级采样通过粗采样权重指导细采样集中在高密度区域(物体表面),兼顾计算效率与渲染质量。


参考文献

  1. Mildenhall et al. “NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis” ECCV 2020
  2. Barron et al. “Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields” ICCV 2021
  3. Tancik et al. “Fourier Features Let Networks Learn High Frequency Functions in Low Dimensional Domains” NeurIPS 2020