摘要:
最近,辐射场方法彻底改变了使用多张照片或视频捕获的场景的新视角合成技术。但是,要达到高视觉质量,仍然需要训练和渲染成本很高的神经网络。而最近一些速度更快的方法则不可避免地在速度和质量之间做出权衡。对于完整场景(而不仅仅是孤立的物体)以及1080p分辨率的渲染,目前还没有方法能够实现实时显示速率。
我们引入了三个关键部分,使我们能够在保持竞争力的训练时间的同时,实现最先进的视觉质量,并且重要的是,允许在1080p分辨率下进行高质量的实时(每秒≥30帧)新视角合成。首先,从相机校准过程中产生的稀疏点开始,我们使用3D高斯来表示场景,这种表示方法在优化场景时保留了连续体积辐射场的理想特性,同时避免了在空白空间中进行不必要的计算;其次,我们对3D高斯进行交错优化和密度控制,特别是优化各向异性协方差,以实现对场景的准确表示;第三,我们开发了一个快速的可见性感知渲染算法,支持各向异性溅射,既加快了训练速度,也允许实时渲染。我们在几个已建立的数据集上展示了最先进的视觉质量和实时渲染效果。
1 引言
网格和点是最常见的3D场景表示方法,因为它们很明确,并且非常适合快速的GPU/CUDA基础的光栅化处理。相比之下,最近流行的神经辐射场(NeRF)方法则基于连续的场景表示,通常通过体积光线行进技术优化一个多层感知器(MLP),用于捕获场景的新视角合成。同样,到目前为止最有效的辐射场解决方案也通过插值存储在体素(例如Fridovich-Keil和Yu等人在2022年的研究)或哈希(例如Müller等人在2022年的研究)网格或点(例如Xu等人在2022年的研究)中的值来构建连续表示。
虽然这些方法的连续性有助于优化,但渲染所需的随机采样成本很高,可能会导致噪声。我们引入了一种新的方法,结合了两种方法的优点:我们的3D高斯表示允许在优化时达到最先进的视觉质量,并且训练时间具有竞争力,而我们基于瓦片的溅射解决方案确保了在多个之前发布的数据集上,1080p分辨率的实时渲染能够达到最先进的质量(见图1)。这些数据集包括Barron等人在2022年、Hedman等人在2018年、Knapitsch等人在2017年的研究。
我们的目标是让使用多张照片捕获的场景能够进行实时渲染,并创建出优化时间尽可能快的表示,以赶上以往最高效方法的水平。最近的方法虽然实现了快速训练(例如Fridovich-Keil和Yu等人在2022年的研究,以及Müller等人在2022年的研究),但它们在视觉质量上难以达到当前最先进的NeRF方法(即Mip-NeRF360,Barron等人在2022年的研究)的水平,后者需要长达48小时的训练时间。虽然快速但质量较低的辐射场方法能够根据不同场景实现交互式渲染时间(每秒10-15帧),但它们在高分辨率下的实时渲染方面还是不够的。
我们的解决方案建立在三个主要组成部分上。首先,我们引入了3D高斯作为灵活且富有表现力的场景表示方法。我们使用与之前的NeRF类似方法相同的输入,即通过运动恢复结构(Structure-from-Motion,简称SfM)校准的相机,并使用SfM过程中免费产生的稀疏点云初始化一组3D高斯。大多数基于点的解决方案都需要多视图立体(Multi-View Stereo,简称MVS)数据作为支撑,而我们仅仅使用SfM点作为输入就能获得高质量的结果。请注意,对于NeRF合成数据集,即使采用随机初始化,我们的方法也能实现高质量渲染。3D高斯的渲染效果非常好,这是因为它们是可微分的体积表示。并且我们可以通过将3D高斯球投影到2D平面并应用标准的α混合来高效地实现光栅化,并使用与NeRF等效的图像形成模型。
我们方法的第二个组成部分是优化3D高斯的属性,即优化3D位置、不透明度α、各向异性协方差和球谐(Spherical Harmonics,简称SH)系数。属性的优化将与高斯的自适应密度控制步骤交错进行,即在优化过程中动态地添加或移除3D高斯。经过优化后,我们可以得到一个相当紧凑、非结构化且精确的场景表示(所有测试场景的高斯数量在1-500万之间)。
我们方法的第三个也是最后一个部分是我们的实时渲染解决方案,它使用快速的GPU排序算法,并受到基于瓦片的光栅化启发,遵循最近的工作。然而,由于我们的3D高斯表示,我们可以执行各向异性溅射,不过溅射的最终形态需要遵循可见性排序的结果(即在多个高斯重叠的区域,可见性高的高斯应覆盖在可见性低的高斯之上)。我们还通过网络跟踪所需数量的排序溅射的遍历来实现快速准确的反向传递。
总结来说,我们做出了以下贡献:
* 引入了高质量、非结构化表示的各向异性3D高斯作为辐射场。
* 提出了一种3D高斯的优化方法,属性优化与自适应密度控制交错进行,实现了场景的高质量的表示。
* 提出了一种快速、可微分的GPU渲染方法,具有可见性感知能力,允许各向异性溅射和快速反向传播,以实现高质量的新视角合成。
由在公开数据集上的实验结果表明,我们可以通过多视角图像优化我们的3D高斯,并实现与之前最佳的隐式辐射场方法相等或更好的质量。我们还可以实现与最快方法相似的训练速度和质量。重要的是,我们为新视角合成提供了首个具有高质量的实时渲染方法。
2 相关工作
我们首先简要回顾了传统的重建技术,然后讨论了基于点的渲染和辐射场的工作,并讨论了它们的相似性;辐射场是一个广泛的领域,因此我们只关注直接相关的工作。有关该领域的完整覆盖,请参见最近的优秀综述[塔瓦里等人,2022年;谢等人,2022年]。
2.1 传统场景重建和渲染
最早的新视角合成方法基于光场,首先是密集采样的[戈尔特勒等人,1996年;勒沃伊和汉拉汉,1996年],然后是允许非结构化捕获的[布勒等人,2001年]。运动恢复结构(Structure-from-Motion,简称SfM)[斯纳维利等人,2006年]的出现使得一个全新的领域成为可能,在该领域中,一组照片可以用来合成新的视角。SfM在校准相机期间估计了一个稀疏点云,最初用于简单的3D空间可视化。随后的多视图立体(MVS)技术在多年来产生了令人印象深刻的完整3D重建算法[格瑟莱等人,2007年],促进了几种视角合成算法的发展[查乌拉西亚等人,2013年;艾斯曼等人,2008年;赫德曼等人,2018年;科帕纳斯等人,2021年]。所有这些方法都将输入图像重新投影并融合到新视角的相机中,并使用几何形状指导这种重新投影。这些方法在许多情况下都产生了优秀的结果,但通常无法完全从未重建区域或“过度重建”中恢复,即当MVS生成不存在的几何形状时。最近的神经渲染算法[塔瓦里等人,2022年]大幅减少了这种伪影,并避免了在GPU上存储所有输入图像的巨大成本,在大多数方面都超越了这些方法。
2.2 神经渲染和辐射场
深度学习技术很早就被用于新视角合成[弗林等人,2016年;周等人,2016年];卷积神经网络(CNN)被用来估计混合权重[赫德曼等人,2018年],或用于纹理空间解决方案[里格勒和科尔图恩,2020年;泰斯等人,2019年]。使用基于MVS的几何是这些方法的主要缺点;此外,使用CNN进行最终渲染经常导致时间上的闪烁。
体积表示法用于新视角合成是由Soft3D[彭纳和张,2017年]首次提出的;随后提出了与体积光线行进相结合的深度学习技术[亨兹勒等人,2019年;齐特曼等人,2019年],建立在连续可微的密度场来表示几何形状。使用体积光线行进进行渲染由于需要查询大量的样本,因此成本显著。神经辐射场(NeRF)[米尔登霍尔等人,2020年]引入了重要性采样和位置编码来提高质量,但使用了一个大型多层感知器,这影响了速度。NeRF的成功导致了大量后续方法的出现,这些方法通过引入正则化策略来解决质量和速度问题;目前新视角合成图像质量的最先进技术是Mip-NeRF360[巴伦等人,2022年]。虽然渲染质量非常出色,但训练和渲染时间仍然非常长;我们能够在提供快速训练和实时渲染的同时,实现或在某些情况下超越这种质量。
渲染领域,主要是通过利用三种设计选择来实现的:(1)使用空间数据结构来存储(神经)特征,这些特征在体积光线行进过程中随后被插值,(2)不同的编码方式,(3)以及多层感知器(MLP)的容量。这些方法包括空间离散化的不同变体[Chen等人,2022b,a;Fridovich-Keil和Yu等人,2022;Garbin等人,2021;Hedman等人,2021;Reiser等人,2021;Takikawa等人,2021;Wu等人,2022;Yu等人,2021],码本[Takikawa等人,2022],以及如哈希表[Müller等人,2022]这样的编码方式,允许使用更小的MLP或完全放弃神经网络[Fridovich-Keil和Yu等人,2022;Sun等人,2022]。
这些方法中最值得注意的是InstantNGP[Müller等人,2022],它使用哈希网格和占用网格来加速计算,并使用更小的MLP来表示密度和外观;还有Plenoxels[Fridovich-Keil和Yu等人,2022],它使用稀疏的体素网格来插值连续的密度场,并且能够完全放弃神经网络。两者都依赖于球谐函数:前者直接表示方向效应,后者对其输入到颜色网络进行编码。虽然两者都提供了出色的结果,但这些方法在某些场景/捕获类型下仍然难以有效表示空白空间。此外,图像质量在很大程度上受到用于加速的结构化网格选择的限制,而渲染速度则受到必须为给定的光线行进步骤查询许多样本的需求的阻碍。而我们使用的无结构的、明确的GPU友好的3D高斯实现了更快的渲染速度和更好的质量,而无需神经组件。
基于点的方法有效地渲染了不相连和无结构的几何样本(即,点云)[Gross和Pfister 2011]。在其最简单的形式中,点样本渲染[Grossman和Dally 1998]光栅化一组具有固定大小的无结构点集,这可能会利用图形API原生支持的点类型[Sainz和Pajarola 2004],或者在GPU上并行软件光栅化[Laine和Karras 2011; Schütz等人 2022]。虽然点样本渲染忠实于底层数据,但它存在空洞,会引起混叠,并且是严格不连续的。开创性的高质量基于点的渲染工作通过“溅射”比像素大的点原语来解决这些问题,例如,圆形或椭圆形光盘、椭球体或表面元素[Botsch等人 2005; Pfister等人 2000; Ren等人 2002; Zwicker等人 2001b]。
最近对可微分的基于点的渲染技术有兴趣[Wiles等人 2020; Yifan等人 2019]。点已经通过神经特征增强,并使用CNN进行渲染[Aliev等人 2020; Rückert等人 2022],从而实现快速甚至实时的视图合成;然而,它们仍然依赖于MVS进行初始几何形状的生成,因此继承了它的伪影,最明显的是在特征不足/反光区域或薄结构等困难情况下的过度或不足重建。
基于点的α混合和NeRF风格的体积渲染在本质上共享相同的图像形成模型。具体来说,颜色C是通过沿射线进行体积渲染给出的
其中密度σ、透射率T和颜色c的样本沿射线以间隔δi取得。这可以重写为:
它是一个典型的基于神经点的方法(例如,[Kopanas 等人,2022 年,2021 年])通过混合重叠像素的 N 个有序点来计算像素的颜色C:
其中 ci 是每个点的颜色,αi 是通过计算协方差 Σ 的二维高斯 [Yifan 等人,2019] 乘以学习的每点不透明度给出的。
从公式2和公式3,我们可以清楚地看到图像形成的模型是相同的。然而,渲染算法却非常不同。NeRF是一种连续表示,隐式地表示空间是空的还是被占据的;需要昂贵的随机采样来找到公式2中的样本,随之而来的是噪声和计算成本。相比之下,点是无结构的、离散的表示,它足够灵活,可以允许创建、销毁和移动几何体,类似于NeRF。这是通过优化不透明度和位置来实现的,正如之前的作品[Kopanas等人,2021]所展示的,同时避免了完整的体积表示的缺陷。
Pulsar[Lassner和Zollhofer 2021]实现了快速的球体光栅化,这启发了我们的基于瓦片和排序的渲染器。然而,鉴于上述分析,我们希望保持(近似)传统的α混合在排序的溅射上,以拥有体积表示的优势:我们的光栅化尊重可见性顺序,与他们的无序方法形成对比。此外,我们在像素上的所有溅射上反向传播梯度,并光栅化各向异性的溅射。这些元素都有助于我们结果的高视觉质量(见第7.3节)。此外,上述提到的方法也使用CNN进行渲染,这导致时间上的不稳定性。尽管如此,Pulsar[Lassner和Zollhofer 2021]和ADOP[Rückert等人,2022]的渲染速度成为我们开发快速渲染解决方案的动力。
专注于镜面效应的同时,Neural Point Catacaustics[Kopanas等人,2022]的漫反射基于点的渲染轨迹通过使用MLP克服了这种时间上的不稳定性,但仍然需要MVS几何作为输入。在这一类中的最新方法[Zhang等人,2022]不需要MVS,也使用SH来表示方向;然而,它只能处理单个物体的场景,并且需要掩膜进行初始化。虽然对于小分辨率和低点数的场景很快,但它如何扩展到典型数据集[Barron等人,2022;Hedman等人,2018;Knapitsch等人,2017]的场景尚不清楚。我们使用3D高斯进行更灵活的场景表示,避免了对MVS几何的需求,并得益于我们针对投影高斯的基于瓦片的渲染算法,实现了实时渲染。
最近的一种方法[Xu等人,2022]使用点来表示辐射场,采用径向基函数方法。他们在优化过程中采用点剪枝和密集化技术,但使用体积光线行进技术,无法实现实时显示率。
在人类行为捕捉领域,3D高斯已经被用来表示捕获的人体[Rhodin等人,2015;Stoll等人,2011];最近,它们已经被用于视觉任务中与体积光线行进技术相结合[Wang等人,2023]。在类似的情境中也提出了神经体积原语[Lombardi等人,2021]。虽然这些方法启发了我们选择3D高斯作为场景表示,但它们专注于重建和渲染单个孤立对象(如人体或面部)的特定情况,导致场景的深度复杂性较小。相比之下,我们对各向异性协方差的优化、交错优化/密度控制,以及高效的深度排序渲染技术使我们能够处理完整、复杂的场景,包括背景,无论是室内还是室外,以及具有较大深度复杂性的场景。
3 概述
我们方法的输入是一组静态场景的图像,以及通过SfM(运动恢复结构)[Schönberger和Frahm 2016]校准的相应相机,这个过程还会产生一个稀疏的点云作为副产物。从这些点出发,我们创建一组3D高斯(第4节),它们由位置(均值)、协方差矩阵和不透明度α定义,这种定义适应了非常灵活的优化机制,可以生成一个相当紧凑的3D场景表示。之所以如此是因为我们的方法可以使用高度各向异性的体积溅射来紧凑地表示精细结构。辐射场的方向外观组件(颜色)通过球谐函数(SH)表示,遵循标准做法[Fridovich-Keil和Yu等人,2022;Müller等人,2022]。 我们的算法通过一系列3D高斯参数的优化步骤,即位置、协方差、α和SH系数,并与自适应控制高斯密度的操作交错进行,来创建辐射场表示(第5节)。我们方法能高效运行的关键在于基于“瓦片”的光栅化器(第6节),它允许各向异性溅射的α混合,并通过对快速排序来尊重可见性顺序。我们的快速光栅化器还包括一个快速的反向传递,通过跟踪累积的α值,而不限制可以接收梯度的高斯数量。我们方法的概述如图2所示。
4 可微分的3D高斯溅射
我们的目标是优化一个场景表示,从一组稀疏的(SfM)点开始进行高质量的新视角合成(与2DGS不同,这些点并没有法线)。为此,我们需要一个原始体,它继承了可微分体积表示的特性,同时是无结构和显式的,以便允许非常快速的渲染。我们选择3D高斯,它们是可微分的,并且可以轻松地投影到2D溅射,允许快速的α混合进行渲染。
我们的表示方法与之前使用2D点的方法有相似之处,这些方法假设每个点是一个带有法线的小型平面圆[Kopanas等人,2021;Yifan等人,2019]。考虑到SfM点的极端稀疏性,估计法线是非常困难的。同样,从这种估计中优化非常嘈杂的法线将是非常具有挑战性的。相反,我们将几何形状建模为一组不需要法线的3D高斯。我们的高斯由在世界空间中定义的完整3D协方差矩阵Σ定义,中心位于点(均值)μ:
这个高斯在混合过程中会乘以α。
然而,我们需要将我们的3D高斯投影到2D成像平面上以进行渲染。Zwicker等人[2001a]展示了如何将这种投影到图像空间。给定一个视图变换W,相机坐标中的协方差矩阵Σ′如下所示:
其中J是投影变换的仿射近似的雅可比矩阵。Zwicker等人[2001a]还表明,如果我们删除Σ′的第三行和第三列,我们就会得到一个2×2方差矩阵,其结构和属性与我们从带有法线的平面点开始时相同,就像之前的作品[Kopanas等人,2021]。
显然的方法是直接优化协方差矩阵Σ以获得代表辐射场的3D高斯。然而,协方差矩阵只有在它们是半正定时才具有物理意义。对于我们所有参数的优化,我们使用梯度下降,这不容易受到约束以产生这样的有效矩阵,更新步骤和梯度可以很容易地创建无效的协方差矩阵。
因此,我们选择了一种更直观但同样富有表现力的表示方法来进行优化。3D高斯的协方差矩阵Σ类似于描述一个椭球的配置。给定一个缩放矩阵S和旋转矩阵R,我们可以找到相应的Σ:
为了允许这两个因素的独立优化,我们分别存储它们:一个3D向量s用于缩放,一个四元数q来表示旋转。这些可以轻易地转换为它们各自的矩阵并组合,确保规范化q以获得一个有效的单位四元数。
为了避免在训练期间由于自动微分而产生显著开销,我们明确地推导了所有参数的梯度。确切的导数计算细节在附录A中。这种各向异性协方差的表示——适合优化——允许我们优化3D高斯以适应捕获场景中不同形状的几何形状,从而得到相当紧凑的表示。图3展示了这样的案例。
5 优化与3D高斯的自适应密度控制
我们方法的核心是优化步骤,它创建了一组密集的3D高斯,准确地代表了场景,以便进行自由视图合成。除了位置、不透明度和协方差矩阵之外,我们还优化了代表每个高斯颜色的球谐系数,以正确捕捉场景的视角依赖性外观。这些参数的优化与控制高斯密度的步骤交错进行,以更好地代表场景。
5.1 优化
在优化过程中,我们将连续迭代训练而渲染生成的图像与数据集中对应的训练视图进行比较。不可避免地,由于3D到2D投影的模糊性,几何形状可能被错误地放置。因此,我们的优化方法需要能够创建几何形状,但当几何形状被错误地放置时,优化方法也要能够销毁或移动几何形状。3D高斯的协方差参数的质量对于表示的紧凑性至关重要,因为可以用少量的大型各向异性高斯捕获大面积的均匀区域。
我们使用随机梯度下降技术进行优化,充分利用标准的GPU加速框架,以及添加一些操作的自定义CUDA核心,遵循最新的最佳实践[Fridovich-Keil和Yu等人,2022;Sun等人,2022]。特别是,我们的快速光栅化(见第6节)对于优化的效率至关重要,因为它是优化的主要计算瓶颈。
我们使用Sigmoid激活函数来将α值限制在[0,1)范围内,并获取平滑的梯度,同时使用指数激活函数来控制协方差的尺度,原因类似。我们估计初始协方差矩阵为各向同性的高斯分布,其轴等于最近三个点的距离的平均值。我们使用标准的指数衰减调度技术,类似于Plenoxels[Fridovich-Keil和Yu等人,2022],但仅用于位置。损失函数是L1损失与D-SSIM项的结合:
λ =0.2,用于平衡两种损失的贡献。L1损失有助于确保像素级别的准确性,而D-SSIM损失则有助于保持图像的整体结构和视觉质量。通过这种方式,我们可以在优化过程中同时考虑图像的细节和整体视觉效果。
5.2 自适应高斯控制
我们以从SfM中得到的初始稀疏点集为基础,应用我们的方法来自适应地控制高斯的数量及其在单位体积内的密度,逐步地将稀疏的高斯集合变得更加密集,从而以正确的参数更好地表示场景。在优化预热后(见第7.1节),我们每100次迭代进行一次密集化,并移除那些非常透明的高斯,即那些不透明度小于某个阈值的高斯。
在对高斯的自适应控制中,我们需要填充空白区域。其重点关注缺少几何特征的区域(高斯数量太少,无法覆盖物体)(即“欠重建”区域),但也关注高斯覆盖场景中大片区域的区域(高斯面积太大,一个高斯就覆盖了物体的大部分,从而导致缺少细节)(这通常对应于“过重建”)。我们观察到这两种情况都具有较大的视图空间位置梯度。直观地说,这很可能是因为它们所对应的区域重建效果不是很好,优化方法倾向于通过移动高斯来纠正这种重建错误。(在重建不好的区域,梯度会很大)
针对以上这两种情况都需要进行密集化处理,我们对平均视图空间位置梯度大小超过某个阈值的高斯进行密集化处理,在我们的测试中,我们将此阈值设置为0.0002。接下来,我们将介绍这个过程的详细内容,如图4所示。
对于位于欠重建区域的小高斯,我们的目标是覆盖需要创建的新几何体。为此,最好的方法是克隆高斯,即简单地创建一个同样大小的副本,并沿着位置梯度的方向移动它。
另一方面,在方差高的区域,大高斯需要被分割成更小的高斯。我们通过两个新的高斯来替换这样的高斯,并将它们的尺度除以一个因子,这是我们通过实验确定的。我们还使用原始的3D高斯作为采样的概率密度函数(PDF)来初始化它们的位置。
在高斯克隆的情况中,我们检测并处理了需要同时增加系统总体积和高斯数量的需求。而在高斯分裂的情况中,我们保持总体积不变,但增加了高斯的数量。与体积表示的其它方法类似,在优化过程中可能会遇到在靠近输入相机的位置有悬浮点的问题,这可能导致高斯密度不合理地增加。一个能有效控制高斯数量增长的方法是,每N次迭代(在我们的例子中,N等于3000)就将α值设定得接近零。
优化过程会在需要的地方增加高斯的不透明度,同时我们会移除那些不透明度小于某个阈值的高斯,如上所述。高斯可能会收缩或增长,并可能与其它高斯显著重叠,但我们会定期移除在空间中非常大的高斯,以及在视图空间中占据很大区域的高斯。这种策略使我们可以很好地控制高斯的总数量。在我们的模型中,高斯始终作为欧几里得空间中的原始元素;与其他方法[Barron等人,2022;Fridovich-Keil和Yu等人,2022]不同,我们不需要对远离或大型的高斯采取空间压缩、扭曲或投影策略。
6 快速可微分光栅化器用于高斯渲染
我们的目标是实现快速的整体渲染和快速排序,以便进行近似混合——包括各向异性的溅射——并避免之前工作中存在的对可接收梯度的溅射数量的硬性限制[Lassner和Zollhofer 2021]。
为了实现这些目标,我们设计了一种基于瓦片的光栅化器,用于高斯溅射,灵感来自最近软件光栅化方法[Lassner和Zollhofer 2021],这些方法可以预先对整个图像的原语进行排序,避免了以前混合解决方案中每个像素排序的成本[Kopanas等人 2022, 2021]。我们的快速光栅化器允许在任意数量的混合高斯上进行高效的反向传播,额外的内存消耗很低,每个像素只需要恒定的开销。我们的光栅化流程是完全可微分的,并且考虑到2D投影(第4节),可以像以前的2D溅射方法一样光栅化各向异性的溅射[Kopanas等人 2021]。
我们的方法首先将屏幕分割成16×16像素的瓦片,然后对3D高斯与视锥体和每个瓦片进行裁剪。具体来说,我们只保留与视锥体的99%置信区间相交的高斯。此外,我们使用一个保护带,轻易地拒绝那些处于极端位置的高斯(即,那些平均值接近近平面且远离视锥体的高斯),因为计算它们投影的2D协方差将是不稳定的。然后,我们根据它们重叠的瓦片数量实例化每个高斯,并为每个实例分配一个结合了视图空间深度和瓦片ID的键。然后我们使用一个快速的GPU Radix排序[Merrill和Grimshaw 2010]根据这些键对高斯进行排序。注意,没有额外的每个像素的排序,混合是基于这种初始排序进行的。因此,我们的混合在某些配置中可能是近似的。然而,当溅射接近单个像素大小时,这些近似变得微不足道。我们发现这种选择在不产生可见伪影的情况下大大增强了训练和渲染性能。
在对高斯进行排序后,我们通过识别每个瓦片中深度排序的第一个和最后一个条目来为每个瓦片生成一个列表。对于光栅化,我们为每个瓦片启动一个线程块。每个块首先协作地将高斯数据包加载到共享内存中,然后,对于给定像素,通过从前到后遍历列表来累积颜色和α值,从而最大化数据加载/共享和处理的并行性。当我们在像素中达到目标的α饱和度时,相应的线程就会停止。在固定间隔内,查询瓦片中的线程,当所有像素都饱和(即α变为1)时,整个瓦片的处理就会终止。排序的细节和整体光栅化方法的高级概述在附录C中给出。
在光栅化过程中,α的饱和度是唯一的停止标准。与以前的工作不同,我们不限制接收梯度更新的混合原语的数量。我们强制执行这个属性,允许我们的方法处理具有任意、变化深度复杂性的场景,并准确学习它们,而不必依赖于特定场景的超参数调整。在反向传递过程中,因此我们必须恢复前向传递中每个像素混合点的完整序列。一种解决方案是将任意长混合点列表存储在全局内存中[Kopanas等人 2021]。为了避免隐含的动态内存管理开销,我们选择再次遍历每个瓦片的列表;我们可以重用前向传递中排序的高斯数组和瓦片范围。为了便于梯度计算,我们现在从前向后遍历它们。
遍历从瓦片中影响任何像素的最后一个点开始,再次协作地将点加载到共享内存中。此外,每个像素只有在其深度低于或等于前向传递中为其颜色做出贡献的最后一个点的深度时,才会开始(昂贵的)重叠测试和处理点。计算第4节中描述的梯度需要在原始混合过程中每一步累积的不透明度值。而不是在反向传递中遍历逐步缩小的不透明度的显式列表,我们可以通过仅在前向传递结束时存储总累积不透明度来恢复这些中间不透明度。具体来说,每个点在前向过程中存储最终累积的不透明度;我们在从前向后的遍历中通过每个点的α除以这个值,以获得梯度计算所需的系数。