3DGS的表示(1)
【部分摘录】原文 (opens new window)
如何表示Gaussian?
1D→3D?
1D高斯即正态分布:
Nμ,σ(x)=√2πσ1exp(−2σ2(x−μ)2)
其图像为一个单钟形对称曲线,均值μ控制对称轴进而控制图形位置,标准差σ控制密度集中程度。对一段x区间进行积分可以得到分布中的数据落在这一区间的概率,其中绝大多数落在[μ−3σ,μ+3σ](概率:0.9974)。
从其形式可知,高斯分布只有两个参数μ,σ,所以一组μ,σ可以确定一个1D高斯分布函数,进而对应一条1D线段[μ−3σ,μ+3σ],其位置决定于μ、长度决定于σ,通过改变μ,σ可以表达1D数轴上不同位置和长度的线段。
3D高斯的正态分布:
Nμx,σx,μy,σy,μz,σz(x,y,z)=(2π)3/2σxσyσz1exp(−2σx2(x−μx)2−2σy2(y−μy)2−2σz2(z−μz)2)
这个形式其实是这三个变量为互不相关的独立变量,且椭球的坐标系和世界坐标系平行的情况。
但在本文中的3D Gaussian点可以旋转,所以它的对称轴(后文称为 模型坐标系 )不一定和世界坐标系重叠。
这源于协方差Cov
方差表示沿着某个方向的不确定性大小,方差大→这个方向拉得更长。
方差:三个方向独立,不可以旋转,此时Cov=0
协方差:三个方向相关,可以旋转。
3D Gaussian公式:
首先复习联合概率密度函数:
p(x1,…,xn)=(2π)n/2∣Σ∣1/21exp[−21(X⃗−μ⃗)TΣ−1(X⃗−μ⃗)]
三维的情况,用 x⃗=[x,y,z]T 表示三维空间中的坐标:
p(x⃗)=(2π)3/2∣Σ∣1/21exp[−21(x⃗−μ⃗)TΣ−1(x⃗−μ⃗)]
此时协方差矩阵Σ为:
Σ=⎣⎡σx2Cov(y,x)Cov(z,x)Cov(x,y)σy2Cov(z,y)Cov(x,z)Cov(y,z)σz2⎦⎤
其中 μ⃗ 是椭球中心(控制世界空间位置平移),协方差矩阵 Σ 控制椭球在3轴向的伸缩和旋转(模型坐标系),协方差矩阵的特征向量就是椭球对称轴(即,特征向量代表椭球三个主轴方向)
注:在数学上每个高斯分布都覆盖整个空间,当它是椭球是因为它的等高线是椭球。计算的时候显然不能每个像素点上对每个高斯点都采个样,所以实际使用中会把距离中心较远的地方截掉(本文是在概率积分99%的等高线截),截了就看着是一个中心透明度高周围透明度低的椭球。
论文中的定义方式:
G(x⃗)=exp(−21x⃗TΣ−1x⃗)
和标准形式对比可以看到:
默认模型坐标中心在坐标系原点,方便旋转放缩,放入世界坐标系时再加上平移
去掉了指数部分前面的归一化系数,所以在空间上的积分不为1,而是在 x⃗=[0,0,0]T 处值等于1,所以是一个中间不透明(G(x⃗) 值为1),越往四周越透明的椭球。
- 论文中用一个不透明度值α控制Gaussian点整体的透明度,可以让Gaussian点中间也透明
如何表示Gaussian颜色?
球谐函数SH:一组基函数
像泰勒展开、傅里叶展开中也是一组基函数构成的:
比如泰勒展开以多项式函数系 {1,x−x0,(x−x0)2,(x−x0)3,…,yn=(x−x0)n,…} 为基函数,
在对函数f(x)的泰勒展开中:
f(x)=0!f(x0)+1!f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+⋯+n!f(n)(x0)(x−x0)n+⋯=n=0∑∞n!f(n)(x0)(x−x0)n
{0!f(x0),1!f′(x0),2!f′′(x0),…,n!f(n)(x0),…} 就是这组基函数的系数。
有了基函数,就可以把任意一个函数,描述成几个基函数的加权和了。
这里用的是二维直角坐标系下的函数y=f(x)举例,而拓展到极坐标系函数r=f(θ)也有多种基函数。
再扩展到三维坐标系下,函数z=f(x,y)表示一个平面,同样有二维傅里叶级数等二维基函数;而三维极坐标系即球面坐标系函数r=f(θ,ϕ)对应的则通常是一个凹凸不平的球面(半径r随方向角(θ,ϕ)变化且方向角范围为[−π,π]),也同理可以用一系列基函数近似表示,这些基函数称为“球面基函数”。
而球谐函数(Spherical Harmonics)就是最有名的球面基函数。球谐函数有很多很好的性质,比如正交性,旋转不变性,就和傅里叶级数里的基函数一样完美。
这里以原文作者举例的二维SH表示的各基函数,可以形象的看到越复杂的基函数可以表示的二维方向可以更多。

三维基函数同理:

用于记录空间中某个点从不同方向看过去的不同颜色,这在点云渲染中非常有用,3DGS就是用球谐函数记录空间中的Gaussian点在不同方向的颜色。
实际应用中的球谐函数基函数一般只用到二阶或三阶。 二阶是4个系数,拓展到rgb,每个颜色通道一个系数,就是4 * 3 = 12个系数。 三阶是9个系数,拓展到rgb就是9 * 3 = 27个系数。
为啥不用更高阶的SH?一方面是因为更多的系数会带来更大的存储压力、计算压力,而一般描述变化比较平滑的环境漫反射部分,用3阶SH就足够了;另一方面则是因为SH的物理含义不是特别好理解,高阶SH容易出现各种花式Artifact,美术同学一般都会认为这种表现属于bug。