3D Gaussian Splatting:一种高效的3D场景表示与渲染方法
3D Gaussian Splatting:一种高效的3D场景表示与渲染方法
3D Gaussian Splatting(3DGS)是一种先进的视图合成方法,通过优化3D高斯函数来实现高质量的3D场景表示。与传统的NeRF方法相比,3DGS在训练速度和渲染质量上都有显著优势。本文将深入解析3DGS的核心原理和实现细节。
3D Gaussian的基本概念
在传统的光栅化方法中,场景通常由多个三角形面片组成。而在3DGS算法中,渲染的基本图元变成了3D高斯函数(可以想象成一个三维空间的椭球体)。多个3D高斯函数会相互重叠,共同构成复杂的场景结构。
3D高斯函数的参数包括:
- 位置(均值μ):确定椭球体在空间中的位置
- 协方差矩阵(Σ):控制椭球体的形状、大小和方向
- 不透明度(α):控制透明度
- 颜色(RGB)或球谐系数(SH):定义颜色信息
值得注意的是,协方差矩阵必须保持正半定性。为了确保这一点,3DGS采用了一种特征值分解的方法,将协方差矩阵分解为旋转矩阵(R)和缩放矩阵(S),从而避免了传统梯度下降方法中可能破坏正半定性的风险。
Splatting和Rasterization技术
要将3D高斯函数投影到2D图像上,3DGS采用了Splatting技术。具体来说,通过替换协方差矩阵,将3D高斯函数从模型空间转换到世界空间,再通过视图变换矩阵(W)转换到相机空间,最后使用雅可比矩阵(J)近似投影变换。
为了加速渲染过程,3DGS采用了基于Tile的栅格化方法,将图像分割成多个16x16的Tile,每个Tile独立计算颜色值。当一个3D高斯函数投影到多个Tile时,会实例化多次,并根据视图空间深度和Tile ID生成键值,然后使用快速GPU基数排序进行排序。
初始化和优化过程
3DGS的初始化过程依赖于Structure from Motion(SfM)算法,从输入图像中获取一组点云。然后将这些点云转换为3D高斯函数,作为模型训练的初始状态。
在优化阶段,3DGS使用随机梯度下降(SGD)对各个参数进行优化,损失函数结合了L1和D-SSIM(结构差异指数)。此外,还采用了自适应细化(Adaptive Densification)策略,通过克隆小高斯函数和分离大高斯函数来动态调整3D场景的密度。
总结
3D Gaussian Splatting通过优化3D高斯函数,实现了高质量的3D场景表示和实时渲染。这种方法在训练速度和渲染质量上都优于传统的NeRF方法,为3D场景重建和渲染提供了新的解决方案。
参考资料
- Kerbl, B., Kopanas, G., Leimkühler, T., & Drettakis, G. 3D Gaussian Splatting for Real-Time Radiance Field Rendering. ACM Trans. Graph. (SIGGRAPH) 2023.
- Understanding and Exploring 3D Gaussian Splatting: A Comprehensive Overview
- Introduction to 3D Gaussian Splatting
- A Guide to 3D Gaussian Splatting & How to Create One
- 3D生成: 3D Gaussian Splatting(3DGS)
- Introduction to 3D Gaussian Splatting(与Ref2不一样)
- [NeRF坑浮沉记]3D Gaussian Splatting入门:如何表达几何
- 一文带你入门 3D Gaussian Splatting
- 3D Gaussian Splatting中的数学推导