性能提升10倍 | 实时大场景渲染:3D高斯分层表示新突破
性能提升10倍 | 实时大场景渲染:3D高斯分层表示新突破
实时渲染大规模场景是计算机图形学领域的一个重要挑战。本文介绍了一种名为“Hierarchical 3D Gaussian Representation”的方法,通过构建3D高斯体层次结构,实现了对大型场景的高效实时渲染。该方法不仅解决了现有方法在渲染大型场景时资源受限的问题,还在保持高质量视觉效果的同时,实现了对大型场景的并行处理。
方法创新点
- 基于3DGS的新型层次结构
- 优化层次结构的内部节点
- 基于分块策略的3DGS训练和渲染
层次化LOD方法
层次化LOD方法用于3DGS场景的渲染。为每个小块创建一个树形层次结构,其中包含内部节点和叶节点。定义了一种合并3DGS原始基元的方法,以创建层次结构的内部节点。内部节点和叶节点都使用3D高斯分布来表示,具有位置、协方差矩阵、SH系数和不透明度等属性。使用AABB包围盒BVH来构建层次结构,并从叶节点开始递归地合并节点,直到根节点。
定义了节点粒度,即节点在屏幕上的投影尺寸。根据目标粒度选择合适的裁剪点,从而在质量和效率之间取得平衡。通过插值3D高斯分布的属性来实现不同层级之间的平滑过渡。通过优化子节点的旋转方向,避免在插值过程中出现不希望的旋转。使用特殊的方法来插值内部节点的不透明度,以保持与父节点的一致性。
如何优化和压缩3DGS层次结构
该部分主要探讨了如何优化和压缩3DGS层次结构,以提高视觉质量和渲染效率。
目标:3DGS层次结构是通过将几何基元进行聚合构建的,为了更好地考虑外观信息,需要进一步优化中间节点,从而提高层次结构的整体视觉质量。
方法:
随机目标粒度:在优化过程中,随机选择训练视图和目标粒度,而不是简单地使用下采样图像。这样可以确保节点在多个不同的层次上都被优化,从而保留更多的视觉细节。
梯度传播:为了同时优化子节点和父节点,并实现平滑的层次切换,需要将梯度正确地传播到层次结构的多个层级。
避免不必要的旋转:由于高斯函数的旋转轴可能存在歧义,直接插值可能导致不希望出现的旋转。因此,在层次结构生成过程中,需要对每个子节点的坐标轴进行重新解释,以最小化子节点与其父节点之间的相对旋转。
目标粒度:与传统LOD方法不同,本文的目标粒度是通过投影屏幕区域来定义的,而不是简单地基于距离。这允许在保持视觉细节的同时,对节点进行更精细的控制。
优化策略:
抗锯齿:为了解决3DGS方法在抗锯齿方面的不足,本文使用了EWA过滤器方案。
问题:层次结构会带来一定的内存开销,并且如果父节点的尺寸仅比子节点略大,则这些节点可能在训练过程中很少被选中,从而导致优化不足。
方法:
稀疏化树结构:通过标记叶子节点为相关节点,并删除那些尺寸过大或过小的节点,从而稀疏化树结构,提高优化效率。
保留细节:保留那些在最低目标粒度下仍然重要的节点,以确保层次结构中保留足够的细节信息。
总的来说,通过优化和压缩层次结构,本文的方法能够在保持良好视觉质量的同时,提高渲染效率,从而实现实时渲染大规模场景的目标。
训练大规模场景
该部分主要介绍了如何使用分块优化策略来训练大规模场景,并解决稀疏数据带来的挑战。
首先,对整个场景进行粗略的优化,以创建一个基本的支架和天空盒,为后续的分块优化提供背景细节。将场景划分为多个分块,每个分块的大小根据场景的捕获方式(步行或车载)进行设置。每个分块使用包含该分块或周围2倍范围内相机的图像进行训练。
为每个分块创建一个天空盒,以捕获天空的效果,并防止不同分块之间出现不一致的天空内容。对分块外的粗略环境和天空盒进行临时优化,仅优化透明度和球谐系数。使用3DGS优化方法对分块内的内容进行优化,并使用正确抗锯齿方案。为了解决稀疏数据带来的挑战,将3DGS优化中的密度策略从基于屏幕空间位置梯度的平均值改为最大值,从而更好地控制基元的密度。使用单目深度估计和SfM点进行深度监督,以改善场景的重建质量,尤其是在道路上。
将每个分块生成的3D高斯函数和层次结构进行整合,并删除那些不属于任何分块的基元。创建一个包含整个场景的根节点的全局层次结构。通过设置目标粒度阈值并找到相应的层次结构切面,进行实时渲染。
总结:通过分块优化策略,本文的方法能够有效地训练大规模场景,并解决稀疏数据带来的挑战,从而实现实时渲染大规模场景的目标。
实现细节
该部分介绍了本文方法的实现细节,以及数据集捕获和预处理的过程。
基于3DGS的C++和Python/PyTorch实现进行开发,并修改了SIBR视频播放器以实现快速渲染。使用PyTorch的自动微分功能进行层次结构优化,并手动推导了公式12中的梯度。在层次结构优化过程中,使用stop gradient操作符冻结叶节点的属性,避免对其进行优化。
使用自行车头盔上安装的5或6个GoPro HERO6相机进行数据捕获。使用COLMAP进行相机姿态估计,并使用分层映射器和额外的分块捆绑调整步骤来提高处理速度和精度。包括曝光校正、移除运动物体(如汽车、自行车等)和去除人类以及车牌等步骤。
由于合并后的高斯函数可能会导致α值大于1,因此在训练过程中使用绝对值激活函数来替代3DGS原有的指数激活函数。为了鲁棒性,在发生α值截断时将高斯函数的透明度梯度置为零。
总结:本文方法的实现细节和数据处理过程都经过了精心设计,以确保能够有效地训练和渲染大规模场景,并实现实时渲染的目标。
实验结果
该部分展示了本文方法在四个数据集上的结果,并与其他方法进行了比较。
- 实时导航:补充视频展示了本文方法能够在捕获的大型场景中进行实时导航,并展示了不同区域和不同粒度设置下的渲染效果。
- 数据集统计:表1列出了四个数据集的统计数据,包括图像数量、距离、面积和相机数量。
- 优化时间和内存使用:表2列出了每个数据集的分块优化、单块优化和层次结构优化所需的时间、峰值内存使用量和磁盘大小。
- 视觉质量:虽然整体视觉效果良好,但仍然存在一些由稀疏数据和场景中的干扰物(如移动的汽车)导致的视觉伪影。
- 与其他方法的比较:由于其他方法无法直接处理本文的大型场景,因此选择将本文方法在单个分块上的结果与其他方法进行比较。结果表明,本文方法在视觉质量方面优于其他方法,尤其是在处理稀疏数据方面。
- 层次结构优化的影响:表2显示,层次结构优化可以显著提高渲染质量,尤其是在使用较粗粒度设置时。
- 性能分析:表4和表5分析了本文方法的渲染性能,并与其他方法进行了比较。结果表明,本文方法的LOD机制可以有效地降低渲染负载和内存消耗,从而实现实时渲染。
- 消融实验:通过去除一些算法组件,评估了每个组件对结果的影响。结果表明,层次结构整合、深度监督、分块捆绑调整、曝光校正和层次结构优化都对最终结果产生了积极的影响。
总的来说,本文方法在四个大型数据集上取得了良好的结果,并与其他方法进行了比较,证明了其在实时渲染大规模场景方面的优越性。
总结
本文提出了一种名为“Hierarchical 3D Gaussian Representation”的方法,旨在实时渲染大规模场景。该方法利用3D高斯函数的层次结构来表示场景,并通过LOD机制实现高效渲染。为了处理大规模场景,该方法将场景划分为多个分块进行独立优化,并引入了深度监督和改进的密度策略来解决稀疏数据带来的挑战。实验结果表明,该方法能够实时渲染大规模场景,并取得优于其他方法的渲染质量。