slam系列4:nerf和3dgs

常用的3维表示法:

NeRF属于是density的模型,模型的参数如下:

传统的 3D 模型表示方法,如 离散的Mesh 和点云,以及连续的 Nerf,通常面临着一个主要问题:随机采样过程中产生的噪声,这直接影响了渲染质量。3DGS 是在离散和连续间的一个平衡:在高斯球内部是连续的、可微的;在整个空间中,每个高斯球又是离散的。

1. NeRF基本概念

1.1 建模方法

训练一个函数,将位置和摄像头参数转化为颜色和体密度

然后使用体渲染技术,生成图片:

神经网络是用了一个9层256通道的全连接MLP,姑且算是神经网络。训练过程如下:

1.2 Instant NGP

Instant NGP相对于NeRF的核心改进在于它采用了"多分辨率哈希编码" (Multi-resolution hash encoding) 的数据结构。

你可以理解为 Instant NGP 把原始 NeRF 中神经网络的大部分参数扔掉,换成一个小得多的神经网络;同时额外训练一组编码参数 (feature vectors),这些编码参数是存储在网格的顶点上的,这样的网格一共有 层,它们按照分辨率从低到高,用于学习场景不同层次的细节。在每次训练时,小神经网络的参数和每层网格上只有点周围的 8 个顶点中的编码参数会被更新。

Instant NGP 的另一个重要的工程优化是将整个网络实现在一个 CUDA kernel 中 (Fully-fused MLP),使得网络的所有计算都在 GPU 的 local cache 中进行。据论文所称这会带来 10x 的效率提升。

2. 3dgs

2.1 建模方法

3D Gaussian Splatting 干了什么:使用3D Gaussian球表示三维模型,并通过 Splatting 技术渲染出来。

在 NeRF 里去表达一个三维场景的信息时,使用的是三维场景的点和它的体密度值σ、颜色C。3DGS内不再用点表达,而是使用 3D 高斯组件替代了点,所以在空间中的表达是一堆堆的3D高斯。这些3D高斯的信息没有保存在神经网络里,而是存在了硬盘上,所以它是一个显式的表达场景。

3D高斯体参数包括:

2.1.1 谐波函数

球面谐波是一种类似高斯展开的在极坐标系上的函数,用来拟合空间体

作为对比,我们来看另一种球面高斯函数:

和SH定死的基函数相比,SG的特点就是自由度极高:基函数用几个、怎么分布、胖瘦如何,都随意。然而SH也有很多长处是SG没有的,比如SH除了正交性还有旋转不变性。

反馈到实际高光计算上,就会发现SG不能很好地保持高光形状。基函数定义方向上的高光形状能保持的比较好,但如果位置在几个基函数的角度之间,高光形状就会比较散了。

2.1.2 协方差

协方差用于控制高斯体各方向的尺寸。

2.1.3 splating

Splatting是一种传统的3D->2D的光栅化渲染方式。

3DGS首先将这些3D高斯投影到基于像素的图像平面上,这一过程被称为"splatting"。然后,3DGS对这些高斯进行排序,并计算每个像素的值。

给定像素位置 x x x,通过视图变换 W W W,可以计算与所有重叠高斯体的距离,即这些高斯体的深度,形成高斯体的排序列表 N N N。然后,进行Alpha Blending,也就是混合 alpha 合成来计算整体图像的最终颜色:

2.1.4 α blending

多个高斯体splat到平面上,最终形成的图形需要使用α blending进行叠加。

2.1.5 光栅渲染

2.2 初始化点云

初始化时的输入量使用的是 COLMAP 等 SFM 方式输出的点云,这里与 NeRF 就完全不同了,NeRF 使用的 仅是 COLMAP 等输出的相机位姿,而 3DGS 中,这些点云是有用的。3DGS 将根据这些点云进行初始化:基于这些点云的位置,会在每一个位置上放置一个高斯球,系数随机。

2.3 训练过程


3DGS 从近到远每个球投下来以后都形成了一个图像区,那么在重叠区域就可以进行光栅化的融合了。每个点都进行融合以后就可以得到图像。为了避免为每个像素推导高斯系数的成本计算,3D GS将精度从像素级转移到patch级细节。每个瓦片包括16×16个像素。3D GS进一步确定哪些tiles与这些投影的高斯图相交,然后按照tile进行排序,最后并行地对tile进行计算:

NeRF 内逐像素进行计算,即采集一个 batch 的像素,送进去训练,然后输出损失;而在 3DGS 内,每次采集一小批图,以图像为单位进行损失计算。

训练图中,上面的分支更新 3D 高斯椭球体的属性,下支实现 3D 高斯椭球体的克隆和分裂等:


3. 软件

通用软件splatviz,见https://github.com/Florian-Barthel/splatviz。支持实时编辑和分析。通过利用Python GUI库pyimgui,splatviz能够在渲染前直接操作高斯对象,从而实现无限的编辑和可视化可能性。

存储为ply文件,压缩文件为yml文件。

相关推荐
某林21212 小时前
从硬件解耦、3D公差设计到ROS 2柔性导航
人工智能·3d·机器人·ros2·技术复盘
逸模21 小时前
逸模智造・BIM 效能专栏一|极速土建翻模,2D 一键跨越 3D
笔记·3d·bim·土建·翻模
陈天伟教授1 天前
eDrawings 2026 x64 Edition-免费 3D 模型和 2D 工程图查看器
3d
Tian_Hang3 天前
eclipse ditto 学习笔记
运维·服务器·开发语言·javascript·3d
AI视觉网奇3 天前
BambuStudio 编译实战 2026
3d
AI前沿资讯3 天前
AI3D角色生产如何减少返工?用 V2Fun 前移建模与动画流程
人工智能·3d
蓝速科技3 天前
蓝速科技视觉 3D 全息舱 AI 数字人一体机带灯与无灯款深度评测
人工智能·科技·3d
尘中远3 天前
【Qwt 7.0 系列】3D 数据可视化 —— OpenGL 高性能三维绘图
qt·3d·qcustomplot·qwt·科学绘图·高性能绘图
林恒smileZAZ3 天前
Three.js 3D 地图特效与材质实现指南
javascript·3d·材质
蓝速科技4 天前
蓝速科技 3D 全息舱 AI 数字人博物馆导览效果实录
人工智能·科技·3d