1.高斯函数
想象你往平静的湖水里扔一块石头,水波会以石头落点为中心向外扩散,形成一个逐渐衰减的圆形波纹。高斯函数的形状就和这个波纹类似:
- 中心最高(石头落点,波峰最强)。
- 越往外,高度(强度)越低(波纹逐渐减弱)。
- 对称且平滑(圆形波纹,没有突兀的棱角)。
高斯函数就是一个对称的、平滑的"波包",用来描述自然界的许多现象。它的核心特点是:
- 中心最强,越远越弱。
- 用标准差(c)控制"胖瘦"。
- 多维时能处理图片、3D数据等。
一维高斯函数 :
其中,a、b、c为实数常数,且a>0。b控制峰值位置,c(标准差)控制曲线宽度,形状呈对称的钟形。
二维高斯函数 (像一座圆顶山):
用于图像处理和概率模型。在图片处理方面,比如"模糊滤镜"就是用一个微型高斯函数对每个像素点做平滑处理,让图片看起来更柔和。
三维高斯函数 (像一团云雾):其中σ为标准差,控制函数的宽度。
三维高斯函数是二维高斯函数在三维空间中的自然扩展,广泛应用于图像处理、计算机图形学、物理模拟等领域。在3D建模中,可以用多个"云雾团"(高斯函数)组合起来表示物体(比如火焰、烟雾),渲染效率很高。
2.球谐函数
球谐函数(Spherical Harmonics,SH)是一组定义在球面上的正交函数,广泛应用于物理学、计算机图形学、量子力学等领域。球谐函数是拉普拉斯方程在球坐标系下的角度部分解,形式为:

- 参数:l(度数,非负整数)控制函数的复杂度,m(阶数,−l≤m≤l)决定方位角周期性。θ 是极角(从 0 到 π),ϕ 是方位角(从 0 到 2π)。
:连带勒让德多项式;
:归一化因子。
- 正交性:不同 (l,m) 的球谐函数在球面上积分乘积为零,构成完备基。
(1)通俗解释
核心比喻:球面上的"乐高积木"
想象你要用积木拼出一个球形灯笼,但积木的形状不是方块,而是不同图案的曲面片(比如纯色片、波浪片、花瓣片等)。
- 每种基础曲面片就是一个球谐基函数。
- 你通过调整每种曲面片的数量(权重),就能组合出复杂的灯笼图案。
- 球谐函数就是这些"基础曲面片"的数学定义。
每个球谐函数都可以看作是一个"基础曲面片"。这些曲面片在球面上有不同的形状和分布。通过调整每个球谐函数的权重(即系数),可以将这些基础曲面片组合起来,形成复杂的球面图案。这类似于用不同形状的积木拼出复杂的结构。
- 例如,当 l=0 时,球谐函数是一个常数函数,表示一个均匀的球面。
- 当 l=1 时,球谐函数可以表示球面上的简单方向性变化,比如一个"极帽"(在北极或南极有突出的部分)。
- 当 l 增大时,球谐函数可以表示更复杂的形状,比如多个"花瓣"或"波浪"形状。

