3D高斯泼溅(3D Gaussian Splatting,简称3DGS)正在重塑三维计算机图形学与视觉领域的格局——但这里有个关键点:它在完全不依赖任何神经网络(甚至连小型多层感知机MLP都不使用)的情况下,就取得了突破性的成果!高斯泼溅被用于对场景进行高保真度的三维重建。在“高斯泼溅”这一术语中,“高斯”指的是高斯分布(即钟形的正态概率分布),但在此处它被用作表示三维场景的基本图元(primitive,即基本或基础单元);而“泼溅(Splatting)”则指将这些三维图元投影到二维图像平面的过程。利用3D高斯泼溅生成的场景三维模型具有高度逼真的视觉效果,能精确捕捉几何结构,并支持实时渲染。与Mip-NeRF360、Plenoxels等现有方法相比,高斯泼溅能够重建更大规模的场景,且几乎不会产生伪影或漂浮物(artifacts/floaters)。

一些有趣的事实:3DGS论文的合著者、INRIA(法国国家信息与自动化研究所)高级研究员George Drettakis曾在麻省理工学院CSAIL的Vincent Sitzmann实验室(场景表征研究组)做了一场报告,其中他提到:
他们取得的最大进展,是在优化过程中开始使用可视化工具与场景进行交互。因此,在处理这类问题时,使用可视化工具至关重要。
论文的第一作者Bernhard Kerbl是CUDA和GPU编程方面的专家。在每周的例会上,他都会汇报自己又将实现速度提升了一倍,并连续三个月持续做到这一点,最终使整个系统达到了实时性能。
本文的目标非常明确:首先,我们将深入理解这篇论文,透彻掌握其中的所有公式。高斯泼溅(Gaussian Splatting)论文建立在大量前人工作的基础之上,许多概念都源于先前的研究。因此,文中直接使用了大量公式,理解这些公式的推导过程或背后的直观含义就显得尤为重要。最后,我们将展示如何使用NeRFStudio的gSplat模块,在你自己的定制数据集上训练一个高斯泼溅模型,并提供一些实用建议,帮助你获得最佳效果。
让我们开始吧!
摄影测量、NeRF 与 3D 高斯泼溅的对比
基于多视角图像进行三维重建一直是三维视觉与图形学领域长期存在的挑战!该任务旨在利用从不同视角拍摄的一组二维图像,生成场景的三维表示。解决这一问题的传统方法是摄影测量(Photogrammetry)。然而,2020 年,神经辐射场(Neural Radiance Fields, NeRF)作为一种更具照片级真实感且更鲁棒的替代方案应运而生。尽管 NeRF 取得了显著进展,但仍存在一些局限性,例如渲染速度慢、存在伪影或漂浮物(artifacts/floaters)、难以重建大尺度场景等。最终,在 2023 年,3D 高斯泼溅(3D Gaussian Splatting)被提出,有效解决了 NeRF 所面临的诸多问题。

摄影测量(Photogrammetry)
这一问题最初是通过三维计算机视觉方法来解决的,例如运动恢复结构(Structure from Motion, SfM)、多视角立体视觉(Multi-View Stereo, MVS)以及稠密重建(Dense Reconstruction)。这些方法通常基于特征点:首先对输入图像进行处理,提取特征点;然后要么在整个输入图像序列中跟踪这些特征点,要么为新帧计算特征点,并尝试与前一帧(或称为关键帧,key-frames)中的特征点进行匹配。利用这些匹配的特征点,可以计算本质矩阵(Essential Matrix)以估计相机位姿,再通过三角化(triangulation)获得场景的三维点云。
摄影测量通常存在渲染速度较慢的问题,在处理反光或透明表面时表现不佳,在缺乏纹理的环境中精度会下降,并可能产生离群的三维点(outlier 3D points),但它能提供最高的几何精度。

NeRF:神经辐射场(Neural Radiance Fields)
神经辐射场(NeRF)被用于三维重建与新视角合成,其核心思想非常优雅:通过一个简单的多层感知机(MLP)神经网络,结合体渲染(volumetric rendering)技术,来生成三维场景。它基于“场景参数化”的概念进行工作。
尽管 NeRF 能够生成照片级真实感的图像并具备良好的几何精度,但它在处理大尺度场景时仍面临挑战,且渲染速度较慢。

