3D Gaussian Splatting可视化渲染原理详解

3D Gaussian Splatting可视化渲染原理详解
引言提到当下计算机视觉与图形学领域最炙手可热的技术非 3D Gaussian Splatting简称 3DGS3D 高斯泼溅 莫属。用最通俗的话来定义3DGS 是一种利用数百万个可学习的 3D 色块来实时渲染逼真 3D 场景的技术。在具体的工程实践中3DGS 的数据载体通常是一个 .ply 文件。这个文件里记录的本质上是一堆带有丰富属性如位置、颜色、透明度等的点云数据。那么一个极其关键的问题来了如何将这种常规意义上的离散点云在屏幕上渲染成连续且逼真的三维画面答案就在于这个点云文件中的每个点其实并不是一个常规意义上的物理位置点而是一个3D 高斯椭球体。二、高斯函数要理解什么叫做 3D 高斯椭球体就必须先明白这里的“高斯”到底指的是什么。其实并不复杂它就是我们在数学和概率论中经常接触到的高斯函数。我们可以从一维到三维一步步递推来看。一维高斯函数在几何形式上一维高斯函数表现为一条经典的钟形曲线如下图所示图1一维高斯函数的几何表示是一条钟形曲线在代数表达上一维高斯函数定义为f(x)1√2πσe−(x−μ)22σ2(1)其中μ中心点均值。σ2方差。它决定了这条曲线的“胖瘦”。σ2越大曲线越扁平越小曲线越尖锐。exp(...)就是自然常数e的指数次幂。仔细观察指数部分(x−μ)2其实就是 1x1 矩阵的乘法。我们可以把它写成向量形式f(x)1√2πσexp(−12(x−μ)T(σ2)−1(x−μ))(2)高斯函数在科学与工程领域中非常重要使用的地方非常多。比如在统计学中它定义了正态分布——这是自然界中最普遍、最符合直觉的概率分布。根据中心极限定理无数独立随机变量的总和最终都会趋向于高斯分布使其成为描述自然现象的最自然法则。再比如在信号与图像处理中高斯函数具备极其优异的数学性质它不仅极其平滑而且是最理想的低通滤波器能够有效滤除高频噪声并带来极佳的线性平滑特性更神奇的是高斯函数在空间域和频域下都保持钟形是连接物理世界与数字信号处理的最佳桥梁。二维高斯函数(1) 定义现在升维到二维空间此时一个点的位置变成了向量x[xy]中心点变成μ[μxμy]。在几何形式上二维高斯函数表现为一个中心凸起、向四周平滑过渡的钟形曲面如下图所示图2二维高斯函数的几何表示是一条钟形曲面在代数表达上为了能够描述空间中任意方向的“胖瘦”和旋转我们引入一个完整的2×2协方差矩阵ΣΣ[σ2xσxyσxyσ2y](3)其中对角线上的σ2x和σ2y控制着曲面在两个主轴方向上的宽度而非对角线上的σxy协方差则控制着这个高斯分布的旋转角度。此时二维高斯函数就可以被极其优雅地写成与一维完全统一的矩阵形式f(x)12π√det(Σ)exp(−12(x−μ)TΣ−1(x−μ))(4)这样无论是一维还是二维公式的外壳完全一样只是向量x的维度变长了标量方差σ2变成了协方差矩阵Σ。(2) 协方差矩阵在一维空间中数据只沿着一条直线分布我们只需要一个标量“方差σ2”就能描述它偏离中心的程度。但在二维或多维空间中变量之间往往存在相互关联。例如一个点不仅在x方向上分散在y方向上分散而且x和y的变化趋势可能还是绑定的比如x变大时y也倾向于变大。为了全面描述这种多维空间中各个方向上的“胖瘦方差”以及维度之间的“相关性协方差”一维的标量方差就不够用了必须升级为一个矩阵——协方差矩阵Σ。它不仅记录了每个维度的独立方差对角线元素还记录了维度间的协同变化非对角线元素从而能够精准地刻画高斯分布在多维空间中的整体形态和旋转姿态。协方差矩阵有一种常用的特殊情况当x和y两个维度的变化趋势完全独立没有任何绑定时它们之间的协方差σxy0。此时协方差矩阵退化为了一个对角矩阵Σ[σ2x00σ2y](5)此时二维高斯函数就可以表达成类似于一维高斯函数式 (1) 的形式f(x,y)12πσxσyexp(−12[(x−μx)2σ2x(y−μy)2σ2y])(6)这种展开的表达方式在早期的教材和基础算法中非常常见因为它不需要动用矩阵乘法物理意义一目了然。(3) 高斯椭圆从图2中可以直观的看到用于表达二维高斯函数的钟形曲面其等势面即空间中高度相同的点连成的轨迹是一个标准的椭圆。在实际工程中的算法计算和几何控制上这个高斯椭圆更能代表高斯函数。我们可以从代数公式上直接看出这种联系在二维高斯函数的指数部分−12(x−μ)TΣ−1(x−μ)(7)如果我们令指数部分等于一个常数C即截取某一特定高度的等高线由于Σ−1是一个对称正定矩阵这个方程在几何上恰好是一个标准的二次型椭圆方程。这意味着协方差矩阵Σ本质上决定了这个椭圆的形状与朝向椭圆的形状长短轴比例由矩阵Σ的特征值决定。特征值越大说明该方向上的方差越大椭圆在这个方向上就越“胖”被拉伸。椭圆的朝向旋转角度由矩阵Σ的特征向量决定。特征向量指示了椭圆的长短轴方向。当非对角线元素σxy≠0时特征向量会发生倾斜整个椭圆也就随之在平面上旋转。而椭圆的其他性质则由公式中的其余参数确定椭圆的大小面积由指数部分的常数C决定。C相当于在钟形曲面上截取等高线的高度阈值C越小越靠近山顶截出的椭圆面积越小C越大越靠近山脚椭圆面积越大。这些大小不同但形状相同的椭圆层层嵌套共同构成了钟形曲面的等势面族。椭圆的绝对位置由均值向量μ[μxμy]决定。μ是公式中唯一的平移项它将整个椭圆从坐标原点“搬”到了二维空间中的指定位置即所有同心椭圆的公共中心点。(4) 归一化系数无论是公式 (2) 中的√2πσ还是公式 (4) 中的2π√det(Σ)公式最前面的分母都充当着“归一化系数”的角色。这个系数的存在是为了保证一个铁律高斯函数在全空间的积分必须严格等于 1。如果要从数学上严格证明这一点需要利用二重积分将直角坐标系转换为极坐标系来求解过程相对繁琐。但在这里我们只需要定性地理解这一点在多维空间中矩阵的行列式det(Σ)本质上代表了该矩阵对“空间体积或面积”的绝对缩放比例。在二维空间中如果协方差矩阵Σ的特征值分别是λ1和λ2这意味着空间在两个主轴方向上分别被拉伸了√λ1和√λ2倍。根据几何常识一个平面图形在两个垂直方向上分别被拉伸后其总面积的缩放倍数恰好是这两个倍数的乘积即√λ1×√λ2√λ1λ2。而在矩阵理论中矩阵的行列式刚好等于其特征值的乘积det(Σ)λ1λ2。因此√det(Σ)就精准地刻画了二维高斯分布在空间中占据的“有效面积”。理解了这一点归一化系数的逻辑就水到渠成了在一维空间中方差σ2决定了钟形曲线的“胖瘦”即一维长度。为了保证曲线下方的面积恒为 1中心点的高度必须与宽度成反比。因此一维的归一化系数是1√2πσ。在二维空间中高斯分布的“胖瘦”由协方差矩阵Σ决定。当高斯椭圆在空间中变得越扁长即det(Σ)变大占据的面积变大时为了保证整个钟形曲面向下积分的总体积依然是 1它的中心峰值高度就必须相应地降低。因此二维的归一化系数必须除以这个“面积因子”。结合一维公式中自带的常数2π二维高斯函数的归一化系数就自然而然地变成了12π√det(Σ)。无论高斯椭球如何被拉伸或旋转这个系数都能极其聪明地将“各个方向的拉伸”和“空间的旋转”打包在一起精准地算出它真实的几何体积从而完美地维持能量守恒。三维高斯函数(1) 定义理解了二维高斯函数三维高斯函数也就简单了。在三维空间中点变成了三维向量x⎡⎢⎣xyz⎤⎥⎦中心点变成了μ⎡⎢⎣μxμyμz⎤⎥⎦。在代数表达上为了能够描述空间中任意方向的“胖瘦”以及复杂的旋转姿态协方差矩阵也必须升级为3×3的方阵Σ⎡⎢⎢⎣σ2xσxyσxzσxyσ2yσyzσxzσyzσ2z⎤⎥⎥⎦(8)此时三维高斯函数的代数表达为f(x)1√(2π)3det(Σ)exp(−12(x−μ)TΣ−1(x−μ))(9)可以看到公式的外壳依然没有变只是维度再次变长了。归一化系数中的(2π)2变成了(2π)3而分母中的根号依然是det(Σ)因为三维空间中的体积缩放比例同样由矩阵的行列式决定。(2) 高斯椭球在几何形式上二维高斯函数是一个三维的钟形曲面三维高斯函数的几何表达则是一个四维超曲面。这个四维超曲面超出人类三维的视觉极限所以无法展示相应的示意图。但是我们真正用来表达它的几何形态是其等势体——一个中心凸起、向四周平滑过渡的三维椭球体。在二维空间中等势面是椭圆那么在三维空间中如果我们令指数部分等于常数C由于3×3的Σ−1依然是对称正定矩阵这个方程在几何上就定义了一个标准的三维椭球体。与二维椭圆完全对应这个三维椭球的几何属性依然由协方差矩阵Σ掌控椭球的形状三个主轴的长度由矩阵Σ的三个特征值决定。特征值越大说明该方向上的方差越大椭球在这个方向上就被拉得越长。椭球的朝向空间中的旋转姿态由矩阵Σ的三个特征向量决定。它们指示了椭球三个主轴在三维空间中的绝对朝向。三、高斯椭球体椭球参数一个典型的 3DGS .ply 文件头包含了成百上千个顶点的定义。初看之下它似乎只是一个普通的点云文件但细究其属性字段便会发现其中暗藏玄机。文件中关于形状的关键定义如下element vertex 6131954property float xproperty float yproperty float zproperty float nxproperty float nyproperty float nzproperty float f_dc_0property float f_dc_1property float f_dc_2property float f_rest_0property float f_rest_1property float f_rest_2property float f_rest_3property float f_rest_4property float f_rest_5property float f_rest_6property float f_rest_7property float f_rest_8property float f_rest_9property float f_rest_10property float f_rest_11property float f_rest_12property float f_rest_13property float f_rest_14property float f_rest_15property float f_rest_16property float f_rest_17property float f_rest_18property float f_rest_19property float f_rest_20property float f_rest_21property float f_rest_22property float f_rest_23property float f_rest_24property float f_rest_25property float f_rest_26property float f_rest_27property float f_rest_28property float f_rest_29property float f_rest_30property float f_rest_31property float f_rest_32property float f_rest_33property float f_rest_34property float f_rest_35property float f_rest_36property float f_rest_37property float f_rest_38property float f_rest_39property float f_rest_40property float f_rest_41property float f_rest_42property float f_rest_43property float f_rest_44property float opacityproperty float scale_0property float scale_1property float scale_2property float rot_0property float rot_1property float rot_2property float rot_3如前所述.ply 文件的每个点都是一个三维高斯椭球。但是从文件的顶点属性来看我们可以看到位置属性μ但是看不到前面提到的协方差矩阵Σ。其实顶点属性中表达椭球的是 scale缩放和 rot旋转参数它们可以由协方差矩阵分解得到。协方差矩阵是一个对称正定矩阵。在线性代数中这类矩阵有一个非常重要的性质——特征分解Eigen Decomposition即对称正定矩阵Σ可以被分解为旋转和缩放两个操作的组合ΣRΛRT(10)其中R是旋转矩阵Rotation Matrix由Σ的特征向量组成。它定义了椭球在空间中的朝向即椭球的三个主轴长、宽、高指向哪个方向。Λ是对角矩阵Diagonal Matrix由Σ的特征值组成λ1,λ2,λ3。它定义了椭球沿这三个主轴方向的尺度大小即椭球在该方向上拉伸或压缩的程度。回到 .ply 文件的属性字段文件并没有存储原始的矩阵数值而是存储了计算机图形学中更常用的几何参数scale_0, scale_1, scale_2这三个值对应了对角矩阵Λ的平方根即标准差σ。它们决定了椭球在三个局部坐标轴上的半轴长度。数值越大椭球在该方向上就越“胖”数值越小则越“瘦”。rot_0, rot_1, rot_2, rot_3这四个值构成了一个单位四元数Quaternion它与旋转矩阵R是等价的数学表达。在计算机图形学中四元数比矩阵更紧凑且能避免万向锁问题。它决定了椭球的空间姿态即椭球是横着放、竖着放还是任意角度倾斜。总的来说3DGS 技术通过这种参数化的方式将复杂的概率密度函数高斯分布转化为计算机极易处理的“位置旋转缩放”数据结构。