非常现代的技术。虽然现在也有点入土了。
3DGS 这个名字几乎把整片论文概括其中:任务类型是三维重建;表示场景的方法是一组 Gaussian 分布,可以理解成边缘糊糊的椭球;Splatting 是渲染方法,通过把这一堆 Gaussian 分布“泼”到一个二维平面上完成渲染,很有光栅化的味道。
3DGS 的效果是相当强大的,在给定多张不同视角的图片下,其同时实现了:对场景的渲染(而非单个物体)、1080p、实时渲染(
arxiv.org/pdf/2308.04079(2023 年 8 月)
写的很好的博客:一文带你入门 3D Gaussian Splatting – 知乎
3D Gaussian
3D Gaussian 长这样:
容易发现这是一个(不考虑位置
在点云表示中,一个场景被理解为一个疏密不均的点集;Gaussian 表示只是把点云中的点都换成了 3D Gaussian,就像在每个点的附近笼上一个电子云。
理论上协方差
其中
为啥这么假设?到时候网络要学的东西就是这个
,如果直接优化 的话难以保证半正定,拆成这样的话每一步都是可微的,优化目标可以传到 和 上,又能保证正定性。
如果
综上一个不考虑颜色的 3D Gaussian 需要 11 维参数描述:
,位置 ,两个协方差矩阵参数 和 。流程中的每个参数都是可微的。 论文里面甚至细致地推了它们的微分式子
3DGS 的输入是 SfM 结构化处理(Structure from Motion)后的一组多视角图片带相机位姿。SfM 的副产物是一个描述场景的稀疏点云,3DGS 就在这个点云的点上计算并优化 Gaussian。
啥是 SfM?
用摄像机给场景录一段视频,逐帧抽出图像,SfM 可以还原出每帧对应的相机位姿,顺便得到一个稀疏点云。SfM 一般基于经典的特征点匹配技术实现,对每帧找特征然后追踪这些特征点的移动情况。
到时候会利用梯度下降等方法学习 每个 Gaussian 的各个参数。
作为 Gaussian 基础的点云并不是一成不变的。可以通过自适应密度控制等方式加点删点等。
Splatting
首先是把所有世界空间的 Gaussian 变到相机空间里面,给一个视图变换
其它的照常计算。特别地,投影得到的 Gaussian 的不透明度
可以想见之后会有一个类似 Alpha Blending 的过程,里面会对所有 3D Gaussian 在整个光程积分然后求和。一个小 Trick 在于这里实际上不用真的去数值积分:3D Gaussian 的积分就是 2D Gaussian,其协方差矩阵也可以直接算出来。
并且如果沿正确的方向积分的话,新的协方差矩阵只需要把原来的丢掉一行一列就行了。
网上有人说这一步很妙。妙在哪了……概率论没学好吧……之所以选择 Gaussian 函数作表示会不会就是因为它积起来很方便(并且有直观意义)?
然后按深度排序,Alpha Blending 渲染一下
其中
其中
注意到每个 Gaussian 长得像个球但实际弥散到了整个空间,对每个像素点把全体 Gaussian 过一遍的话开销太大。一个基本想法是,把屏幕空间划分为一堆 Tile,对每个 Tile 仅考虑里面的 Gaussian。
本文地址: 笔记 – 3D Gaussian Splatting for Real-Time Radiance Field Rendering
评论功能没修好,暂不开放