3D 高斯泼溅(3D Gaussian Splatting)
3D 高斯泼溅是一种光栅化方法,能够从有限数量的图像中学习并实现实时渲染照片级真实感的三维场景。与传统光栅化使用三角片面不同,该方法使用数百万个高斯椭球(Gaussians)来表示场景。
整个流程首先从运动恢复结构(Structure-from-Motion, SfM)生成的稀疏点云中初始化一组三维高斯图元。随后,通过自适应密度控制(adaptive density control)对这些高斯进行优化,动态调整其分布与朝向,使其更精确地表达场景细节。最后,采用一种可微分的基于瓦片(tile-based)的光栅化器进行高效渲染,在训练时间上与当前最先进的辐射场方法相比具有竞争力。
一旦训练完成,该系统即可支持对高度精细、视觉效果逼真的三维场景进行实时漫游与交互。
如果你对“自适应密度控制”、“基于瓦片的光栅化器”等术语还不熟悉,不必担心——这些概念将在后续章节中详细解释。
3D 高斯泼溅——入门介绍
3D 高斯泼溅(3D Gaussian Splatting,简称 3DGS)的实现包含多个精细而关键的步骤,这些步骤对于理解其工作原理至关重要。核心内容包括:
将三维高斯图元投影到二维平面;
优化高斯参数以精确还原场景;
对三维高斯进行自适应密度控制;
将三维高斯渲染到二维图像平面;
利用球谐函数(Spherical Harmonics)实现视角相关的外观表达。
本文旨在为刚接触三维视觉或图形学的新手提供一份全面的入门指南,帮助读者建立理解 3D 高斯泼溅所需的基础知识。我们将详细解读原始论文,逐一阐述上述要点,并逐步推导所有相关公式与数学表达。
让我们深入探索!
3D 高斯泼溅的投影
通常,三维数据有三种主流表示方式:点云、网格(meshes)和体素网格(voxel grids)。其中,传统光栅化方法多采用网格表示,通常以三角形作为基本图元来构建三维场景。然而,对于毛发、皮毛、烟雾等具有复杂体积细节的物体,使用三角形往往难以有效表达。此外,传统光栅化在存储和渲染大规模或高度精细的网格时,通常需要大量内存和计算资源。
为应对这些挑战,作者需要一种既可微分、又能支持极快渲染的基本图元。他们最终选择了三维高斯函数——由一个三维协方差矩阵 (Sigma) 和一个中心位置(均值)(mu) 所定义。这类高斯图元不仅具备可微性,还能轻松投影为二维“泼溅”(splat),从而通过高效的 (alpha) 混合(alpha blending)实现快速渲染。

传统图像生成过程
假设我们已经使用3D高斯函数表示了三维空间中的场景。但完成这一步之后,我们如何生成该三维场景的二维渲染图像呢?其实,其基本思路与传统的图像生成过程是一致的,主要包括以下步骤:

坐标变换:从世界坐标系(物体空间)到相机坐标系(相机空间)的转换,是通过使用外在矩阵

) 来完成的,该矩阵表示的是相机与世界之间的线性(仿射)变换。这里,(

) 是相机坐标系中的一个点,而 (

) 是世界坐标系或物体坐标系中的一个点。

相机投影:从三维相机坐标(物体空间)到二维图像坐标(屏幕空间)的转换是通过使用内参矩阵K来完成的。K由焦距和光学中心(图像中心坐标,c_x = W/2, c_y = H/2)组成。

很简单,对吧!3D高斯也采用了非常类似的流程,让我们来看看具体是怎么做的!
高斯泼溅(Gaussian Splatting)中的三维到二维投影
假设我们需要将一个3D高斯分布 (

) 投影到二维平面上。如上所述,第一步是仿射变换:

其中 (W) 是一个 (3*3) 的旋转矩阵,(P) 是一个 (1*3) 的平移向量,该变换将物体空间中的三维点 (

) 映射到相机坐标系中。
对于高斯分布而言:

其中:
(

) 是相机坐标系中的一个三维点。
(

) 是仿射变换后在相机空间中的协方差矩阵。
完成这一变换后,并不会立即进行相机投影。取而代之的是一个称为光线空间变换(Ray Space transformation)的中间步骤,记作 ( m(u) )。需要注意的是,这仍然是一个从三维到三维的映射。
这一前向渲染管线(Forward Rendering pipeline)最初在论文《EWA Volume Splatting》中提出,其中 “EWA” 代表椭圆加权平均(Elliptical Weighted Average)。

