任务目标
通过 N 套多视角图片、相机内参(intrinsic,包括焦距、宽高等)和相机外参(extrinsics,包括旋转、平移)
{Ii,Ki,Wi}i=1N
用可微的渲染来重建 3D 场景.
对于每个视角 i,都使用当前的参数 θ 来渲染场景,获得图像 Iθ,i,然后将这张图像与其对应的输入图像 Ii 进行比较,使 Ii≈Iθ,i.这可以通过使用标准梯度下降算法,达到最小化光度损失 (photometric loss) 以实现:
L(θ)=N1i=1∑N∥Iθ,i−Ii∥2.(1)
体积表示
NeRF 和 3DGS 引入了体积表示 (volumetric representations) 使得可微的体渲染成为可能.场景被描述为一个量化吸收率的密度场
σθ:R3→R
和一个量化辐射率的色彩场
cθ:R3→R.
体积渲染微分方程
设点 p 为输入图像 Ii 中的一个像素,oi 为相机位置,
γp(t)=oi+tv
为视线.若忽略散射,则累积辐射亮度 I(γ(t)) 满足体积光传输常微分方程 (ordinary differential equation, ODE):
dtdI(t)=吸收−σθ(t)I(t)+辐射σθ(t)cθ(t).(2)
出于简洁考虑,在符号中省略了 γ.严格来讲,分别是 σθ(γ(t)) 和 cθ(γ(t),v).
数值求积解微分方程 (NeRF)
常微分方程 (2) 式的求解过程见一阶线性微分方程求解.假设初始状态背景辐射为零,即 I(tnear)=0,则射线末端的累积辐射为:
Ifar:=I(tfar)=∫tneartfarT(t)σθ(t)cθ(t)dt,(3)
其中
T(t)=exp(−∫tneartσθ(s)ds).
T(t) 代表透射率 (transmittance),表示从相机 tnear 到 t 位置后未被吸收的光量.在实际中,为了渲染预测图像 Iθ,i,将使用数值求积法 (numerical quadrature methods) 来近似 (3) 式:
Ifar≈i=1∑Ncθ(ti)(1−exp(−σθ(ti)δi))j=1∏i−1exp(−σθ(tj)δj),(4)
其中 δi=ti−ti−1 是步长.
高斯的密度函数
在 NeRF 中,函数 σθ 和 cθ 均由神经网络建模.然而,神经网络需要对整个域进行监督,这之中包含了大量空白区域,从而导致高昂的计算开销.
为了解决这个问题,在 3DGS 中,函数 σθ 和 cθ 用有色 3D 高斯集表示.3DGS 从 SfM 获取有色点云,用于初始化 M 个高斯的集合,
gi:={μi,Σi,σi,ci},
其中
μi∈R3 是高斯中心,
Σi∈R3×3 是协方差矩阵,
σi∈R 是不透明度,
ci∈R3 是 RGB 颜色.
每个高斯都用如下的密度函数 Gi(x):R3→R 影响点 x 周围的空间:
Gi(x):=exp(−21(x−μi)TΣi−1(x−μi)),(5)
体积泼溅解微分方程 (3DGS)
求积法体渲染的计算开销太大,因此 3DGS 采用体积泼溅 (volume splatting) 来近似 (3) 式的积分.设 γ 为与像素 p 对应的视线,交叉于按距离排序的 K 个高斯椭球.利用积分学的基本性质,我们可以将 (3) 式重写为
I(γ)=i=1∑Kciσiτij=1∏i−1(1−σjτj),with τi=∫RGi(γ(t))dt,(6)
推导过程见此处.
3D 高斯投影
想求解 (6) 式,就要先解决积分 τi 的问题.将 3D 高斯 Gi 泼溅到 2D 屏幕上,就能得到与 τi 等效的 2D 高斯 G~i:R2→R.
由相机内参 K 决定的透视投影 PK:R3→R2 是非仿射的,所以使用它在高斯中心 μi 处的雅可比矩阵 J∈R2×3 对投影做一阶近似:
PK(x)≈PK(μi)+J(x−μi)(7)
——尽管透视投影是非线性的,但是一个高斯通常较小,所以其附近可以近似看作线性变换.高斯经过线性变换后仍然是高斯,所以这一步使得 3D 高斯投影后,可以近似看作 2D 高斯.
屏幕空间中的合成
为了进行屏幕空间中的合成,需要与 3D 高斯对应的 2D 高斯的全套参数:
g~i:={μ~i,Σ~i,σ~i,c~i}.
用相机外参 W 将世界空间的 3D 高斯中心 μi 变换到相机坐标系,得到投影后的 2D 高斯中心
μ~i:=PK(Wμi).(8.1)
同理,先用 W 将协方差矩阵 Σi 变换到相机坐标系,再用雅可比矩阵 J 近似一阶线性,得到
Σ~i:=JWΣiWTJT.(8.2)
最后,不透明度和颜色保持不变,即 σ~i=σi,c~i=ci.代入 (6) 式,最终得到在屏幕像素 p 位置的光辐射函数
If=i=1∑Kciσ~iG~i(p)j=1∏i−1(1−σ~jG~j(p)).(9)