每个球谐函数 是定义在球面上的一种特定的模式或分布,而不是一个完整的球体。通过调整不同球谐函数的权重,可以组合出复杂的球面上的分布。这种组合在许多科学和工程领域中都有广泛的应用。
球谐函数可视化代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import sph_harm
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import Normalize
from matplotlib.cm import ScalarMappable
def plot_spherical_harmonics(l_max=3, resolution=100):
"""
绘制美观的球谐函数可视化图
参数:
l_max: 最大阶数(非负整数)
resolution: 网格分辨率
"""
# 创建球面网格
theta = np.linspace(0, np.pi, resolution) # 极角
phi = np.linspace(0, 2 * np.pi, resolution) # 方位角
theta, phi = np.meshgrid(theta, phi)
# 将球坐标转换为笛卡尔坐标
x = np.sin(theta) * np.cos(phi)
y = np.sin(theta) * np.sin(phi)
z = np.cos(theta)
# 创建图形
fig = plt.figure(figsize=(18, 12), facecolor='black')
fig.suptitle('Spherical Harmonics Visualization',
fontsize=20, color='white', y=1.02)
# 创建颜色映射
cmap = plt.cm.coolwarm # 使用冷暖色区分正负值
# 计算所有球谐函数的值,确定统一的范围
all_values = []
for l in range(l_max + 1):
for m in range(-l, l + 1):
Y_lm = sph_harm(m, l, phi, theta).real
all_values.append(Y_lm)
vmin, vmax = np.min(all_values), np.max(all_values)
norm = Normalize(vmin=vmin, vmax=vmax)
# 计算需要的行数和列数
rows = l_max + 1
cols = 2 * l_max + 1
# 创建网格布局
grid = plt.GridSpec(rows, cols + 1, figure=fig,
width_ratios=[1] * cols + [0.1], # 为颜色条留出空间
hspace=0.3, wspace=0.1)
for l in range(l_max + 1):
for m in range(-l, l + 1):
# 计算球谐函数的值
Y_lm = sph_harm(m, l, phi, theta).real
# 计算子图位置
ax_pos = (l * cols) + (m + l_max) + 1
ax = fig.add_subplot(grid[l, m + l_max],
projection='3d', facecolor='black')
# 绘制球面
surf = ax.plot_surface(
x, y, z,
facecolors=cmap(norm(Y_lm)),
rstride=2, cstride=2,
alpha=1.0,
linewidth=0.1,
edgecolor='k',
antialiased=True,
shade=True
)
# 设置视角和光照
ax.view_init(elev=25, azim=45)
ax.set_box_aspect([1, 1, 1])
# 美化设置
ax.set_facecolor('black')
ax.grid(False)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False
# 设置标题
ax.set_title(f"Y$_{{{l}}}^{{{m}}}$",
fontsize=14, color='white', pad=0)
# 隐藏坐标轴
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
# 添加颜色条
cax = fig.add_subplot(grid[:, -1])
sm = ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
cbar = fig.colorbar(sm, cax=cax, orientation='vertical')
cbar.set_label('Function Value', color='white', fontsize=12)
cbar.ax.yaxis.set_tick_params(color='white')
plt.setp(cbar.ax.get_yticklabels(), color='white')
cax.set_facecolor('black')
# 调整整体布局
plt.subplots_adjust(left=0.05, right=0.9, top=0.95, bottom=0.05)
# 调用函数绘制球谐函数
plot_spherical_harmonics(l_max=3, resolution=200)
plt.show()
(2)在光照渲染中的应用
核心作用:用少量系数高效存储和计算复杂光照。传统方法(如环境光贴图)需要逐像素存储光照数据,而SH将光照压缩成系数,实时渲染时快速还原。
1)SH的本质:数学压缩工具
① 核心思想
SH是一组定义在球面上的正交基函数(类似傅里叶变换的基),可将任意球面函数(如光照分布)分解为不同频率的加权组合。
- 低频基函数:描述大范围平滑变化(如天空渐变)
- 高频基函数:描述锐利细节(如太阳光斑)
②阶数与精度
三阶SH(9个系数)可表达90%的漫反射光照
五阶SH(25个系数)可捕捉更复杂光照,但存储和计算成本翻倍
数学表达:
光照函数,𝑐𝑙𝑚是SH系数,𝑌𝑙𝑚是基函数。
2)SH→RGB转换的四个关键步骤
以三阶SH(每通道9个系数)为例:
①方向输入
给定表面法线方向 𝑛=(𝑥,𝑦,𝑧),归一化为单位向量。
②基函数计算
预计算该方向对应的SH基函数值(共9个):
# 三阶SH基函数示例(方向n的取值)
Y00 = 0.282095 # 零阶(直流分量)
Y1[-1] = 0.488603 * n.y # 一阶
Y1[0] = 0.488603 * n.z
Y1[1] = 0.488603 * n.x
... # 更高阶类似
③加权求和
将SH系数与基函数逐项相乘并累加:
R = Σ (SH_coeff_red[i] * Y[i])
G = Σ (SH_coeff_green[i] * Y[i])
B = Σ (SH_coeff_blue[i] * Y[i])
④范围修正
结果可能超出[0,1],需通过Sigmoid等函数约束到合理范围。
3)应用
①环境光模拟
问题:真实环境光来自各个方向,逐方向采样计算量大。
SH方案:
- 原理:将环境光投影到球谐函数基函数上,存储为系数。球谐函数是一种正交函数基,能够有效地将复杂的光照分布分解为一组系数。
- 优势:渲染时通过系数加权求和,可以快速得到任意方向的光照强度,大大减少了计算量。
- 示例:天空盒的光照可以压缩为9个系数(三阶SH)。在实时渲染时,无需读取整张贴图,从而提高渲染效率。
- 补充:球谐函数的阶数越高,能够表示的光照细节就越丰富,但计算和存储成本也会相应增加。三阶SH(9个系数)是一个常用的平衡点,能够较好地平衡计算效率和光照效果。
②动态物体光照问题
问题:移动的物体需要实时更新光照信息。
SH方案:
- 原理:在场景中预埋"光探头"(Light Probe),每个探头存储周围环境的球谐系数。物体移动时,只需读取最近探头的系数,快速计算当前光照。
- 优势:这种方法可以有效减少动态物体的光照计算量,提高渲染效率,同时保证光照效果的连贯性。
- 补充:光探头的数量和分布会影响光照的精度。如果光探头分布稀疏,可能会导致光照过渡不够平滑。在实际应用中,需要根据场景的复杂度和性能要求合理安排光探头的位置和数量。
③颜色与视角依赖效果颜色压缩
- 原理:RGB颜色通过球谐系数转换(如RGB = SH系数 × C0 + 0.5),将颜色分布与方向关联,支持视角相关的渐变效果。
- 优势:优化存储。一个RGB颜色原本需要3个通道的贴图,用球谐系数可以压缩到12~27个浮点数(三阶SH)。这大大减少了存储空间,同时能够实现视角相关的渐变效果,使物体在不同视角下呈现更真实的光照效果。
- 补充:这种颜色压缩方法适用于对颜色精度要求不是极高的场景。在一些高精度的渲染任务中,可能需要采用更复杂的颜色表示方法来保证颜色的准确性。
④物理意义与限制
- 低频优势:球谐函数擅长表达低频光照(如柔和的漫反射),能够很好地模拟环境光的柔和效果。
- 高频限制:球谐函数无法精确还原高频细节(如锐利阴影)。这是因为球谐函数是一种低频函数,对于高频的光照变化(如锐利的阴影边缘)表示能力有限。
- 计算效率:三阶SH(9个系数)是一个常用的平衡点。高阶系数虽然能够提升精度,但存储和计算成本会剧增。在实际应用中,需要根据场景的需求和性能限制选择合适的阶数。
总结
球谐函数在计算机图形学中是一种非常有效的光照表示方法,特别适用于环境光的模拟和动态物体的光照更新。它通过将复杂的光照分布分解为一组系数,大大减少了计算量和存储空间。然而,球谐函数也有其局限性,主要体现在对高频细节的表示能力不足。在实际应用中,需要根据具体需求和性能限制合理选择球谐函数的阶数和应用场景。
3.高斯泼溅点
1)定义
高斯泼溅点是 3D Gaussian Splatting 场景建模的基本单元,它就像"一个有形状和颜色的点",但比传统点云更智能:
它不是普通的点,而是:
"一个具有体积、方向、不透明度、颜色和形变信息的三维椭球体,通过高斯函数来建模。"
你可以理解为在空间中放置了许多微小"彩色雾团",它们像墨水滴一样一起混合,最终形成逼真的3D图像。
2)核心参数组成
参数名称 | 含义 |
---|---|
位置 μ | 椭球体的中心点坐标,即它在 3D 空间中的位置 (x,y,z)(x, y, z) |
协方差 Σ | 控制椭球的形状、大小、方向------即"它拉长还是扁平、朝哪个方向" |
颜色 c | 点的颜色,可以是 RGB,也可以是球谐系数(SH) ,用于表达视角相关的颜色变化 |
不透明度 α | 控制该点的透明程度,决定它在混合渲染中的视觉权重 |
3)数学本质:三维高斯分布
高斯泼溅点是一个三维的各向异性高斯分布(Anisotropic 3D Gaussian),公式如下:

