今日学习内容
3DGS
关于我目前的思路
1.首先渲染一个高质量的基础模型.
2.然后通过设计细节降级脚本,将基础模型降级到不同细节程度的模型.
3.然后将3D空间进行分块,预先计算当相机位于该分块时的高斯激活表(高效的索引结构).
4.渲染时,根据相机位置,读取对应的高斯激活表,然后根据高斯激活表,渲染对应细节程度的模型.
做PPT(两篇文章):Octree-GS- Towards Consistent Real-time Rendering with LOD-Structured 3D Gaussians LODGE: Level-of-DetailLarge-Scale Gaussian Splatting with Efficient Rendering
PPT
1
这周我汇报的是这两篇论文,一篇是关于使用八叉树+分级渲染的3DGS,另一篇是谷歌25年提出的使用分级渲染的3DGS.都是关于在大规模场景对渲染可行性和帧率进行优化的论文.
2
首先介绍这个八叉树分级渲染的3DGS.
传统的3DGS虽然渲染质量高,但是在处理大规模场景时存在两个问题:
- 渲染冗余,无论物体远近,所有高斯球都会被渲染,导致整体计算资源浪费,在距离相机远的时候会导致帧率下降严重.
- 缺乏细节层次,无法根据观察距离动态调整细节,导致远处细节过多而近处细节不足.
所以这篇文章通过引入层次化的八叉树结构和LOD机制,实现了动态选择不同尺度的高斯球,从而在保持视觉质量的同时显著提升渲染效率。
3
首先介绍这篇文章设计的八叉树结构
首先会将场景分成多层级的体素网格,每个体素中心定义一个锚点,每个锚点对应多个高斯球,较高级别的LOD对应较小体素大小,LOD越高细节越丰富,在第K级渲染的图像会光栅化从0到K的所有高斯球。
左侧的公式可以看到,八叉树层数K由观测距离范围决定,其中d是剔除异常值后的最大最小值.
然后右侧公式是锚点的选择机制,对于给定的视角i.
4
首先是文章的生长-剪枝策略:
初始就是从低层级开始,然后在训练过程通过判断梯度大小来决定是否增加层级或者增加锚点,比如梯度很小,那就不变,梯度比较大,增加锚点,梯度非常大的话增加更高的层级.然后就是剪枝策略,通过可见频率和透明度剔除无效锚点,减少冗余和浮点伪影.
然后是渐进式的训练策略,采用由粗到细的训练方式,在优化过程中逐步激活更精细的LOD级别,并且使粗粒度锚点有更多时间学习远视角场景重建.
可以看到使用渐进式的训练策略后,低层级的锚点会有更加清晰地轮廓.
5
然后这个是额外的外观补偿模块,针对大规模场景中曝光补偿不一致的问题,集成生成潜在优化(GLO)来生成高斯基元的颜色
为每个锚点引入可学习的个体外观代码
允许对光照和外观进行详细控制
6
然后就是这篇文章所做的实验,可以看到中间的本文的方法,在远距离可以使用更少的高斯球来表示,渲染帧率有明显的提升,并且点云的层次更加清晰.
7
然后这是渲染效果图的对比.
8
然后这个实验的表格.
可以看到Octree-GS在保持视觉质量的同时,显著减少了渲染所需的高斯基元数量和存储需求。
9
然后这是不同分级的渲染质量对比.
10
然后这是在不同数据集上的渲染质量对比.
11
然后这是渲染帧率的对比,可以看到在随着视角远离,文章的渲染帧率可以保持在比较高的渲染帧率.
这篇文章使得渲染帧率不会随着高斯球规模增加而没有限度的降低的问题.
//但是由于引入了复杂的八叉树结构,渲染过程会额外增加一个遍历树和LOD的选择过程,所以训练时间会有所增加.
12
然后是第二篇,在解决大规模3DGS场景在内存显存受限设备(如移动设备)上的实时渲染问题。论文的核心贡献是引入了一种LOD表示方法,结合分块渲染,显著降低了渲染时间和GPU显存使用,同时保持了高质量的视觉输出
13
左边可以看到,展示了场景的多层次LOD表示,每个LOD级别包含不同细节的高斯分布。根据相机距离选择“活跃高斯”(active Gaussians),近距离使用高细节,远距离使用低细节。
右边展示了文章的分块渲染策略。相机位置被聚类为多个块(chunks),每个块预计算其活跃高斯集合。渲染时,动态加载最近的两个块,并通过透明度混合(opacity blending)平滑过渡,避免视觉瑕疵。
14
然后就是这个方法的整体结构,首先按照原始方法训练一个高质量的模型,然后通过第二个公式进行3D平滑滤波构建更加低细节度的模型.同时会对模型进行3D分块,并且预先计算相机位于每个分块时,对应的活跃高斯集合,也就是相当于预先计算相机位于不同位置时,哪些分块使用高细节模型,哪些使用低细节模型.通过映射表进行记录,使得渲染时的开销减小.
并且在渲染时,会动态加载最近的两个分块,通过第三个公式,对分块边界的高斯进行透明度混合,避免视觉瑕疵.
第一个公式就是活跃高斯选择公式.
相当高斯会根据其与相机的距离被分配到不同的LOD级别.
然后第二个公式,相当于相当于构建更低细节LOD所使用的公式,通过平滑滤波的方式来获取更低细节度的模型.
第三个公式,用于分块边界的高斯透明度混合.
15
第一个图表示像素点需要处理的可见高斯数量.可以看到原版3DGS会存在渲染的严重不均衡,大量的像素会对应很多高斯球,导致渲染的性能下降.
而文章的方法可以明显的减少长尾效应,需要处理极端数量高斯的像素点大大减少.
第二个图代表使用不同分级阈值下,渲染成本的热力图,可以通过计算平均每屏幕块需要处理的高斯数量,来避免手动选择阈值,获取最佳的阈值.
16
这个是该方法的实验对比,可以看到比刚才的八叉树高斯的渲染帧率有更加明显的提升,这是因为八叉树方法渲染时需要进行遍历树的额外开销,而本方法通过预先计算相机位于不同位置的活跃高斯集合,使得渲染时可以跳过一些不必要的计算.相当于用空间换取时间.
17
这些是渲染的效果图
18
然后这是不同分级的一些实验
19
然后这是进行的消融实验
并且还可以看到在不同设备或者显存受限设备进行渲染的测试的可行性实验.
20
总结的话,这两篇文章都是解决大规模场景的渲染帧率下降的问题,核心都是通过对远处的高斯进行降级,来减少渲染的开销.
力扣每日一题
JAVA并发编程篇
10/71 学习中,正在完善笔记.
Redis学习笔记
5/57 学习中,正在完善笔记.
简历制作
大概初版已经差不多了.