Spherical Harmonics (SH)球谐函数的原理及应用【3DGS】
Spherical Harmonics (SH)球谐函数的原理及应用【3DGS】
球谐函数(Spherical Harmonics, SH)是数学中的一类特殊函数,它们在三维空间中用于描述依赖于方向的物理现象。这些函数在物理学、地球物理学、天文学、计算机图形学、量子力学等领域有着广泛的应用。本文将详细介绍球谐函数的原理及其在3D图形学中的应用。
前言
高斯泼溅Gaussian Splatting (GS) GS 模型采用一组 3D 高斯函数来表示 3D 场景。每个高斯分布都由一组参数来表征,即指定其中心的位置(平均值)、定义高斯分布的形状和方向的协方差矩阵、控制透明度级别的不透明度及其颜色由球谐函数 (SH)表示。
GS 通过优化所有 3D 高斯参数来表示辐射场。此外,GS算法的计算效率源于其渲染过程,它利用了高斯分量的投影特性。这种方法依赖于用一组密集的高斯函数来表示场景,在数学上表示为:
G = { ( N ( m i , Σ i ) , σ i , c i ) } i = 1 n , \mathcal{G} = { (\mathcal{N}(\mathcal{m}i,\Sigma_i), \sigma_i, c_i) }{i=1}^{n},G={(N(mi ,Σi ),σi ,ci )}i=1n ,其中m i \mathcal{m}_imi 是位置,Σ i \Sigma_iΣi 代表协方差,σ i \sigma_iσi 是不透明度,c i c_ici 是第i ii个分量的SH用于颜色表示。
GS 优化算法通过迭代图像合成过程并与训练视图进行比较来运行。该过程面临的挑战是由于 3D 到 2D 投影固有的维数降低导致高斯组件放置可能不准确。为了缓解这些问题,该算法结合了创建、删除和重新定位高斯分量的机制。这使得 GS 能够实现与 NeRF 相当的视觉质量,同时可能表现出更快的训练和推理时间。
本文主要介绍球谐函数的原理及应用。
球谐函数(Spherical Harmonics, SH)
球谐函数(Spherical Harmonics, SH)是数学中的一类特殊函数,它们在三维空间中用于描述依赖于方向的物理现象。这些函数在物理学、地球物理学、天文学、计算机图形学、量子力学等领域有着广泛的应用。
球谐函数是一组正交函数,定义在单位球面上。它们可以被看作是二维傅里叶级数在球面坐标系中的等价物,用来表示球面上的任何平方可积函数。球谐函数通常用Y l m ( θ , φ ) Y_l^m(θ, φ)Ylm (θ,φ)表示,其中l是度(degree),m是阶(order),而θ和φ分别是极角(从z轴测量的角度)和方位角(从x轴测量的角度)。
球谐函数的形式如下:
Y l m ( θ , ϕ ) = K l m P l m ( cos θ ) e i m ϕ Y_l^m(\theta, \phi) = K_l^m P_l^m(\cos\theta) e^{im\phi}Ylm (θ,ϕ)=Klm Plm (cosθ)eimϕ
这里:
- K l m K_l^mKlm 是一个归一化因子。
- P l m P_l^mPlm 是关联勒让德多项式(Associated Legendre Polynomials)。
- e i m ϕ e^{im\phi}eimϕ表示复指数函数,它提供了方位角φ的周期性。
球谐函数有以下特性:
- 正交性:不同l或m值的球谐函数之间是正交的。
- 完备性:所有可能的球谐函数构成一个完备集,意味着任何一个定义在球面上的平方可积函数都可以通过球谐函数的线性组合来表示。
- 对称性:球谐函数具有不同的对称性质,这取决于它们的m和l值。
在实际应用中,球谐函数常用于:
- 在计算机图形学中模拟光照效果,因为光照强度通常是方向性的。
- 地球科学中,用于描述地球的引力场和磁场。
- 量子力学中,原子轨道可以用球谐函数来描述。
- 天文学中,用于分析宇宙微波背景辐射的各向异性。
球谐函数的使用能够极大地简化涉及到球面对称系统的计算,并且由于其良好的数学性质,使得许多问题的解析解成为可能。
球谐函数不同阶的表达式以及有什么不同?
球谐函数(Spherical Harmonics, SH)的不同阶和度(l ll和m mm)对应于不同的表达式,这些表达式的形状和对称性随着l ll和m mm的变化而变化。具体来说:
- l ll是度(degree),也称为球谐函数的总角动量量子数,在物理上它决定了波函数的能量水平以及角动量的大小。在数学上,它控制着函数的多项式部分的复杂程度。
- m mm是阶(order),或磁量子数,在物理上它与角动量的z分量相关联。在数学上,它决定了函数沿方位角方向的周期性和相位。
对于每个l ll值,m mm的取值范围是从− l -l−l到+ l +l+l的整数值。这意味着对于给定的l ll,共有2 l + 1 2l + 12l+1个不同的m mm值。球谐函数的显式表达式通常涉及到关联勒让德多项式P l m ( x ) P_l^m(x)Plm (x)和复指数e i m ϕ e^{im\phi}eimϕ,其中x = cos ( θ ) x = \cos(\theta)x=cos(θ)。
一些低阶球谐函数的显式形式如下: - 当l = 0 l = 0l=0时,只有m = 0 m = 0m=0,这是常数项:
Y 0 0 ( θ , ϕ ) = 1 2 1 π Y_0^0(\theta, \phi) = \frac{1}{2} \sqrt{\frac{1}{\pi}}Y00 (θ,ϕ)=21 π1 - 当l = 1 l = 1l=1时,有三个m mm值 (− 1 , 0 , + 1 -1, 0, +1−1,0,+1),分别对应于:
Y 1 − 1 ( θ , ϕ ) = 1 2 3 2 π sin ( θ ) e − i ϕ Y_1^{-1}(\theta, \phi) = \frac{1}{2} \sqrt{\frac{3}{2\pi}} \sin(\theta) e^{-i\phi}Y1−1 (θ,ϕ)=21 2π3 sin(θ)e−iϕ
Y 1 0 ( θ , ϕ ) = 1 2 3 π cos ( θ ) Y_1^0(\theta, \phi) = \frac{1}{2} \sqrt{\frac{3}{\pi}} \cos(\theta)Y10 (θ,ϕ)=21 π3 cos(θ)
Y 1 + 1 ( θ , ϕ ) = − 1 2 3 2 π sin ( θ ) e i ϕ Y_1^{+1}(\theta, \phi) = -\frac{1}{2} \sqrt{\frac{3}{2\pi}} \sin(\theta) e^{i\phi}Y1+1 (θ,ϕ)=−21 2π3 sin(θ)eiϕ
随着l ll的增加,球谐函数变得越来越复杂,包含了更高阶的多项式项,并且在球面上呈现出更复杂的图案。例如,当l = 2 l = 2l=2时,会有五个不同的球谐函数,它们表现出类似于“四极子”的模式;而当l = 3 l = 3l=3时,则会有七个球谐函数,表现出更复杂的“八极子”模式等。
不同阶的球谐函数的主要区别在于它们的空间分布特征、频率成分以及对称性。较高的l ll值意味着更复杂的空间结构,更多的节点(即函数值为零的地方),以及更高的频率成分。此外,m mm的值影响了函数在方位角方向上的对称性:当m = 0 m = 0m=0时,函数是关于z轴对称的;当m ≠ 0 m \neq 0m=0时,函数具有螺旋状的不对称性。
在实际应用中,选择合适的l ll和m mm取决于所研究现象的具体性质和所需的精度。例如,在计算机图形学中,较低的l ll值用于捕捉场景光照的大尺度特征,而较高的l ll值则用于表示细微的变化。
具体介绍
球谐函数
球谐(Spherical Harmonics)函数是一组基函数,通常用于表示球面上的函数。在计算机图形学中,球谐函数被广泛应用于光照和反射模型中,用来表示光照或反射的强度分布。
基函数
基函数其实是一个相对的概念,类似于空间中的基向量,基向量可以通过组合表示张成的空间中的所有向量。同理,基函数也可以通过线性or非线性组合来表示其张成的函数空间的函数, 傅里叶变换、球面谐波都是常见的基函数线性组合为原函数。
比如多项式基函数:
y 0 = 1 y 1 = x y 2 = x 2 y 3 = x 3 … . \begin{align} \begin{aligned} &y_{0} = 1 \ &y_{1} = x \ &y_{2} = x^2 \ &y_{3} = x^3 \ &…. \end{aligned} \end{align} y0 =1y1 =xy2 =x2y3 =x3….
球谐函数
SH,球谐函数,归根到底只是一组基函数,至于这组基函数是怎么来的,不管他。
说白了有了基函数,就可以把任意一个函数,描述成几个基函数的加权和了。
例如
y ≈ 0.1 y 0 + 0.3 y 1 + 0.8 y 2 + 0.001 y 3 + … y \approx 0.1 y_0 + 0.3 y_1 + 0.8 y_2 + 0.001 y_3+…y≈0.1y0 +0.3y1 +0.8y2 +0.001y3 +…这时候,就相当于是把一个原始函数
变成了一组系数:
0.1, 0.3, 0.8, 0.001, …
一般的,能用的基函数个数越多,表达能力就越强。
本质上是一个有损压缩。有点像个密码本,你一本我一本,上面写了基函数的定义,这样传密码的时候只要传几个系数就可以了,系数传到我这儿,我能复原出y = f(x),只是没那么准确了。
以下面这个方波函数为例,黑色的这个方波函数不能准确的用几个正弦基函数的加权描述,但是当基函数用的个数越多,跟方波函数本身也就越接近。
球面坐标系的基长这样:
r 0 = f 0 ( θ , φ ) r 1 = f 1 ( θ , φ ) r 2 = f 2 ( θ , φ ) … . \begin{align} \begin{aligned} &r_0 = f_0(θ,φ) \ &r_1 = f_1(θ,φ) \ &r_2 = f_2(θ,φ) \ &…. \end{aligned} \end{align} r0 =f0 (θ,φ)r1 =f1 (θ,φ)r2 =f2 (θ,φ)….
最有名的球面基函数就是球谐函数了。球谐函数有很多很好的性质,比如正交性,旋转不变性(这边就不介绍了)。正交性说明每个基函数都是独立的,每个基函数都不能用别的基函数加权得到。
SH的基函数长这样(其中蓝色表示正数,黄色表示负数),一般尝试了解过SH的同学都见过这个图:
表达式长这样:
其实退化到二维来看,还是很简单的,二维的SH差不多长这样,蓝色表示正数,黄色表示负数:
(具体系数不太准确仅用于示意…)
像这样是不是就特别简单了,em,看这个波瓣长得似乎有点三维SH的意思了嘛。
(可以思考一个小问题:为啥二维情况下第三排的基函数只有cos平方,没有sin平方呢?)
假如有一个极坐标的函数长这样:
他可以表示为
r = 0.5 + 0.1 c o s θ + 0.07 s i n θ + 0.05 c o s θ s i n θ + 0.3 ( 2 c o s 2 θ − 1 ) r = 0.5 + 0.1 cos θ + 0.07 sin θ + 0.05 cos θ sin θ + 0.3(2cos^2θ - 1)r=0.5+0.1cosθ+0.07sinθ+0.05cosθsinθ+0.3(2cos2θ−1)
只记系数,这个函数就压缩为了:
0.5, 0.1, 0.07, 0.05, 0.3
回到三维的情况这几个数字其实就是SH系数啦。
当SH的系数用的越多,那么表达能力就越强,跟原始的函数就越接近
当用来描述不同方向光照的SH基函数我们一般用到二阶或者三阶,二阶是4个系数:
拓展到rgb,就是4 * 3 = 12个系数
三阶是9个系数:
拓展到rgb,就是9 * 3 = 27个系数
空间中的每个Probe带一组SH系数,就可以描述这个位置的大致光照情况了。
为啥不用更高阶的SH?一方面是因为更多的系数会带来更大的存储压力、计算压力,而一般描述变化比较平滑的环境漫反射部分,用3阶SH就足够了;另一方面则是因为SH的物理含义不是特别好理解,高阶SH容易出现各种花式Artifact,美术同学一般都会认为这种表现属于bug。