《EWA Volume Splatting》这篇论文引入了一个额外的空间(坐标系),称为光线空间(Ray Space)。该空间将光线对齐至某一坐标轴方向,从而更便于沿光线进行积分。正因为如此,我们无需像NeRF那样沿光线进行任何点采样。从光线空间到屏幕空间的最终变换包括生成包含深度、颜色和阴影信息的最终渲染图像。

如你所见,这种光线空间变换是非线性的,因为它是将相机空间坐标中的水平和垂直分量除以深度(即

) 且

),因此我们无法直接应用仿射变换的规则。取而代之的是,我们使用一阶泰勒展开,在均值 u_k 附近对 m(u) 进行线性化。


泰勒展开详解
这里简单回顾一下泰勒展开和雅可比矩阵的概念。泰勒展开是一种数学工具,用于通过函数在某一点 ( x = a ) 处的各阶导数构造一系列项,从而对非线性函数在该点附近进行线性近似。


这实际上构成了在 x=a
处与函数相切的一条直线,从而形成一个局部近似——当 x 接近 a 时,该近似效果良好。
投影的雅可比矩阵 J 是通过计算相机坐标对光线坐标的偏导数得到的。该雅可比矩阵包含焦距和图像坐标信息。需要注意的是,我们目前仍处于三维空间中。

光线空间中的协方差矩阵变换
我们已经了解了均值(一个三维点)在经过光线空间变换(即投影映射)后是如何变化的。但协方差矩阵呢?从相机空间变换到光线空间后,它又会发生怎样的变化?这一点将在以下章节中进行说明。
二维投影将三维高斯分布变换为二维形式,其投影后的协方差矩阵

为:




《EWA Volume Splatting》论文中指出:
“高斯分布在仿射映射和卷积运算下具有封闭性,且沿某一坐标轴对一个三维高斯分布进行积分,会得到一个二维高斯分布。”
因此,如果我们去掉 (

) 的第三行和第三列,就能得到一个 (2*2) 的方差矩阵(记作 (

),其结构和性质与从带有法向量的平面点出发所得到的结果完全一致。

3D高斯到椭球体(3D Gaussian to Ellipsoid)
协方差矩阵只有在满足半正定(Positive Semi-Definite, PSD)条件时才具有物理意义。然而,为了优化协方差矩阵 (

) 以在辐射场中表示3D高斯分布,作者采用了梯度下降法。这种方法使得在优化过程中难以保证矩阵始终保持有效——因为更新步骤和梯度很容易产生无效(非半正定)的协方差矩阵。
那么,我们该如何表示 (

),才能确保它在优化过程中始终维持半正定性呢?

为了解决这一问题,作者将3D高斯分布表示为一个三维椭球体,因为3D高斯分布的协方差矩阵 (

) 编码了其形状、大小和方向,这些信息恰好定义了三维空间中的一个椭球体,其中:


为确保协方差矩阵始终保持半正定(PSD),将其定义为:




优化
下图展示了 3D高斯泼溅(3D Gaussian Splatting)的优化流程。该流程以从运动恢复结构(SfM)生成的稀疏点云、相机位姿以及在该位姿下拍摄的对应图像作为输入。每个点用于初始化一个3D高斯分布。除此之外,还有一些额外的高斯分布在场景体积中的其他位置被随机初始化。
随后,系统应用自适应密度控制(Adaptive Density Control),负责对高斯分布进行剪枝(pruning)和致密化(densification)。
完成上述步骤后,系统会采样一个相机位姿及其对应的图像,并将所有高斯分布投影到二维图像平面上。投影采用前文所述的方法,并结合基于瓦片(tile-based)的光栅化器进行图像渲染。
最后,将渲染得到的图像与该相机位姿对应的真实图像进行比较,计算损失(loss),用于后续的优化迭代。

此处,作者采用随机梯度下降法(Adam)进行优化,损失函数由 L₁ 损失与 D-SSIM 项组合而成。

差分结构相似性指数(D-SSIM)是一种图像相似性度量方法,它同时考虑了亮度(Luminance)、对比度(Contrast)以及结构信息(Structural information)。

其中,( l ) 表示亮度(Luminance),( c ) 表示对比度(Contrast),( s ) 表示结构(Structure)。这些项的参数化形式如下:

其中:

SSIM 优于其他方法(如均方误差 MSE 和峰值信噪比 PSNR),因为后者倾向于衡量绝对误差。为了将 SSIM 用作损失项,需将其重新表述为一个可微的损失函数。一种常见做法是采用以下形式:






现在,我们已经清楚地理解了优化流程的工作原理及其涉及的各个组成部分,接下来让我们深入探讨:
自适应密度控制(Adaptive Density Control)
自适应密度控制是作者提出的一种方法,用于动态调整高斯分布的数量、密度及其参数,从而更准确且高效地表示三维场景。该方法包含两个步骤:
剪枝(Pruning):如果某个高斯的不透明度过小(

),其中 (

) 表示该高斯的不透明度,(

) 为设定的阈值),或者其尺度过大,则将其移除。

