- 本文提出一种新的3D数据表达形式3D Gaussians。每个Gaussian由以下参数组成:中心点位置、协方差矩阵、可见性、颜色。通过世界坐标系到相机坐标系,再到图像坐标系的仿射关系,可将3D Gaussian映射到相机坐标系,通过对z轴积分,可得到对应Splatting 2D分布。
- 针对3D Gaussians,提出对应的优化方法。去除可见性太低的高斯,对回传梯度较大的高斯,通过复制,克隆等操作,增强表达能力。
- 针对3D Gaussians,提出对应的光栅化方法。将图像切分为16 x 16的块,每个块内对高斯根据深度进行排序。光栅时,从前向后遍历,当可见性累加到某个阈值即停止。梯度回传时从停止块开始,有后向前遍历。
目录
[Traditional Scene Reconstruction and Rendering](#Traditional Scene Reconstruction and Rendering)
[Neural Rendering and Radiance Fields](#Neural Rendering and Radiance Fields)
[Point-Based Rendering and Radiance Fields](#Point-Based Rendering and Radiance Fields)
[Differentiable 3D Gaussian Splatting](#Differentiable 3D Gaussian Splatting)
[Optimization with Adaptive Density Control of 3D Gaussians](#Optimization with Adaptive Density Control of 3D Gaussians)
[Fast Differentiable Rasterizer for Gaussians](#Fast Differentiable Rasterizer for Gaussians)
[Implementation, Results and Evaluation](#Implementation, Results and Evaluation)
[Results and Evaluation](#Results and Evaluation)
[Real-World Scenes](#Real-World Scenes)
[Synthetic Bounded Scenes](#Synthetic Bounded Scenes)
[Initialization from SfM](#Initialization from SfM)
[Unlimited depth complexity of splats with gradients](#Unlimited depth complexity of splats with gradients)
[Anisotropic Covariance](#Anisotropic Covariance)
摘要
- NeRF效果好,但是训练和渲染很花时间;特别是对1080p分辨率渲染的场景,现有方法无法实现实时渲染。
- 本文引入三个关键部分,实现sota视觉质量、较短训练时间和1080p分辨率下新视角实时渲染。
- 3D Gaussians。通过camera calibration中产生的稀疏点进行初始化。这种新的3D表达形式在保存NeRF优点的同时,避免了空白空间不必要的计算开销;
- Optimization。实现3D Gaussian的交替优化和密度控制,优化各向异性协方差矩阵实现对场景的准确表达;
- **Rendering。**实现快速可见感知渲染算法(fast visibility-aware rendering algorithm),支持各向异性飞溅(anisotropic splatting),同时加速训练和渲染。
- 本文在多个数据集上,实现sota视觉质量和实时渲染。
引言
- Mesh和点云是最常用的3D场景表达,这种显式表达非常适合快速GPU/CUDA-based rasterization。另一方面,NeRF可建立连续的场景表达,用volumetric ray-marching优化MLP,实现新视角生成。基于NeRF的高效算法,通常会引入一些新的表达形式,用插值的方式实现连续表达,例如:体素(voxel),hash grids,或点云。这些方法效果不错,但是渲染中要求的随机采样计算开销大、并且会导致噪声。本文提出的方法:3D Gaussian可以实现sota的视觉质量和具有竞争力的训练时间;tile-based splatting solution可以实现1080p的实时渲染。
- 本文所提方法由三个主要部分组成。
- 3D Gaussians:通过Structure-from-Motion (SfM) 相机标定得到的稀疏点云初始化,对于NeRF-synthetic dataset,本文方法在随机初始化情况下,也可取得较好的结果。3D Gaussian的优点在于(a)可导的体表示;(b)通过映射至2D,实现高效栅格化;(c)可以实施标准的alpha-blending;
- 优化:提出一种优化3D Gaussians参数的方法,参数包括:3D position,opacity alpha,anisotropic covariance和球谐系数(spherical harmonic coefficients)。优化方法:交替执行密度控制步,在优化过程中增加或去除3D Gaussians。
- 渲染:提出一种快速GPU排序算法,受tile-based rasterization方法启发。实现各向异性纹理飞溅(anisotropic splatting),一种可见性排序(visibility ordering)。受益于排序和alpha-blending,可以实现快速和准确的反向传播。
近期工作
Traditional Scene Reconstruction and Rendering
- light fields (1996) -> Structure-from-Motion (SfM,2006) -> multi-view stereo (MVS,2007)
- MVS-based方法会重投影(re-project)并融合(blend)输入图片到新相机视角,使用几何引导重投影。
Neural Rendering and Radiance Fields
- Soft3D (2017,首次提出Volumetric representations) -> 将深度学习技术应用到volumetric ray-marching(2019)-> NeRF (2020,提出importance sampling和postional encoding,但是较大MLP影响了速度) -> MipNeRF360(2022,sota视觉效果,但训练和渲染时间太长)
- 为了加速训练或渲染,现有的探索集中在三个方向:稀疏数据结构存储特征,不同的编码器和MLP容量。其中,值得一提的方法是InstantNGP(2022),该方法使用hash grid和occupancy grid来加速计算,用一个较小的MLP表示密度和外观。Plenoxels(2022),使用稀疏体素网格,插值表示连续密度场,并且能够不使用MLP。
- 尽管上述方法产生了很好的结果,这些方法仍然不能高效表示空白区域。
Point-Based Rendering and Radiance Fields
-blending和体渲染(volumetric rendering)本质上是相同的成像模型。对于体渲染方法:
其中是密度,是透光率,是颜色,是相邻采样点的间隙。密度越大,越接近1,该点越重要;之前点的密度和越大,越大,该点越不重要。上式可以被重新组织为:
alpha-blending可以表示为:
其中,所有点根据前后关系排序,是该点颜色,是该点所在2D高斯的概率密度乘以该点的不透明性(opacity)。
相较于之前的-blending栅格化方法,本文提出可见性(visibility)排序。另外,本文反向传播梯度到像素点中的所有splats,栅格化所有各向异性splats。
Overview
- Initialization:给定静态场景的一组图片,和对应经过SfM校准的相机参数,以及SfM在校准过程中产生的稀疏点云;
- 3D Gaussians:给定稀疏点云,初始化3D Gaussians,每个3D Gaussian由位置mean,协方差矩阵和不透明性决定;辐射场中指向性外观部分(颜色),通过spherical harmonics (SH) 表征;
- Optimization:逐步优化3D Gaussians的参数:位置、协方差矩阵、和SH系数;
- Rendering:tile-based rasterizer,支持根据可见性顺序的各向异性splats的-blending
Differentiable 3D Gaussian Splatting
在世界坐标系下,3D Gaussians由三个系数定义:均值,3D协方差矩阵和:
将世界坐标系下的3D Gaussians转换到相机坐标下:
其中,是世界坐标系坐标到相机坐标系坐标的转换矩阵,是透视变换的Jacobian矩阵。
参考:EWA Volume Splatting
- View transformation:将世界坐标系下坐标转换到相机坐标系。假设是世界坐标系下坐标,是相机坐标系下坐标,则有仿射变换,可得。
- Projective Transformation(透视变换):将相机坐标系下坐标转换到图像空间,该转换不是仿射变换。假设是图像空间下坐标,则有。由于该变换不是放射变换,因此考虑:,得到局部放射近似,其中。最终可得。
协方差矩阵具有物理含义,需要满足半正定条件。考虑协方差矩阵描述了一个标准球体向椭球体的变化过程,对标准球体先放缩,再旋转:
因此,缩放可以用三维向量描述,也即协方差矩阵的三个特征值。旋转其实是三个特征向量,它们两两正交且模为1,通过分析可由四维向量描述。
综上,一个3D Gaussian可由三个缩放系数、四个旋转系数、中心点位置和不透明率表示。除了上述提到的参数外,本文还用SH系数表示颜色。
Optimization with Adaptive Density Control of 3D Gaussians
- 不透明率通过sigmoid激活函数映射至0到1之间。
- 损失函数如下:
Gaussian的优化过程中,本文考虑以下两种情况:
- 异常:移除小于阈值的高斯。
- 梯度异常:梯度超过阈值时,本文认为梯度异常,考虑存在under-reconstruction或over-reconstruction:
- under-reconstruction:Gaussians太小了,不能覆盖必要几何。本文考虑复制相同大小的Gaussian,新Gaussian放至位置梯度所指方向;
- over-reconstruction:对于方差太大的Gaussians,本文将其拆分为两个Gaussians,两个都缩放,新Gaussian的位置通过在旧Gaussian中采样决定。
- 特殊情况:
- 漂浮物(floaters)会导致Gaussian密度的异常增加。本文提出,每 iter,将所有设置为近似为0的值。在优化后,对于没有增大的Gaussian,则根据前述规则去除掉。
- 对于具有非常大worldspace和相机坐标中具有较大footprint的Gaussian也会去除掉。
Fast Differentiable Rasterizer for Gaussians
提出一种tile-based rasterizer
- 光栅化:
- 将屏幕划分为16 x 16块,一次性预排序所有primitives,避免针对每个像素排序的开销
- 仅保留有99%置信度的Gaussians
- 用保护带(guard band)拒绝极端位置的高斯,例如:距离平面太近,或在视锥体之外太远的高斯;
- 实例化高斯,并赋予每个高斯一个键值,包括视觉空间深度和块ID
- 根据键值排序高斯。对于每个块,得到一个根据深度由近到深排序的列表
- 在光栅化过程中,每个块使用一个线程去处理,每个线程首先将Gaussians加载到shared memory。对于给定像素点,从前往后遍历列表,根据加权求和颜色。当达到目标饱和值时,该进程停止,得到该像素点的颜色。
- 梯度回传:从最后一个点,从后往前遍历列表,选择对应的Gaussian反传梯度。
Implementation, Results and Evaluation
Implementation
Pytorch + 用于光栅化的custom CUDA kernels
Results and Evaluation
Real-World Scenes
Synthetic Bounded Scenes
- 30K迭代后,每个场景由200-500K Gaussians组成
Ablations
Initialization from SfM
Densification
Unlimited depth complexity of splats with gradients
Anisotropic Covariance
Limitations
- 对于缺乏训练数据的场景,存在失真,Mip-NeRF360也存在:
- 存在拉长失真(elongated artifacts),比较脏的高斯(splotchy Gaussians),Mip-NeRF360也有
- 相较于NeRF-based方法,内存开销大,需要20GB GPU memory