3D高斯破溅和4D高斯

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 展开结果。

④一次渲染就是所有高斯点 → 所有像素的叠加

这个过程是:

  1. 遍历所有高斯点;

  2. 把它们投影到摄像机坐标下;

  3. 对于每一个像素,计算它被哪些高斯点影响;

  4. 所有影响加起来,得到像素的最终颜色。

用专业术语说就是:

  • 基于高斯分布的 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)

🖼️ 最终将优化好的高斯点生成真实图像。

步骤如下:

  1. 把所有 3D 高斯点投影到相机视角下的 2D 图像平面

  2. 为每个点在屏幕上生成模糊"斑点"(高斯核);

  3. 将所有斑点按 深度顺序排序

  4. 使用 alpha blending(透明度叠加)合成最终像素值;

  5. 输出最终渲染图像。

📌 与 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空间中,通过叠加和融合,生成平滑真实的图像。

核心技术流程

  1. 输入数据

    • 多张从不同角度拍摄的图像

    • 相机的位姿信息(通过SfM估计)

  2. 点云生成

    • 使用Structure-from-Motion(SfM)技术获取稀疏点云。
  3. 高斯点构建

    • 将每个点转换为一个3D高斯(带有空间和外观参数)。
  4. 可微渲染优化

    • 使用可微高斯光栅器,把高斯点"投影"为图像。

    • 使用真实图像做监督,通过梯度下降不断优化高斯参数(位置、大小、颜色等)。

  5. 渲染输出

    • 实现实时、高质量的新视角图像合成(不同于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 工具做初步图像去重;

  • 保留图像数量 ≈ 提高稠密度 ≈ 更高建模精度;

  • 如果最终建模效果不理想,优先回到拍摄阶段复查是否角度或数量不足。


📌 举例说明:

假设你要重建一个花园雕像:

  1. 站在雕像周围每隔 15° 拍一张(共 24 张一圈);

  2. 上下视角各一圈,再补 48 张;

  3. 绕近一圈+远一圈(保证细节和整体);

  4. 总计约 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点云 + 高斯参数",用于建模和渲染动态场景。

相关推荐
小冷爱读书1 个月前
3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解
点云·3dgs·重建
Mapmost1 个月前
倾斜摄影已过时?3DGS能否重塑三维重建效率天花板
3d·信息可视化·aigc·3dgs
ergevv1 个月前
3DGS-slam:splatam公式
slam·公式·3dgs·splatam·链式求导
寻丶幽风3 个月前
论文阅读笔记——ReconDreamer
论文阅读·笔记·自动驾驶·3dgs·世界模型·闭环仿真
诺有缸的高飞鸟3 个月前
从零开始跑通3DGS教程:介绍
colmap·3dgs·sfm
诺有缸的高飞鸟3 个月前
从零开始跑通3DGS教程:(二)SFM(colmap)计算初始点云和相机pose
colmap·3dgs·sfm
诺有缸的高飞鸟3 个月前
从零开始跑通3DGS教程:(一)数据(采集)
colmap·3dgs·sfm
寻丶幽风3 个月前
论文阅读笔记——ST-4DGS,WideRange4D
论文阅读·人工智能·笔记·深度学习·3dgs·4dgs
杀生丸学AI3 个月前
【三维生成】StarGen:基于视频扩散模型的可扩展的时空自回归场景生成
机器学习·aigc·三维重建·3dgs·稀疏重建·深度补全·自回归模型