Spherical Harmonics (SH)球谐函数的原理及应用【3DGS】

前言

高斯泼溅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}_i mi是位置, Σ i \Sigma_i Σi代表协方差, σ i \sigma_i σi是不透明度, c i c_i ci是第 i i i个分量的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(θ,ϕ)=KlmPlm(cosθ)eimϕ

这里:

  • K l m K_l^m Klm是一个归一化因子。
  • P l m P_l^m Plm是关联勒让德多项式(Associated Legendre Polynomials)。
  • e i m ϕ e^{im\phi} eimϕ表示复指数函数,它提供了方位角φ的周期性。

球谐函数有以下特性:

  1. 正交性:不同l或m值的球谐函数之间是正交的。
  2. 完备性:所有可能的球谐函数构成一个完备集,意味着任何一个定义在球面上的平方可积函数都可以通过球谐函数的线性组合来表示。
  3. 对称性:球谐函数具有不同的对称性质,这取决于它们的m和l值。

在实际应用中,球谐函数常用于:

  • 在计算机图形学中模拟光照效果,因为光照强度通常是方向性的。
  • 地球科学中,用于描述地球的引力场和磁场。
  • 量子力学中,原子轨道可以用球谐函数来描述。
  • 天文学中,用于分析宇宙微波背景辐射的各向异性。

球谐函数的使用能够极大地简化涉及到球面对称系统的计算,并且由于其良好的数学性质,使得许多问题的解析解成为可能。

球谐函数不同阶的表达式以及有什么不同?

球谐函数(Spherical Harmonics, SH)的不同阶和度( l l l m m m)对应于不同的表达式,这些表达式的形状和对称性随着 l l l m m m 的变化而变化。具体来说:

  • l l l 是度(degree),也称为球谐函数的总角动量量子数,在物理上它决定了波函数的能量水平以及角动量的大小。在数学上,它控制着函数的多项式部分的复杂程度。
  • m m m 是阶(order),或磁量子数,在物理上它与角动量的z分量相关联。在数学上,它决定了函数沿方位角方向的周期性和相位。

对于每个 l l l 值, m m m 的取值范围是从 − l -l l + l +l +l 的整数值。这意味着对于给定的 l l l,共有 2 l + 1 2l + 1 2l+1 个不同的 m m m 值。球谐函数的显式表达式通常涉及到关联勒让德多项式 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 = 0 l=0 时,只有 m = 0 m = 0 m=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 = 1 l=1 时,有三个 m m m 值 ( − 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} Y11(θ,ϕ)=212π3 sin(θ)eiϕ
    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(θ,ϕ)=212π3 sin(θ)eiϕ

随着 l l l 的增加,球谐函数变得越来越复杂,包含了更高阶的多项式项,并且在球面上呈现出更复杂的图案。例如,当 l = 2 l = 2 l=2 时,会有五个不同的球谐函数,它们表现出类似于“四极子”的模式;而当 l = 3 l = 3 l=3 时,则会有七个球谐函数,表现出更复杂的“八极子”模式等。

不同阶的球谐函数的主要区别在于它们的空间分布特征、频率成分以及对称性。较高的 l l l 值意味着更复杂的空间结构,更多的节点(即函数值为零的地方),以及更高的频率成分。此外, m m m 的值影响了函数在方位角方向上的对称性:当 m = 0 m = 0 m=0 时,函数是关于z轴对称的;当 m ≠ 0 m \neq 0 m=0 时,函数具有螺旋状的不对称性。

在实际应用中,选择合适的 l l l m m m 取决于所研究现象的具体性质和所需的精度。例如,在计算机图形学中,较低的 l l l 值用于捕捉场景光照的大尺度特征,而较高的 l l l 值则用于表示细微的变化。

具体介绍

球谐函数

