当前位置:   article > 正文

3D Gaussian Splatting:用于实时的辐射场渲染

3d gaussian splatting

Paper: Kerbl B, Kopanas G, Leimkühler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14.
Introduction: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/
Code: https://github.com/graphdeco-inria/gaussian-splatting

3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper,法国团队在会议上展示了其实现的最先进的场景渲染。该方法在训练时间和高质量的实时渲染之间实现了很好的权衡,在重建质量之高的情况下还能接入传统光栅化,优化速度也相当快。自从 3D Gaussian Splatting 横空出世,整个 NeRF 圈波涛汹涌,有望显著加速一系列 NeRF 类的工作 1

3D Gaussian Splatting 和 NeRF 一样,所做的任务也是新视图的合成,但没有使用 ray tracing 的渲染方式,而是更偏向于光栅化的渲染。通过构建以协方差为主导的 3D Gaussian 点云,用 Splatting 的方式进行渲染,实现了高分辨率的实时渲染。

在这里插入图片描述

一. 预备知识

3D Gaussian Splatting 论文直接阅读会比较困难,本节参考 [NeRF坑浮沉记]3D Gaussian Splatting入门:如何表达几何,对需要用到的预备知识进行梳理。

更多参考资料如下:

1. 几何的隐式表达

传统的几何显式表达使用点云、体素、网格等方式,可以沿着存储空间遍历场景中的所有元素。几何隐式表达则是使用函数或神经网络来表示几何信息,而不是使用显式的几何对象。在经典的隐式几何表达 —— NeRF 中,使用一个多层感知机作为几何的隐式表示方法,输入三维空间坐标和观测视角,就可以输出对应点的几何密度和颜色。渲染场景时把光线上的一系列采样点加权积起来,就可以渲染得到一个像素颜色。

从表达方式来看,几何的隐式表达可以分为体积类表达和表面类表达两种:

  • 体积类表达:NeRF 属于体积类表达,通过几何密度决定采样点颜色的贡献度。
  • 表面类表达:在表面类表达方式中,输入采样点,符号距离函数 SDF 输出空间中距离该点最近的表面的距离,正值表示表面外,负值表示表面内,表面类方法判定越靠近表面的采样点颜色贡献度越高。

2. 计算机中的几何表达

目前市面上大部分大型游戏在计算机中都是使用三角网格进行三维显式几何表达,能够借助 GPU 进行快速渲染。但三角网格由于三角形之间或三个顶点之间都是离散的,强行优化网格也只能是顶点粒度的,难免维度爆炸。

NeRF 系列方法大多使用光线追踪 (ray marching),速度自然没法和成熟的显式几何+光栅化比。而NeRF 在参数优化时一个参数变化对几何的优化可能是一大块也可能是一个小细节。

而 3D Gaussian 使用的椭球形表示可以作为小型可微空间进行优化,不同 Gaussian 之间则能够像三角网格一样并行光栅化渲染。可以看成是在可微和离散之间做了一个微妙平衡。其实早期的 3D 游戏也曾尝试过以椭球为基础元素进行建模 2

在这里插入图片描述

3. 3D Gaussian

说到 3D Gaussian 3,第一反应是:
N μ x , σ x , μ y , σ y , μ z , σ z ( x , y , z ) = 1 ( 2 π ) 3 σ x σ y σ z exp ⁡ ( − ( x − μ x ) 2 2 σ x 2 − ( y − μ y ) 2 2 σ y 2 − ( z − μ z ) 2 2 σ z 2 ) N_{\mu_x, \sigma_x, \mu_y, \sigma_y, \mu_z, \sigma_z}(x, y, z)=\frac{1}{(\sqrt{2 \pi})^3 \sigma_x \sigma_y \sigma_z} \exp \left(-\frac{\left(x-\mu_x\right)^2}{2 \sigma_x{ }^2}-\frac{\left(y-\mu_y\right)^2}{2 \sigma_y{ }^2}-\frac{\left(z-\mu_z\right)^2}{2 \sigma_z{ }^2}\right) Nμx,σx,μy,σy,μz,σz(x,y,z)=(2π )3σxσyσz1exp(2σx2(xμx)22σy2(yμy)22σz2(zμz)2)
但这其实是分量 x , y , z x, y, z x,y,z 互相独立的特例,此时的模型坐标系和世界坐标系平行。不过这种特例可以帮助理解 3D Gaussian:试想一个实心椭球,将它沿某一条轴切开后会得到一个椭圆,这个椭圆其实是无限大的,每一层的密度都不相同,这个切面就是二维高斯分布的等线图:
在这里插入图片描述
在这里插入图片描述

3D Gaussian 也叫三维高斯分布或三维正态分布,是统计学中一种特殊的多维正态分布,通常用来建模具有连续性随机性的现象,如图像处理、统计建模、机器学习等领域。3D Gaussian 能够涵盖空间中任意形状的椭球,包括平移、旋转。3D Gaussian 在三维空间中定义了一个概率分布,标准模型数学表示如下:
G s ( x ) = 1 ( 2 π ) 3 det ⁡ ( Σ ) e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) G_s(x)=\frac{1}{(\sqrt{2 \pi})^3 \operatorname{det}(\Sigma)}exp \left( {-\frac{1}{2}(x-\mu)^T \Sigma^{-1}(x-\mu)} \right) Gs(x)=(2π )3det(Σ)1exp(21(xμ)TΣ1(xμ))
其中 x = [ a , b , c ] T x=[a, b, c]^T x=[a,b,c]T 是三维坐标向量; μ \mu μ 是椭球的中心,控制椭球的位置平移; Σ = [ σ a 2 Cov ⁡ ( a , b ) Cov ⁡ ( a , c ) Cov ⁡ ( b , a ) σ b 2 Cov ⁡ ( b , c ) Cov ⁡ ( c , a ) Cov ⁡ ( c , b ) σ c 2 ] \Sigma=\left[

σa2Cov(a,b)Cov(a,c)Cov(b,a)σb2Cov(b,c)Cov(c,a)Cov(c,b)σc2
\right] Σ= σa2Cov(b,a)Cov(c,a)Cov(a,b)σb2Cov(c,b)Cov(a,c)Cov(b,c)σc2 是协方差矩阵,控制椭球在三维方向的伸缩和旋转。