-
μ:中心位置(空间中点的坐标)
-
Σ:协方差矩阵,决定形状和方向
-
α:整体强度/透明度
-
x:空间中的任意采样点
直观含义:越接近中心点,值越高;离得远就快速衰减,形成"雾状"的视觉效果。
4)协方差矩阵 Σ 的含义与分解
协方差矩阵 Σ 是控制"椭球形状"的核心:
-
如果它是单位矩阵 ⇒ 就是一个球体;
-
如果它的三个主轴不同 ⇒ 就是椭球;
-
它可以分解为:

其中:
-
R:旋转矩阵 ⇒ 控制椭球的朝向;
-
S:缩放矩阵 ⇒ 控制每个方向上的大小。
5)颜色表示:RGB vs 球谐系数 SH
-
如果使用 RGB:表示一个固定颜色;
-
如果使用 SH 系数(Spherical Harmonics):
-
可以表示颜色随着视角改变而变化,比如金属反光、塑料表面;
-
更真实、更先进,但也更复杂;
-
渲染时根据视角方向计算 SH 展开,得到最终颜色。
-
6)高斯泼溅点在渲染中怎么用?
-
所有高斯点分布在空间中,形成稠密的"体积点云";
-
在渲染时:
-
每个点根据它的 α、颜色、位置、形状被投影到图像上;
-
多个点在图像上重叠融合,形成高质量画面;
-
类似"体积渲染"或"透明油墨混合";
-
-
使用 逐像素 rasterization + alpha blending 技术实现高效可微渲染。
通俗易懂的理解:
目标是:把这些高斯点"画"成一张真实的图像,
你可以想象:
-
你手上有一堆彩色小水滴(这些就是高斯点);
-
你拿着摄像机对着这些水滴拍照;
-
镜头中,水滴重叠、融合、透明混合,最终形成了一个栩栩如生的画面。
①相机投影(投影到屏幕)
每个高斯泼溅点都有一个位置(μ)------它在 3D 空间中。当我们用一个虚拟相机(Camera)去"看"这些点时,我们会把每个点投影到摄像机的图像平面上(也就是屏幕上的像素)。这就像把每个小水滴的"投影"打到画布上。
②在屏幕上生成"高斯模糊小斑点"
-
每个点本质上是一个三维高斯分布(模糊的彩色椭球体),
-
投影到屏幕后,它就变成一个模糊的彩色斑点;
-
越靠近斑点中心,像素值越强(越亮);越远,越淡;
-
不同的点,形状大小不同,颜色也可能不同;
-
所以屏幕上的每个像素,会受到多个高斯点的影响。
💡 类比:就像很多颜料点落在纸上,每个都有一定大小和透明度,它们在纸上融合,颜色叠加,最后形成画面。
③alpha blending(透明度叠加)
这个过程关键在于"不透明度 α":
-
如果某个点很透明(α小),它的影响就轻;
-
如果它很不透明(α大),它对图像的贡献就强;
-
通过将所有点的投影结果按照透明度进行加权融合(混合),最终合成一张图像。
这种混合方式叫:

