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 参数化。注意颜色
C.3 网络架构
原始 NeRF 的 MLP 架构如下:
输入: (x, y, z) → 位置编码 γ(x) → 8层全连接 (256通道, ReLU) → 输出 σ 和中间特征
↓
拼接 γ(d) 和中间特征 → 4层全连接 (128通道, ReLU) → 输出 c
注意:颜色分支在第 8 层之后才接入方向
C.4 位置编码(Positional Encoding)
直接输入
- 对位置
:编码为 维向量(论文用 ,即 60 维) - 对方向
:编码为 维向量(论文用 ,即 24 维)
物理直觉:位置编码等价于在傅里叶基下展开,使低维神经网络能表示高频函数。这与核方法中的随机傅里叶特征(Random Fourier Features)有深刻联系。
D. 详细推导
D.1 体积渲染方程的积分推导
体积渲染的核心是计算沿相机光线
第一步:定义透射比(Transmittance)
设光线从近平面
物理直觉:当密度
第二步:建立微元方程
考虑区间
第三步:积分得到终态颜色
沿整条光线积分:
这就是体积渲染方程的积分形式。
D.2 离散化的 alpha 合成推导
实际计算需要离散化。将
第一步:离散透射比
对第
含义:光线在该区间被拦截的概率(类似 alpha blending 中的 alpha 值)。
累积透射比(从
第二步:离群体积渲染
像素颜色的离散估计:
展开写法:
其中
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. 关键直觉
-
场景是连续的函数:密度场
和颜色场 是连续定义的,不存在体素的离散分辨率限制,可在任意位置查询。 -
透射比是概率累积:
本质上是”之前未被拦截”的累积概率,乘以颜色积分得到最终像素颜色。 -
位置编码将学习转化为谐波分析:傅里叶特征使 MLP 能表示高频变化,等价于用无限维的谐波基函数展开任意函数。
-
层级采样将计算资源分配给高密度区域:通过粗采样估计权重分布,将细采样集中在物体表面附近,避免了在空旷区域浪费采样点。
-
MLP 权重是场景的隐式记忆:整个场景完全编码在 MLP 的权重中,存储成本低但无法直接编辑/操控场景组成部分。
G. 局限性
-
训练速度极慢:单场景需数十小时收敛,每次迭代需多次 MLP 前向(粗+细采样),无法实时渲染。
-
无法编辑场景组成部分:隐式 MLP 表示使得无法单独修改某个物体的颜色或形状,缺乏可解释性。
-
视角相关外观建模困难:虽然方向编码
允许视角相关颜色,但 MLP 的连续性约束可能导致不同视角的颜色不连续。 -
过平滑与缺乏几何先验:在稀疏视角下,NeRF 倾向于产生模糊或过度光滑的结果,缺乏几何先验约束。
-
无界场景(unbounded scenes)处理困难:原始 NeRF 仅适用于小规模、前向场景(bounded scenes),无法直接扩展到大尺度环境。
H. 与前后篇的衔接
本篇承接:无(这是系列笔记的第一篇)。
本篇引出:NeRF 的两个根本瓶颈——训练速度和隐式表示——驱动了后续笔记的两条演进路线:
- 效率路线:mip-NeRF(抗锯齿)→ Instant-NGP(哈希加速)→ 3DGS(显式高斯)
- 动态扩展路线:K-Planes → 4DGS
本篇的数学推导(体渲染积分、离散 alpha 合成)是后续所有方法的基础框架,无论是 mip-NeRF 的锥体渲染还是 3DGS 的高斯投影,核心积分思想保持一致。
本篇必须记住的结论
-
NeRF 将场景建模为连续函数
,通过 MLP 隐式存储场景。 -
体积渲染方程
本质是沿光线的颜色积分, 是累积透射比。 -
离散形式的 alpha 合成
与 alpha blending 等价,其中 。 -
位置编码
将低维坐标映射到高频空间,使 MLP 能表达纹理边缘等高频细节。 -
层级采样通过粗采样权重指导细采样集中在高密度区域(物体表面),兼顾计算效率与渲染质量。
参考文献
- Mildenhall et al. “NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis” ECCV 2020
- Barron et al. “Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields” ICCV 2021
- Tancik et al. “Fourier Features Let Networks Learn High Frequency Functions in Low Dimensional Domains” NeurIPS 2020