致密化(Densification):该步骤用于解决两类问题:
过重建(Over-reconstruction):当三维场景中的某些区域被过大或严重重叠的高斯分布表示时,会导致几何覆盖冗余且效率低下。为解决此问题,会将一个过大的高斯分裂为两个部分(见下图底行)。
欠重建(Under-reconstruction):当三维场景中某些区域缺乏足够的高斯覆盖时,会导致几何细节缺失或表示不足。对此,通过合并或克隆与该区域相关的两个或多个高斯来加以改善(见上图顶行)。
训练流程
现在我们已经了解了优化和致密化的工作原理,接下来聚焦于训练策略如何将二者结合,以生成最终的输出结果。

该算法以运动恢复结构(Structure-from-Motion, SfM)生成的点云 (M) 作为输入,并基于此初始化高斯分布的协方差 (S)、颜色 (C) 和不透明度 (A)。需要注意的是,相机位姿(包括位置和朝向)同样由 SfM 提供。函数 会返回该特定位姿下的相机位姿及其对应的真实图像。
SampleTrainingView()

基于瓦片的3D高斯光栅化(Tile-based Rasterization of 3D Gaussians)
光栅化过程的第一步是剔除(CullGaussian(p, V))。剔除是指移除那些完全位于相机视锥体(view frustum)之外,或处于极端位置、对最终图像贡献可忽略不计的高斯分布。
视锥体是一个三维空间区域,定义了相机可见的空间范围,其形状类似于一个截头金字塔(即平截头体):
近裁剪面
(near plane)和远裁剪面(far plane)定义了深度范围;
左、右、上、下裁剪面
定义了相机的视场角(Field of View, FOV)。