-
Gi(x):第 i 个高斯点在该像素位置的值(根据距离中心点的远近);
-
αi:透明度;
-
colori:颜色,甚至可以是视角相关的 SH 展开结果。
④一次渲染就是所有高斯点 → 所有像素的叠加
这个过程是:
-
遍历所有高斯点;
-
把它们投影到摄像机坐标下;
-
对于每一个像素,计算它被哪些高斯点影响;
-
所有影响加起来,得到像素的最终颜色。
用专业术语说就是:
-
基于高斯分布的 rasterization(栅格化)
-
alpha compositing(透明合成)
✅ 它是一个显式渲染过程,不像 NeRF 那样"射光线采样",效率更高。
整幅图是如何"绘制"出来的:有几万个微小的椭球彩色雾团,在虚拟空间中漂浮; 一台虚拟摄像机将它们投影到二维屏幕上; 每个点变成一个模糊的斑点,颜色和透明度叠加在图像中;所有点叠加之后,呈现出一个清晰、真实、有体积感的3D场景!
7)3DGS中高斯点的完整应用流程
总览
阶段名称 | 主要目的 | 核心操作 |
---|---|---|
1️⃣ 初始化 | 建立初始场景表示 | 从 SfM 点云生成高斯点,初始化其参数 |
2️⃣ 优化 | 提升渲染真实感 | 可微渲染 + 反向传播 + 梯度下降,拟合真实图像 |
3️⃣ 自适应密度控制 | 控制点的数量和分布 | 分裂细节区域点,合并/删除平坦区域点 |
4️⃣ 渲染 | 生成可视图像 | 将3D高斯点按深度投影、混合颜色和透明度,输出最终图像 |
详细分步骤讲解
①初始化(Initialisation)
📥 把真实照片 → 转化为可优化的高斯点场景表示。
-
使用 SfM(Structure-from-Motion) 从多张照片中恢复相机位姿和稀疏点云。
-
每个 SfM 点变成一个 高斯泼溅点,初始化参数如下:
-
位置 μ:来自 SfM 点云;
-
协方差 Σ:设为单位矩阵(球形);
-
颜色:用多图平均;
-
不透明度 α:初始化为中等值;
-
球谐系数 SH(可选):初始化为常数。
-
📌 目的:搭建一个粗略但可优化的场景框架。
②优化(Optimization)
🔧 训练这个"场景",让它画出来的图像尽可能接近真实图像。
原理: 使用 可微分光栅化(Differentiable Rasterization) 使渲染过程可导 → 通过梯度下降优化每个高斯点的参数。
过程:
-
采样训练图像;
-
对每张图,用当前高斯集合进行渲染;
-
计算渲染图像和真实图像之间的差异(比如 L2 loss);
-
使用反向传播,更新:
-
每个点的位置(μ)
-
大小/方向(协方差 Σ)
-
颜色或 SH 系数
-
不透明度 α
-
📌 目标函数 通常是重建损失(重建越像真实图越好)
📌 可加正则化项,比如惩罚无效点、鼓励分布稠密等
③自适应密度控制(Adaptive Density)
🔄 让点云结构更"聪明":哪里需要点多就多,不需要就少。
核心思想:
场景中并非所有区域都需要同样多的点。例如:
-
细节区域(比如树叶、边缘)→ 需要更多点 ⇒ 拆分/复制点;
-
平坦区域(比如天空、墙面)→ 不需要那么多 ⇒ 删除点。
操作方式:
-
每隔若干迭代:
-
计算每个点的梯度大小 / 贡献度;
-
贡献高的点 ⇒ 分裂为多个子点;
-
贡献低的点 ⇒ 删除;
-
-
分裂时新点的参数基于父点微调。
📌 目的:提高效率,减少冗余,同时提升视觉质量。
④渲染(Rendering)
🖼️ 最终将优化好的高斯点生成真实图像。
步骤如下:
-
把所有 3D 高斯点投影到相机视角下的 2D 图像平面;
-
为每个点在屏幕上生成模糊"斑点"(高斯核);
-
将所有斑点按 深度顺序排序;
-
使用 alpha blending(透明度叠加)合成最终像素值;
-
输出最终渲染图像。
📌 与 NeRF 不同:它不走射线积分,而是 逐像素 rasterization,效率更高,可用于实时应用。
可视化类比
类比过程 | 实际操作 |
---|---|
SfM搭建骨架 | 类似打草稿,先勾勒出大概场景 |
点的优化调整 | 类似"涂改修正",让图像逐渐精细 |
自动加点删点 | 类似画画中"多画细节"和"删掉多余线条" |
渲染出图 | 最后上色、混色,让整幅画看起来真实自然 |
8)总结与类比
特性 | 含义 |
---|---|
类比传统点 | 高斯点是"可扩张 + 可旋转 + 有颜色 + 不透明度 + 方向感"的"智能点" |
类比体素/网格 | 高斯点是连续分布的,不需要规则网格,更灵活、更稀疏 |
类比 NeRF 点样本 | 但高斯点是显式几何 + 显式颜色 + 透明叠加,比 NeRF 更快更真实 |
渲染方式 | 利用 rasterizer(栅格化器)和 GPU 并行处理,实现实时可微渲染 |
4.高斯椭球体
1)高斯椭球体是什么?
高斯椭球体其实就是我们在 3DGS 中使用的 三维高斯分布 的几何形态。
它不是普通的"球"或"椭球壳",而是一个模糊的概率雾团,用来表示某个位置的"颜色影响范围"。
📌 数学表达
三维高斯分布函数如下:

