导读:本期聚焦于霓渡创作的《Mip-NeRF 如何用圆锥体追踪消除神经辐射场的锯齿与模糊?》,敬请观看详情。神经辐射场在渲染不同分辨率的视图时,常因点采样忽略了光线锥体内的积分区域,导致远处物体出现锯齿、近处纹理发虚。Mip-NeRF没有继续沿用单根光线的离散采样方式,而是把每条光线建模为一个圆锥台,通过对圆锥台内部位置编码进行高斯近似,推导出集成位置编码。这一改动让多层感知机能够感知每个采样区间的空间尺度,从而在低分辨率下自动模糊、在高分辨率下保留细节,从源头抑制锯齿与摩尔纹。文章从点采样的混叠成因讲起,拆解圆锥体追踪的数学构造,再结合代码示例说明集成位置编码的计算流程,并对比原始NeRF与Mip-NeRF在训练稳定性、渲染质量和多尺度表现上的差异。

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

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并不是简单替换位置编码,而是把体渲染的采样假设从点扩展为体积,这个改变直接影响网络对尺度、距离和细节的建模能力。

Mip-NeRF抗锯齿神经辐射场修改时间:2026-10-01 04:14:06

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/1001/64080.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。