
127、3D Gaussian Splatting:实时新视角合成与3D场景重建兄弟们,今天这篇咱们聊聊3D Gaussian Splatting(3DGS)。为什么突然想写这个?因为上周我在调试一个机械臂抓取项目,场景里有个透明塑料杯,NeRF重建出来的几何直接糊成一团,抓取位姿算出来偏了快两厘米。后来换成3DGS,虽然透明物体依然有瑕疵,但至少表面轮廓能看了,而且训练速度从NeRF的几个小时压缩到十几分钟。这个对比太直观了,所以决定把这段时间踩的坑和心得整理出来。先说说3DGS到底在解决什么问题。传统NeRF走的是隐式表征路线,用MLP去拟合一个连续场,查询每个空间点的颜色和密度,然后做体渲染。这玩意儿效果确实好,但训练慢、推理更慢,一张图要跑几十毫秒甚至上百毫秒。对于机器人这种需要实时反馈的场景,NeRF基本没法直接上。3DGS换了个思路,直接用一堆显式的3D高斯椭球体去表示场景,每个高斯有自己的位置、协方差、颜色和不透明度,渲染的时候把这些高斯投影到图像平面上,按深度排序后做alpha blending。整个过程全是矩阵运算,GPU并行度极高,所以能做到实时渲染。咱们先看核心数据结构。每个3D高斯其实就是一个带协方差矩阵的多元高斯分布,在空间里是一个椭球。初始化的时候通常用SfM(比如COLMAP)得到的稀疏点云,每个点变成一个高斯。这里有个关键操作——协方差矩阵必须保持半正定,所以实际存储的是缩放向量和旋转四元数,然后通过公式构造协方差矩阵。代码里大概长这样:def