含义解释:
-
x:任意一个空间位置(你眼前的一个点)
-
μ:高斯的中心位置(雾团的中心)
-
Σ:协方差矩阵,控制它在三维空间中"朝哪个方向胖","多胖"
-
G(x):表示在 x 位置上的概率密度值(数值越高,说明越靠近中心)
当 G(x) 取一个常数(比如 0.5)时,它就形成了一个等密度面 ------ 这就是一个椭球形状的等值面。
2)为什么它是"椭球体"?
因为协方差矩阵 Σ 会控制:
-
高斯雾团在不同方向上延伸的距离(特征值);
-
雾团的方向朝哪(特征向量);
我们可以把 Σ进行分解:

-
R:旋转矩阵(决定朝哪转);
-
S:缩放矩阵(对角矩阵,控制三个主轴上的尺度);
所以这个高斯在空间中就像一个可以随意旋转、拉伸、扭曲的椭球体。
✅ 这个"椭球雾团"就叫高斯椭球体,它是我们高斯泼溅点的空间形状模型。
3)高斯椭球体 vs 高斯泼溅点:谁是谁的"外壳"?
对象 | 含义 |
---|---|
高斯椭球体 | 用来描述泼溅点"长什么样",是其几何外形(数学) |
高斯泼溅点 | 包含位置、形状(椭球)、颜色、透明度的完整渲染单元 |
二者关系 | 椭球体是泼溅点的"空间外壳";泼溅点是"有生命的像素" |
🔁 椭球体只是形状,泼溅点才是"带颜色、能发光、会变化"的实体。
4)高斯泼溅点的完整属性
每一个泼溅点,不仅有个"雾团的形状",还有:
属性 | 解释 |
---|---|
位置 μ | 泼溅点中心位置,在3D空间中的坐标 |
形状 Σ(=RS²Rᵀ) | 协方差矩阵,定义椭球大小和方向(即几何外壳) |
不透明度 α | 控制它渲染时有多透明,用于多点融合时的深度混合 |
颜色/球谐系数 SH | 支持视角相关颜色变化,不仅仅是RGB,而是更"智能"的方向敏感颜色编码 |
5)类比总结
类比 | 含义 |
---|---|
椭球体 | 就像一个模糊的灯罩,定义光/颜色的范围 |
泼溅点 | 就像一个灯泡,能发光,颜色会变,影响周围 |
渲染 | 摄像机对着这些"灯泡"拍一张图,通过叠加 |
总结一句话
高斯椭球体是高斯泼溅点的数学形状 ,而高斯泼溅点是一个功能完整的渲染粒子单元,包括了位置、形状、颜色、不透明度等,它们共同构成了 3DGS 的基础。
5.高斯溅射技术的原理
1)什么是"高斯溅射"?
高斯溅射(Gaussian Splatting)最初是一种体绘制技术(volume rendering),核心思想是:
用一堆"模糊的小雾点"来还原一个真实世界的三维场景。
这些"雾点"在 3D 空间中不是一颗颗实心的点,而是像带颜色和厚度的半透明泡泡 ------ 它们的数学基础是三维高斯函数。
2)什么是 3D 高斯溅射技术?
3DGS 是把上面这种"雾点"思想,和 真实图像训练、光照建模、GPU渲染优化结合起来的一种新一代实时渲染技术。它的应用目标是:
-
给我几张不同角度的照片;
-
我就能还原出场景的真实 3D 结构;
-
而且可以从任意新角度生成真实的图像(→ 新视图合成)。
3)3DGS 的五大核心流程
1️⃣ 输入数据:图像 + 相机位姿 + 稀疏点云
-
拍摄一堆照片,知道每张照片的相机角度(→ SfM计算相机矩阵);
-
从中估计出稀疏点云(场景中的稀疏几何);
这一步是"把多张2D照片变成初步的3D点"。
2️⃣ 用 3D 高斯函数表示场景(用模糊小泡泡建场景)
-
每个点用一个高斯函数表示,变成一个"模糊的半透明椭球体";
-
每个高斯携带:
-
位置 μ:泡泡中心;
-
形状 Σ:泡泡的大小方向;
-
颜色信息 :不是固定颜色,而是视角相关颜色(球谐函数SH编码);
-
透明度 α:可调节的雾度;
-
✅ 场景最终就被建成了一堆这种"能变色的雾泡泡"的组合。
3️⃣ 使用优化算法来训练这些泡泡的参数(拟合真实图像)
-
让这些泡泡渲染出来的图像与真实照片进行比对;
-
用**反向传播 + 随机梯度下降(SGD)**优化泡泡的参数(位置、颜色、方向...);
-
目标是:泡泡组合出的渲染图像尽量贴近真实拍摄的图像。
✅ 这是类似"神经网络训练"的过程,但优化的不是网络参数,而是每个高斯泡泡的属性。
4️⃣ 自适应密度控制(控制泡泡多少、合并或分裂)
-
在细节多的区域:增加泡泡数量(更精细);
-
在平滑区域:合并泡泡(减少资源);
这种方法可以在保证质量的同时节省大量渲染成本。
5️⃣ 实时渲染:光栅化器+混合
-
把所有 3D 泡泡投影到摄像机图像平面,变成模糊的椭圆;
-
使用**图块级并行渲染(tile-based rasterization)**对它们排序、混合;
-
通过累加颜色与不透明度,形成真实图像(视角一致)。
✅ 所有计算都可以在 GPU 上高效并行处理,实现了"实时新视图生成"。
4)核心亮点归纳
技术点 | 解释 |
---|---|
显式表示 | 每个泡泡是清晰定义的几何和颜色单元,不像NeRF那样黑盒 |
支持视角变化 | 颜色编码为球谐系数(SH),能拟合不同角度看到的颜色 |
可微渲染 | 使用可微光栅化器,可以做梯度优化 |
渲染超快 | 不需要光线追踪,只需 GPU 混合泡泡投影图就行 |
可扩展 | 可以用于视频、动态场景、多相机输入等 |
6.高斯溅射技术的应用
1)3D重建(3D Reconstruction)
💡 定义:
从多张不同角度的图像中,还原出一个真实的、立体的三维场景(包括几何 + 外观)。
✅ 高斯溅射怎么做?
-
每张图片给出了不同角度的信息;
-
3DGS会根据这些图像,生成一堆"高斯泡泡"来填满三维空间;
-
每个泡泡的位置和颜色都经过训练优化,最终构成一个真实场景的三维表示。
🔍 为什么比传统方法强?
-
传统方法如 NeRF 渲染慢、不透明,难以修改;
-
高斯溅射是显式表示,支持直接编辑、移动;
-
重建速度快,渲染快,可直接用于可视化与后续应用。
✅ 应用场景:
-
VR/AR 内容生成(建一个虚拟展馆)
-
无人机测绘、数字孪生城市
-
游戏中的场景扫描和复刻
2)新视角合成(Novel View Synthesis)
💡 定义:
给你一些已有角度的照片,合成出"从没拍过的角度"看到的图像。
✅ 高斯溅射怎么做?
-
每个泡泡都携带"视角相关的颜色模型"(通常是球谐函数SH);
-
渲染时根据你站的角度,计算出每个泡泡的颜色和形状;
-
最终合成出一个新视角下的图像,真实感强,过渡平滑。
🔍 优势在哪?
-
不用训练神经网络(不像 NeRF);
-
不需要花很多时间推理;
-
渲染实时,甚至可以"视频级"速度运行!
✅ 应用场景:
-
视频会议(多人摄像头生成自由视角)
-
虚拟导览(如博物馆漫游)
-
影视制作(从单镜位合成多镜位素材)
3)实时渲染(Real-Time Rendering)
💡 定义:
在用户操作时(如转动视角、缩放),系统能实时输出图像画面,保持流畅互动体验。
✅ 高斯溅射怎么实现?
-
所有泡泡都已经优化好,储存在显存中;
-
视角一变,只需要快速"投影这些泡泡"并混合颜色;
-
完全基于 GPU 并行渲染,效率极高。
🔍 相比其他方法:
方法 | 实时性 | 成像质量 | 训练复杂度 |
---|---|---|---|
NeRF | ❌ 慢 | ✅ 高 | ⛔ 复杂 |
Mesh | ✅ 快 | ⛔ 较差 | ✅ 简单 |
3DGS | ✅ 极快 | ✅ 高 | ✅ 简洁 |
✅ 应用场景:
-
游戏实时渲染(尤其是动态景深、特效)
-
VR/AR头显内容(低延迟要求)
-
智能汽车或机器人视觉系统(需要实时反馈)
✅ 总结记忆口诀:
重建准(准确还原),合成快(多视角),渲染爽(实时画)!
7.什么是3DGS(3D高斯泼溅)?
3DGS是一种全新的3D场景表示方式,不再使用传统的网格模型(Mesh) ,也不像NeRF那样用隐式神经网络来表示场景,而是用数以万计的高斯函数(像点云一样)显式建模场景的几何和外观。
-
每个高斯就像是一个小的"发光粒子",有自己的:
-
位置(空间坐标)
-
方向和大小(形状和姿态由协方差矩阵控制)
-
颜色(RGB或球谐函数建模视角相关的颜色变化)
-
透明度(决定它的视觉权重)
-
这些"高斯粒子"像喷溅墨水一样,覆盖在3D空间中,通过叠加和融合,生成平滑真实的图像。
核心技术流程
-
输入数据:
-
多张从不同角度拍摄的图像
-
相机的位姿信息(通过SfM估计)
-
-
点云生成:
- 使用Structure-from-Motion(SfM)技术获取稀疏点云。
-
高斯点构建:
- 将每个点转换为一个3D高斯(带有空间和外观参数)。
-
可微渲染优化:
-
使用可微高斯光栅器,把高斯点"投影"为图像。
-
使用真实图像做监督,通过梯度下降不断优化高斯参数(位置、大小、颜色等)。
-
-
渲染输出:
- 实现实时、高质量的新视角图像合成(不同于NeRF的慢速采样渲染)。
与NeRF的对比
对比项 | NeRF | 3DGS |
---|---|---|
表示方式 | 隐式函数(MLP) | 显式点云(高斯) |
训练时间 | 慢(数小时) | 快(几十分钟) |
渲染速度 | 慢(fps < 1) | 快(实时级) |
可编辑性 | 难编辑 | 易编辑(显式结构) |
应用局限 | 实时任务困难 | 更适合SLAM、AR等实时应用 |
总结一句话:3DGS不是NeRF的升级,而是换了一个"思维模型"来建模和渲染场景。
技术突破:Niantic SPZ 格式
Niantic推出的 .SPZ
文件格式是对3DGS的进一步优化:
-
压缩率高:把原本几百MB的PLY文件压缩为十分之一大小;
-
几乎无质量损失:可视效果和原始3DGS一致;
-
适合移动设备传输:更快加载、更适合AR应用;
-
支持创作平台:可以导入Niantic Studio做3D创作或AR展示。
技术细节如:
-
每个高斯点从 236 字节压缩到 64 字节;
-
使用固定点量化、对数编码等方式优化。
总结(通俗理解)
-
把一个真实世界的场景"泼洒"为一堆高斯光点;
-
每个光点都有位置、颜色、大小,组合起来形成完整图像;
-
不再训练庞大的神经网络,而是优化这堆"光点"的参数;
-
渲染时像喷墨打印机一样快速而高效;
-
可直接用于 VR、AR、SLAM、影视等各种领域。
8.3DGS拍摄指南
3D Gaussian Splatting(3DGS)虽然不依赖神经网络学习场景隐式表示,但它对 输入图像的质量、数量和拍摄策略要求较高。以下将从拍摄准备、拍摄角度、相机参数设置等几个方面逐一说明。
① 拍摄设备建议
-
推荐使用:
-
手机(iPhone、Pixel、三星等带有良好图像质量的手机)
-
消费级相机或微单相机(如 Sony α 系列)
-
-
要求:
-
相机稳定、不会自动模糊;
-
尽量关闭图像后处理(如 HDR、滤镜);
-
支持 EXIF 中记录相机内参(有助于SfM恢复)。
-
② 拍摄场景要求
-
建议选择静态场景(避免动态物体如人、车、动物进入);
-
光照均匀:避免强烈光斑、高反差区域(影响SfM);
-
避免反光/透明物体:如玻璃、镜子、水面不适合用3DGS建模。
③ 拍摄角度与轨迹建议(非常关键❗)
这是影响重建效果的重中之重:
拍摄方式 | 说明 | 建议 |
---|---|---|
环绕拍摄(Orbit) | 绕物体水平拍摄 | 保持视角重叠率大于70%,绕一圈至少拍20~50张 |
高低角度切换 | 分别从低角度和高角度再绕拍 | 避免模型顶部或底部模糊,最好换两个仰视和俯视角度分别拍摄 |
避免纯平面运动 | 不能只从一个平面拍摄(如单一高度绕圈) | 需要多角度+高低视角交错,SfM才能恢复完整深度关系 |
图像间隔 | 连续拍摄,图像间重叠区域 > 60% | 图像数量越多,点云越密集,模型越精细 |
④ 拍摄数量建议
场景大小 | 推荐图片数量 | 举例 |
---|---|---|
小型物体(如雕像) | 30~100 张 | 桌面尺寸或小型展品 |
房间级场景 | 100~300 张 | 一个厨房/客厅 |
建筑外观或街景 | 300~1000 张+ | 整栋建筑或街道环境 |
⚠️ 越复杂的场景、遮挡越多的角落,越需要多角度和更多张数。
⑤ 相机设置建议(如使用手动相机)
-
分辨率:保持高清(如 1920×1080 以上,越高越好);
-
曝光一致:不要拍一会儿亮一会儿暗;
-
焦距固定:尽量使用固定焦距,不要拍摄过程中变焦;
-
自动对焦可以开,但要保证每张图都清晰;
-
关闭 HDR 和滤镜:防止图像风格不一致。
⑥ 注意事项汇总
正确做法 ✅ | 错误示范 ❌ |
---|---|
多视角、高重叠、环绕拍摄 | 单视角、几张图就想建模 |
静态场景,光照均匀 | 场景有移动的人、动物 |
有上下视角的拍摄 | 只拍水平一圈 |
图像清晰无模糊 | 图像抖动或对焦失败 |
尽量避免反光/玻璃 | 镜面、水面、透明物体太多 |
⑦ 拍摄后处理建议
-
可使用 COLMAP 或 instant-ngp 自带的 SfM 工具做初步图像去重;
-
保留图像数量 ≈ 提高稠密度 ≈ 更高建模精度;
-
如果最终建模效果不理想,优先回到拍摄阶段复查是否角度或数量不足。
📌 举例说明:
假设你要重建一个花园雕像:
-
站在雕像周围每隔 15° 拍一张(共 24 张一圈);
-
上下视角各一圈,再补 48 张;
-
绕近一圈+远一圈(保证细节和整体);
-
总计约 100~150 张图片,基本可以支持高质量 3DGS 重建。
9.点云生成
点云生成一般通过以下步骤进行。首先对拍摄数据进行预处理,通过图片质量检测,移除模糊图片。之后,通过对应点检索进行相机校准和照片对齐,完成相机位姿计算并获得初始点云。随后进行增量式重建,增量式重建主要利用SfM(Structure From Motion,从运动中恢复结构),SfM是一种从一组不同视角下拍摄的无序或有序影像中,同时恢复场景三维结构和相机姿态的技术。增量式SfM会选择无序影像进行特征匹配,并进行几何纠正、三角测量恢复稀疏点云结构,通过已有点云重新估计相对姿态,再进行局部和全局的BA优化,最后输出全部的相机参数和稀疏三维点云。

