神经辐射场对每条光线做离散点采样,本质上是把三维场景表示成一组点样本的加权求和。这个简化在单分辨率训练时表现尚可,但一旦渲染分辨率变化,像素覆盖的立体角不再与原始采样密度匹配,就会出现两类典型问题:远景区域产生明显锯齿,近景纹理因高频分量不足而发虚。Mip-NeRF的解决思路并不是增加采样点,而是换成圆锥体追踪,让每个采样区间对应一个空间体积,网络能够感知尺度并自动完成预过滤。

点采样为什么必然产生混叠
原始NeRF从相机光心出发,对每个像素生成一条射线,并在近平面与远平面之间按分层策略选取若干采样点。每个采样点经过位置编码后送入MLP,输出颜色和体密度,最后通过体渲染积分得到像素值。问题在于,位置编码会把三维坐标映射到高频正弦、余弦函数,这些高频基函数对点位置极其敏感。采样点间距一旦大于场景细节的变化尺度,高频信号就会被折叠到低频通道,表现为锯齿和摩尔纹。
从信号处理角度看,像素对应的是一个光线锥体而不是一条无限细的线。锥体在场景中的截面半径随深度线性增长,因此同一物体在不同距离观察时,其频率相对采样网格的比率完全不同。低分辨率渲染等效于更大的锥体截面,如果不做低通滤波,场景高频成分会超过奈奎斯特频率。原始NeRF缺少显式的滤波机制,每个采样点仍然只用一个无穷小点的坐标表达,网络无法区分一个点代表的是微小体积还是很大的区域。增加采样点可以缓解,但成本线性上升,并且无法完全消除尺度变化带来的混叠。
还有一个容易忽略的问题是训练监督的尺度。原始NeRF通常在不同尺度下分别训练或依靠高分辨率图像超采样。训练图像包含多个距离和分辨率组合时,点采样网络很难同时满足所有尺度:它可能学会在高频输入下产生锐利边缘,但在低频输入下仍保留过强高频响应,导致远景闪烁。Mip-NeRF通过改变输入编码结构,使尺度信息成为网络输入的一部分,从架构上解决了这一矛盾。
圆锥体追踪与集成位置编码
Mip-NeRF把每条射线替换成一族圆锥体。沿光线方向,相邻采样距离定义一个圆锥台,其半径由像素对应的立体角和当前深度决定。这个圆锥台不再是无限小的点,而是一个具有体积和协方差的区域。网络输入也不再是单点坐标,而是该区域的位置分布。具体做法是假设圆锥台内的位置近似服从三维高斯分布,把位置编码的期望作为新的输入,这就是集成位置编码。
位置编码通常写作γ(x)=[sin(2^l π x), cos(2^l π x)],其中l从0到最大层级。当x服从高斯分布N(μ,Σ)时,正弦项与余弦项的期望可以利用高斯特征函数解析求出。结果形式为:E[sin(2^l π x)] = sin(2^l π μ) exp(-2^{2l-1} π^2 diag(Σ)),余弦项类似。也就是说,集成位置编码只是在原始编码的每个频率分量上乘以一个衰减因子,该因子由该频率和协方差共同决定。频率越高、协方差越大,衰减越剧烈。
这个解析积分让计算成本保持在与普通位置编码相近的水平,却天然实现了低通滤波。对于大的采样区间,协方差项较大,高频正弦波被指数级压制;对于小的采样区间,衰减趋近于1,编码恢复到接近原始位置编码。因此,Mip-NeRF的MLP可以同时处理粗尺度与细尺度信号,而不需要显式切换网络结构。
import torch
import torch.nn as nn
class IntegratedPositionEncoding(nn.Module):
def __init__(self, max_deg=10):
super().__init__()
self.max_deg = max_deg
def forward(self, mu, sigma):
# mu: [..., 3] 圆锥台均值
# sigma: [..., 3] 对角协方差
enc = []
for l in range(self.max_deg):
freq = 2.0 ** l * torch.pi
decay = torch.exp(-0.5 * (freq ** 2) * sigma)
enc.append(torch.sin(freq * mu) * decay)
enc.append(torch.cos(freq * mu) * decay)
return torch.cat(enc, dim=-1)
上面的代码只给出了对角协方差的简化版本。实际实现中,圆锥台的协方差不仅包含像素锥径带来的径向方差,还包含沿光线方向的长度方差。为了保证数值稳定,通常会对衰减项做截断或使用更高精度浮点。协方差的构造取决于相机内参、像元大小和采样距离,因此要把这些参数显式传入编码模块。
多尺度表现与工程落地
Mip-NeRF在训练时可以直接使用包含多种分辨率的图像集合,不需要为每个尺度单独训练模型。由于集成位置编码将空间尺度编码进输入,网络在预测颜色和密度时会同时参考位置均值和方差。低分辨率视图对应较大的协方差,高频编码衰减更多,输出自然更平滑;高分辨率视图对应较小协方差,高频信息被保留,细节更丰富。对比实验显示,在合成场景和真实捕捉数据中,Mip-NeRF的远景栅栏、网格线、重复纹理等区域锯齿明显减少,近景文字和边缘也比原始NeRF更稳定。
实现时要注意两个环节。第一,像素对应的圆锥角要按图像分辨率和相机焦距正确计算。如果圆锥角设置偏大,所有尺度都会被过度模糊;偏小则退化为接近点采样,抗锯齿效果下降。第二,集成位置编码中的指数衰减项在高层级会非常小,训练时可能出现0梯度,但不会导致数值不稳定。可以将衰减后的编码与原始点编码拼接,或者对不同层级设置不同的最大频率上限,避免无用计算。
后续工作如Mip-NeRF 360进一步把无界场景压缩到有界区域,并将抗锯齿思路迁移到瞬时哈希网格中,说明圆锥体追踪已经成为神经辐射场多尺度渲染的重要基础。对工程实现来说,理解Mip-NeRF并不是简单替换位置编码,而是把体渲染的采样假设从点扩展为体积,这个改变直接影响网络对尺度、距离和细节的建模能力。