论文中的 3D Gaussian 表示去掉了指数部分前面的尺度系数(因为系数不影响椭球的几何形状)和均值(因为每个点云有自己的位置 p p p,方便旋转放缩。于是 3D Gaussian 表示如下:
G ( x ) = e x p ( − 1 2 x T Σ − 1 x ) G(x)=exp \left({-\frac{1}{2}x^T \Sigma^{-1}x} \right) G(x)=exp(21xTΣ1x)
因此只要确定了 Σ \Sigma Σ 就可以确定一个椭球的形状。但需要注意的是,三维高斯分布的协方差矩阵 Σ \Sigma Σ 必须是半正定的才有数学意义。论文中使用的是各向异性 Σ \Sigma Σ,即在不同方向上具有不同方差值。各向异性协方差更有利于优化,因为它能够适应不同方向的变化,具有更精确的建模、更好的参数优化和更紧凑的表示。

4. 光栅化

在介绍 Splatting 之前需要先介绍一下 光栅化 (Rasterization) :光栅化是将图形或图像的矢量数据转换为像素数据,从而能够在计算机屏幕上显示的过程。通过将图形转换为像素级别,计算机可以更容易地处理和显示图形,同时确保图像在屏幕上以高速率绘制。

光栅化时,先将三角网格映射到二维平面,然后使用采样函数获取三角形内的像素情况 4,再根据走样情况(如锯齿 Jaggies、摩尔纹 Moire Patterns、车轮效应 Wagon Wheel Illusion 等)进行反走样 5,最后使用顶点片元着色 6 或其他方法进行像素点着色 7

光栅化是实现计算机屏幕上图形显示和渲染的关键步骤,能够以非常高的速度生成图像,适用于实时渲染,例如视频游戏和模拟器。

5. Splatting

Splatting 是一种用于光栅化 3D 对象(如前文讨论的椭球)的技术。这些 3D 对象被映射到投影平面后得到的 2D 图形称为 splat,类似于一个点、圆、矩形或其他形状,就像雪球打在墙上留下的印记,能量从中心向外扩散并减弱。这个过程可以在 GPU 上并行处理,因为每个 Splat 之间是独立的。
在这里插入图片描述

Splatting 可以将三维空间中的点投影到二维图像平面上,这些投影的数据点以某种方式在图像上产生视觉效果,从而呈现在最终的渲染图像中。Splatting 通常并不是由传统的图形硬件管线 8 自动执行,而是需要相对复杂的 GPU 编程,通常由图形开发者在需要时自行实现。

二. 研究思路

  • 传统的三维场景表示方法需要使用网格或点云进行三维重建,近几年出现的 NeRF 可以直接进行场景的视图合成。
  • 但 NeRF 想要生成高质量的视图需要花大量的时间进行训练和渲染,因此在实际应用中需要对质量和速度进行权衡。并且目前还没有方法能够达到实时显示的效果。
  • 文章提出了一种新方法—— 3D Gaussian Splatting,同时保证了图像的质量和渲染的速度:3D Gaussian 模型能够表示先进的 (state-of-the-art, SOTA) 视觉质量和高效的训练速度,Splatting 技术能够确保高分辨率的实时渲染。

整个模型的输入是 SfM 点云表示的一组静态场景的照片和相应机位,使用点云初始化一组 3D Gaussian 模型。 3D Gaussians 能够合理紧凑地表示三维场景,颜色由球谐系数 SH 表示。 通过交叉优化 3D Gaussian 模型参数和自适应控制得到场景表示。本文方法高效的关键在于 3D Gaussian 的光栅化,通过各向异性的 Splatting 和 α \alpha α-blending 技术,能够快速合成渲染图像。

在这里插入图片描述

1. 3D Gaussian Splatting

引入 3D Gaussian 来表示场景,将其初始化为摄像机标定产生的 SfM 稀疏 点云。这样既能保持辐射场的理想特性以便优化,又能避免在空白空间中进行不必要的计算。
在这里插入图片描述

3D Gaussian 的 光栅化 (rasterization) 过程如下:先使用 Splatting 技术将 3D Gaussian 投影到 2D 图像,然后使用标准的 α \alpha α-blending 技术快速合成渲染图像。这意味着 3D Gaussian 的三维场景表示可以转换为二维图像,以供渲染和可视化。

α \alpha α-blending:一种用于合成两幅或多幅图像以获得混合效果的图像处理技术。在 α \alpha α-blending 中,每幅图像都被赋予一个权重参数 α \alpha α ( 0 ≤ α ≤ 1 ) (0 \leq \alpha \leq 1) (0α1),表示每幅图像在最终合成中的贡献程度,0 表示完全使用第一幅图像,1 表示完全使用第二幅图像,而在 0 到 1 之间的中间值则表示混合两幅图像。
α \alpha α-blending 可以用于各种图像处理任务,包括图像叠加、过渡效果、颜色校正等,以实现图像的合成与编辑。一个典型应用就是创建图像淡入淡出效果,其中一个图像逐渐淡出,同时另一个图像逐渐淡入,通过调整

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/38915
推荐阅读
相关标签