一般在采集照片充足,质量高的情况下,获取的相机位姿和实际采集位置相似,且初始点云形状可明显看出和采集场景一致。
光场重建
3DGS三维场景重建的大致流程如图所示,包括:
-
输入:输入是一组静态场景的图像,以及通过SfM算法得到的SfM点,以及所有图像对应的相机位姿。
-
初始化:对获取的每个稀疏点云创建初始化3D高斯椭球,其由位置(平均值)、协方差矩阵(XYZ轴缩放因子、旋转因子等)、不透明度和球谐函数系数(后文简称SH系数)所定义。该定义允许3D场景合理紧凑的表示,并通过调节参数紧凑化表示精细化场景结构。其中使用球谐函数来映射整个辐射场的方向性外观分量(RGB颜色)。
-
构建梯度流迭代优化:3D高斯椭球在对应的相机位姿下进行投影,获取光栅化之后的图像,与真实输入图像(真值图像)进行比对优化,对初始化后的参数(位置、协方差矩阵、SH系数、高斯球密度的自适应控制)进行优化,同时通过自适应密度控制策略对高斯球进行拆分融合操作。

10.4D高斯
4D高斯 是在 3D高斯溅射(3D Gaussian Splatting) 的基础上,引入时间维度(Temporal) 的一种新型表示方法。它不仅表示空间中的几何和颜色信息,还能建模 场景随时间变化的动态信息,实现对动态场景的连续建模与渲染。
维度 | 含义 |
---|---|
X, Y, Z | 表示物体在三维空间中的位置 |
T(时间) | 表示高斯基元在时间上的演变(如物体移动、变形) |
因此,4D高斯可以被理解为:
"随时间变化的3D点云 + 高斯参数",用于建模和渲染动态场景。