球谐(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+… y0.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。


创作不易,观众老爷们请留步… 动起可爱的小手,点个赞再走呗 (๑◕ܫ←๑)
欢迎大家关注笔者,你的关注是我持续更博的最大动力


原创文章,转载告知,盗版必究



在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

<think>好的,我需要帮助用户了解3DGS(3D Gaussian Splatting)中球谐函数应用和实现。首先,我得回顾一下球谐函数的基本概念,以及它们在3DGS中的具体作用。根据用户提供的引用,球谐函数用于表示颜色,并且类似于傅里叶级数在三维空间的展开,构成正交基,能够将球面上的函数表示为基函数的线性组合[^3]。 接下来,我应该分步骤解释球谐函数3DGS中的应用。首先,颜色表示方面,引用中提到球谐函数用于描述空间中不同方向的光照对颜色的影响,这可能涉及到将颜色分解为球谐系数。然后,动态光照处理,因为球谐函数的正交性允许高效计算光照变化,这可能适用于实时渲染。另外,数据压缩也是一个应用点,高阶球谐函数能捕捉更多细节,但需要更多的系数,这可能需要在存储和精度之间权衡[^1][^3]。 在实现步骤方面,需要确定阶数,初始化系数,采样方向计算颜色,以及渲染合成。这里可能需要引用提到的基函数表达式和正交基特性[^3]。此外,用户提供的参考链接中有关于Unity可视化的内容,可能涉及到实际代码实现,但用户没有提供具体代码,所以可能需要泛泛而谈。 然后,生成相关问题需要考虑用户可能想了解的更深入内容,比如阶数选择的影响、与傅里叶级数的区别、实时渲染中的优化方,以及数据压缩的具体策略。这些问题应该基于引用中的信息,例如不同阶数的球谐函数表达能力不同[^1],正交基的特性,以及数据压缩的权衡[^3]。 需要确保回答结构清晰,使用中文,数学公式正确用$...$和$$...$$格式。同时检查引用是否正确标注,例如关于球谐函数的正交基和颜色表示的引用,以及不同阶数的差异引用。可能还需要注意避免技术错误,比如正确解释球谐函数如何分解颜色,以及动态光照的处理方式。 最后,确保回答中的每个部分都有对应的引用支持,并且在末尾列出相关问题,引导用户进一步探索。可能还需要注意术语的一致性,比如3DGS的全称是否必要,但用户已经使用缩写,所以保持即可。</think>### 3DGS中球谐函数应用与实现 #### 1. **球谐函数3DGS中的作用** 球谐函数3D高斯泼溅(3D Gaussian Splatting, 3DGS)中主要用于**颜色表示与光照建模**。具体来说: - **颜色随方向变化**:3DGS中的高斯分布需要表示不同视角下颜色的变化(例如材质的光泽或漫反射特性)。球谐函数通过一组基函数将颜色分解为方向相关的分量,表达式为: $$C(\theta, \phi) = \sum_{l=0}^{n}\sum_{m=-l}^{l} c_{l}^{m} Y_{l}^{m}(\theta, \phi)$$ 其中 $Y_{l}^{m}$ 是球谐基函数,$c_{l}^{m}$ 是对应的系数,$\theta$ 和 $\phi$ 是球面角度。 - **动态光照支持**:球谐函数的正交基特性允许高效计算光照变化对颜色的影响,适用于实时渲染场景[^3]。 #### 2. **实现步骤** 在3DGS中,球谐函数的实现通常包括以下步骤: 1. **选择阶数**:阶数 $n$ 决定基函数的数量(总数为 $(n+1)^2$),高阶可捕捉更复杂的光照变化,但计算量增大(常用3阶或4阶)。 2. **初始化系数**:为每个高斯分布分配一组球谐系数 $c_{l}^{m}$,初始值可通过拟合输入数据或随机初始化得到。 3. **方向采样与颜色计算**:根据视角方向 $(\theta, \phi)$ 计算球谐基函数值,加权求和得到颜色: $$C = \sum_{l,m} c_{l}^{m} Y_{l}^{m}(\theta, \phi)$$ 4. **渲染合成**:将各高斯分布的颜色叠加到图像平面,生成最终渲染结果。 #### 3. **优化与挑战** - **数据压缩**:低阶球谐函数(如2阶)可减少存储开销,但可能丢失高频细节;高阶(如5阶)需更多系数,适合高精度场景。 - **实时性**:利用球谐函数的正交性,预计算基函数值并缓存,加速渲染[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旋转的油纸伞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值