函数 负责使用前文所述的渲染方法,将剩余的3D高斯投影到二维图像平面上。其输出 (M') 和 (S') 分别表示高斯在屏幕空间中的2D位置及其投影“足迹”(footprint)。
ScreenspaceGaussians(M, S, V)
将屏幕划分为若干较小的区域(称为“瓦片”,tiles),以支持高效的并行处理。每个瓦片是一个 (16 imes 16) 像素的块。这种划分简化了高斯的管理,并允许GPU线程并行处理各个瓦片。
CreateTiles(w, h)
会为每个高斯所覆盖的每一个瓦片创建副本,并为其分配一个用于排序的键(key)。该键由深度值和瓦片ID(标识高斯所重叠的瓦片)组合而成。由于一个高斯泼溅的投影椭圆(即其足迹)可能跨越多个屏幕瓦片,因此需为每个相交的瓦片复制一份该高斯,以确保完整覆盖。
DuplicateWithKeys(M', T)
完成复制后,所有高斯通过 利用GPU上的基数排序(Radix Sort)按深度和瓦片ID进行全局排序。这种排序保证了在每个瓦片内部,颜色混合(blending)能够按照从前到后的顺序正确执行。
SortByKeys(K, L)
返回排序后高斯列表中每个瓦片所对应的起始和结束索引。
R ← IdentifyTileRanges(T, K)
随后,在GPU上并行处理每个瓦片:对于瓦片内的每个像素,获取影响该瓦片的高斯范围,遍历该范围内已排序的高斯,并根据其颜色 (C) 和不透明度 (A) 计算其对该像素 (i) 的贡献。
使用球谐函数实现视图相关的颜色(View-dependent Colors with Spherical Harmonics)
3D高斯泼溅是视图相关(view-dependent)的。所谓“视图相关”,是指物体的外观(如颜色、亮度)会随着观察方向相对于物体的变化而变化。
3D高斯泼溅通过球谐函数(Spherical Harmonics, SH)引入这一视图相关特性。请放心,这里并不涉及量子物理!
与直接使用RGB值表示颜色不同,3D高斯泼溅利用球谐函数将颜色编码为观察方向的函数。这样,从不同视角观察同一高斯时,其颜色可随之动态变化,从而更真实地还原材质的光照与反射特性。

如果你对球谐函数(Spherical Harmonics)的概念不太熟悉,这里提供一个简要回顾。
“球谐函数”由两个词组成:“球面”(Spherical)和“谐波”(Harmonics)。简单来说,球谐函数是一种在球面(或球坐标系)上表示函数的方法,它使用一系列谐波(即类波动)的基函数来展开目标函数。
你可能知道,任何一维或二维的周期性函数/信号都可以表示为正弦和余弦波的叠加;类似地,在三维空间中,定义在球面或球坐标系上的函数也可以通过一组球谐函数的线性组合来进行分解和近似。

球谐函数由两个整数 (l) 和 (m) 参数化:
(l) 表示方位角方向上的节线(nodal lines)数量(图中红色条带);
(m) 表示振荡或变化的次数。



在自定义数据集上训练 Gaussian Splatting
有多种方式可以训练 Gaussian Splatting 模型,你可以选择:
Gaussian Splatting 官方代码库NeRF Studio 中的 gSplat
什么是 gSplat?
gSplat 是 NeRF Studio 直接集成使用的 Gaussian Splatting 库,专为高效训练而设计。与官方实现相比,它最多可将训练内存占用降低至原来的 1/4(即减少 4 倍),并在 Mip-NeRF 360 数据集上将训练时间缩短多达 15%;对于更大规模的场景,性能提升甚至更为显著。

gSplat 针对大场景渲染进行了优化,相比官方的 CUDA 后端具有更快的性能。它包含多项功能,例如批量光栅化(batch rasterization)、深度图渲染、多 GPU 支持,以及 absgrad、抗锯齿(anti-aliasing)和 3DGS-MCMC 等高级技术。
首先,我们需要拍摄一段场景的 360 度视频;随后,通过 脚本对该视频进行处理并提取视频帧。接着,将这些图像帧输入到 COLMAP(运动恢复结构,Structure-from-Motion 流程)中,以获取相机的内参(intrinsics)和外参(extrinsics)。最后,使用
video2imgs.py 脚本将这些参数转换为 LLFF 格式。
imgs2poses.py
安装 COLMAP
COLMAP 可通过 apt 包管理器直接安装,因此简单的 命令即可正常工作。如果遇到问题,也可以从源码编译安装,请参考官方文档——在 Ubuntu 20.04 系统上,官方文档中的安装说明效果非常好。
apt install
$ sudo apt install colmap
完成上述步骤后,你可以选择克隆 gSplat 代码仓库,或者点击下方的下载按钮,直接下载包含所有修改和额外文件的仓库版本。该仓库还提供了自定义数据集的链接。
数据准备
从“订阅代码”按钮下载数据集后,请执行以下步骤:
该命令会将视频转换为图像帧,并存储到 目录中。请将
output_dir 命名为 “images”。
output_dir
$ python video2imgs.py --video_path /path/to/video.mp4 --output_dir /path/to/dataset --fps <number from 1-30>
现在,我们将使用 脚本在自定义数据上运行 COLMAP。你也可以单独运行 COLMAP。
imgs2poses.py
缩放因子(factor)可以是任意值(通常为 1 到 (n),一般取 (n = 8)),具体取决于原始图像的尺寸。
$ python imgs2poses.py --data_dir "/path/to/dataset" --factor <int>
如果你想单独运行 COLMAP,可以按照以下步骤操作:
点击 “New Project”(新建项目),会弹出一个新窗口,要求你指定数据库(database)和图像目录(images)。
Database
需要保存为一个文件(例如 );
database.db
Images
是你存放所有图像帧的文件夹。
接着点击菜单栏中的 Processing → Feature Extraction → Extract(处理 → 特征提取 → 提取),COLMAP 将从所有图像中提取特征点。
然后点击 Processing → Feature Matching → Run(处理 → 特征匹配 → 运行),执行特征匹配。
最后点击 Reconstruction → Start Reconstruction(重建 → 开始重建),这将启动运动恢复结构(Structure-from-Motion, SfM)流程。根据图像数量的不同,该过程可能耗时几分钟到数小时不等。
重建完成后,点击 File → Export All Models(文件 → 导出所有模型),这会将相机位姿、稀疏点云等数据以 格式保存。导出的文件夹通常命名为 “0”。
.bin
请创建一个名为 “sparse” 的新文件夹,并将 “0” 文件夹移入其中。
恭喜!至此,你已经完成了整个流程约 50% 的工作。
开始训练
克隆 gsplat 代码仓库,并按照其中提供的安装说明进行安装。
在我们的实践中,使用仓库提供的 文件即可顺利完成安装,但你也可以根据自己的系统配置尝试其他安装方法。
.whl
安装完成后,进入 gsplat 仓库目录,运行以下命令:
$ CUDA_VISIBLE_DEVICES=0 python examples/simple_trainer.py default --data_dir /path/to/images/folder/ --data_factor 1 --result_dir ./results/dataset
--data_dir
:指向包含 “images” 文件夹和 “sparse” 文件夹的数据目录;
--result_dir
:指定用于保存模型检查点( 文件)和
.pt 点云文件的输出目录;
.ply
--data_factor
:图像下采样因子(1 表示使用原始分辨率)。
训练过程中,系统会自动在浏览器中启动名为 “viser” 的可视化工具,实时展示渲染效果。
训练完成后,你可以使用以下命令查看最终结果:
$ python examples/simple_viewer.py --ckpt /path/to/model.pt
我们已在多种场景(包括小型和大型场景)上训练了该模型,结果非常出色,如下图所示。然而,在开始训练之前,有几点重要事项需要注意。
小场景

大场景

高斯泼溅(Gaussian Splatting)的局限性
高斯泼溅在实时、逼真3D重建方面表现非常出色,但也存在一些代价和限制:
高斯数量过多:
场景通常由数百万个高斯表示,每个高斯包含5个参数(位置、协方差、颜色、不透明度、球谐系数等)。这导致最终导出的 文件体积庞大,通常在 100–200 MB 甚至更大。
.ply
需全方位拍摄:
数据采集质量至关重要。你必须从各个角度(前、后、左、右、上、下等)充分拍摄场景。否则,重建结果可能仅在你拍摄过的视角下看起来很好,而在未覆盖的角度出现空洞或失真。
输出格式为 PLY,但非普通点云:
虽然最终结果保存为 文件,但它不仅包含点,还包含完整的高斯参数(如协方差、球谐系数等)。因此,无法用普通点云查看器打开,而需要特定的可视化工具,例如:
.ply
SuperSplat
(支持可视化 + 编辑)
3D Gaussian Splatting with Three.js
(仅可视化)
Viser
(仅可视化)
Splatviz
(支持可视化 + 编辑)
无法直接生成网格(Mesh):
原始的高斯泼溅实现不输出三角网格。若要从高斯泼溅重建出网格,需使用后续方法,例如 “SuGaR: Surface-Aligned Gaussian Splatting for Efficient 3D Mesh Reconstruction”。你可以参考相关视频教程来实现这一转换。
核心要点总结
无需神经网络:
与 NeRF 等方法不同,3DGS 不依赖神经网络,而是基于数学优化和基于瓦片的光栅化技术。
数据表示方式:
3D 场景被表示为数百万个 3D 高斯,每个高斯由以下属性定义:
位置(position)
协方差(covariance,控制形状和方向)
颜色(color)
不透明度(opacity)
球谐函数系数(用于视图相关的外观)
优化流程:
通过自适应密度控制(adaptive density control)动态调整高斯分布——包括剪枝(pruning)冗余高斯和致密化(densification)缺失区域。优化目标是最小化视图空间中的 L1 损失 和 D-SSIM 感知损失。
基于瓦片的光栅化:
利用 GPU 并行处理,在屏幕空间将高斯按 16×16 像素瓦片划分,通过剔除、排序和逐瓦片混合,实现高效渲染。
球谐函数实现视图相关性:
颜色不再固定为 RGB,而是通过球谐函数(SH)编码为观察方向的函数,从而实现随视角变化的逼真外观。
结论
3D 高斯泼溅(3DGS)正在革新 3D 图形与视觉领域——它无需神经网络,即可实现实时、照片级真实的 3D 场景重建。其创新性地使用 3D 高斯表示几何与外观,并结合高效的渲染管线,有效克服了传统方法(如摄影测量和 NeRF)在速度、内存和质量上的诸多挑战。
尽管存在文件体积大、可视化工具受限等不足,但其卓越的速度、可扩展性与高质量输出,使其在游戏、AR/VR、实时 3D 内容创作等场景中展现出巨大潜力。而像 gSplats 这样的工具进一步降低了使用门槛,为 3D 图形与视觉技术开辟了全新的可能性。