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文件。

相关推荐
luoganttcc8 小时前
FastPillars:一种易于部署的基于支柱的 3D 探测器
3d
工业3D_大熊8 小时前
3D Web轻量化引擎HOOPS Communicator在装配件管理上的具体优势
3d·3d web轻量化·3d渲染·3d模型可视化·工业3d·web端3d可视化·3d复杂模型轻量化
在下胡三汉9 小时前
3dmax批量转glb/gltf/fbx/osgb/stl/3ds/dae/obj/skp格式导出转换插件,无需一个个打开max,材质贴图在
3d·材质·贴图
xhload3d10 小时前
智能网联汽车云控平台 | 图扑数字孪生
3d·gis·智慧城市·html5·webgl·数字孪生·可视化·工业互联网·车联网·智慧交通·智能网联·汽车云控
木木黄木木11 小时前
使用HTML5和CSS3实现炫酷的3D立方体动画
3d·css3·html5
lb291718 小时前
CSS 3D变换,transform:translateZ()
前端·css·3d
淮北4941 天前
ros调试工具foxglove使用指南三:在3d空间写写画画(Panel->3D ->Scene entity)
python·学习·3d·机器人
大有数据可视化1 天前
为什么可视化大屏越来越多应用3D元素呢?
3d
千野竹之卫1 天前
2025最新云渲染网渲100渲染农场使用方法,渲染100邀请码1a12
开发语言·前端·javascript·数码相机·3d·3dsmax
花千树-0102 天前
MCP - 使用 BlenderMCP 让 Claude AI 控制你的 Blender 模型创作
人工智能·gpt·3d·aigc·blender