NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
3D Gaussian Splatting(3D高斯泼溅) 于 2023 年 8 月发布,是一种基于从多个视点拍摄的少量图像实时渲染 3D 场景的方法。
3D 空间被定义为一组高斯分布,每个高斯分布的参数都是使用机器学习计算的。 请注意,渲染时不需要机器学习训练,因此可以实现快速渲染。
这篇文章很好地解释了 3D Gaussian Splatting的基本概念,如果不熟悉基础知识,请参考它。
1、与摄影测量和 NERF 的比较
摄影测量(Photogrammetry)是一种从多视点图像生成 3D 多边形的技术,例如将物体放在转台上并在将物体旋转 360 度的同时拍照。 虽然摄影测量对于扫描物体很有用,但它无法渲染没有轮廓的场景,例如天空或远处场景的精细细节。 此外,由于优化是通过解决传统优化问题来执行的,因此对于某些用例(例如反射和镜子)不可能准确生成 3D 多边形。

为了解决这些限制,NERF 最近引起了人们的关注。 NERF 是另一种根据多视点拍摄的图像渲染 3D 场景的方法。 基本思想是训练一个模型以隐式方式表示场景,更具体地说是任何给定位置的密度和颜色的体积表示。 为了从给定的视点渲染场景,我们对该体积进行采样,以计算该特定点处最终图像的颜色。 这种渲染方法能够准确地渲染开放场景以及反光物体。 然而,NERF 的缺点是渲染速度相当慢。

MERF作为一种加速NERF的方法被提出,它通过将多个方向上的光线追踪结果预先烘焙成体积纹理来实现实时处理。 然而,由于 MERF 使用固定大小的体积纹理(如 512x512x512)和高分辨率纹理(如 2048x2048),因此输出的细节和形状保真度会降低。

3D Gaussian Splatting是另一种方法,它解决了另一组限制,并且可以实时渲染。 首先,将多个视点的图像转换为点云,然后将点云转换为带参数的高斯分布,最后使用机器学习来学习参数。

虽然高斯参数的训练需要机器学习,但渲染不需要任何繁重的处理,并且可以实时完成。

2、3D Gaussian Splatting架构

3D Gaussian Splatting 首先使用 COLMAP 库从一组输入图像生成点云。 这个过程只需要几十秒。 根据输入图像,通过匹配图像之间的像素来估计相机的外部参数(倾斜和位置),并根据这些参数计算点云。 在这里,该过程是由优化问题处理的,而不是机器学习。

接下来,使用 Pytorch 的机器学习优化每个高斯的以下参数:
- 位置:它所在的位置 (XYZ)
- 协方差:如何拉伸/缩放(3x3 矩阵)
- 颜色:它是什么颜色(RGB)
- Alpha:透明度如何 (α)
优化实际上是渲染COLMAP估计的每个相机位置处的图像,并且参数被确定为接近原始图像。 因此,3D Gaussian Splatting的输出将是接近拍摄相机位置处的原始照片的图像。 可微渲染器用于渲染优化,使渲染器可微可以通过 Pytorch 进行优化。
这是高斯渲染的可视化:

如果忽略 alpha 值并渲染高斯,我们会得到以下结果,可以清楚地看到椭圆:

以下是按训练时间划分的准确率比较:使用 A6000 GPU 在 5 分钟内训练了 7K 次迭代,在 35 分钟内训练了 30K 次迭代。 用于训练的时间越多,高斯就越准确。

3、易用性与准确性
由于 COLMAP 过程创建用于训练 3D 高斯分布的输入数据,因此我们可以假设使用相机位置已知或确切的相机内部参数已知的相机装备,将生成更准确的点云并提高最终精度。
不过,据我们测试,即使使用 iPhone 的摄像头也可以生成实用的 3D 场景,我们认为易用性是 3D Gaussian Splatting 的巨大优势。
4、Windows创建3D Gaussian Splatting
参考这篇博客构建 Windows 环境以创建 3D Gaussian Splatting。
在安装了 Visual Studio 2019 的 PC 上,克隆官方存储库,包括外部和子模块( recursive
选项)。 如果没有 recursive
选项, diff-gaussian-rasterization
模块中将出现 glm.h not find
错误。
接下来,按以下方式创建新的 conda 环境:
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat"
SET DISTUTILS_USE_SDK=1 # Windows only
conda env create --file environment.yml
conda activate gaussian_splatting
如果在构建 diff-gaussian-rasterization
时遇到错误,请删除虚拟环境并使用以下命令重新开始:
conda remove -n gaussian_splatting --all
或者,进入虚拟环境并显式安装子模块:
conda activate gaussian_splatting
cd <dir_to_repo>/gaussian-splatting
pip install submodules\diff-gaussian-rasterization
pip install submodules\simple-knn
4.1 输入准备
将 iPhone 拍摄的视频转换为按顺序编号的 jpg 文件,并将转换后的文件放在文件夹 gaussian-splatting/Data/input
中:
ffmpeg -i face.MOV %06d.jpg

4.2 运行 COLMAP
以下命令执行 COLMAP,大约需要 18 秒,处理约 538 个图像。
python convert.py --colmap_executable "<PATH>\gaussian\COLMAP-3.8-windows-cuda\COLMAP-3.8-windows-cuda\COLMAP.bat" -s "C:\Users\kyakuno\Desktop\gaussian\gaussian-splatting\Data"
4.3 训练
以下命令用于训练,甚至可以使用具有 12 GB VRAM 的 RTX3080。 7000次迭代大约需要21小时。
python train.py -s "<PATH>\gaussian\gaussian-splatting\Data"
4.4 可视化
执行如下命令可视化3D Gaussian Splatting,可以按 Y 键用鼠标控制视点:
SIBR_gaussianViewer_app.exe -m "<PATH>\gaussian\gaussian-splatting\output\c1d627ca-d"
结果如下,点击这里查看视频:

原文链接:3D Gaussian Splatting : Real-Time Rendering of Photorealistic Scenes
BimAnt翻译整理,转载请标明出处