§ 参考资料 共 3 条
在 3DGS 3. 体渲染 中,我们得到了论文中的体渲染方程:
$$ I_\lambda(\hat{\boldsymbol x})=\int_0^Lc_\lambda(\hat{\boldsymbol x},\xi)g(\hat{\boldsymbol x},\xi)e^{-\int_0^\xi g(\hat{\boldsymbol x},\mu)\mathrm d\mu}\mathrm d\xi $$可以发现,它是在射线空间中进行的,我们需要将三维高斯转换到射线空间,这个过程就叫 Splatting
此外,一个高斯椭球包含若干属性:
- $\boldsymbol\mu$:中心位置
- $\boldsymbol\Sigma$:协方差
- $\boldsymbol\alpha$:不透明度
- $\boldsymbol c$:球谐系数表示的颜色
我们也需要将这些属性用到体渲染方程中,将场景渲染出来
3D 高斯的仿射变换
从世界空间到相机空间的变换是仿射变换
在 3DGS 1. 高斯分布与高斯椭球 中,我们通过对 $n$ 元标准高斯分布进行推广得到 $n$ 元高斯分布,用了
$$ \boldsymbol Y=\boldsymbol A\boldsymbol X+\boldsymbol\mu $$这个变换,它就是仿射变换
所以,所有的高斯分布都可以看成是标准高斯分布经过仿射变换得到的,高斯分布经过仿射变换后仍然是高斯分布
假设我们有一个高斯分布:
$$ f(\boldsymbol x)=\frac{1}{(2\pi)^{n/2}\vert\boldsymbol\Sigma\vert^{1/2}}e^{-\frac{1}{2}(\boldsymbol x-\boldsymbol \mu)^T\boldsymbol \Sigma^{-1}(\boldsymbol x-\boldsymbol \mu)} $$经过仿射变换 $\boldsymbol y=T(\boldsymbol x)=\boldsymbol A\boldsymbol x+\boldsymbol b$ 后,利用概率密度变换公式得到:
$$ \begin{aligned} f(\boldsymbol y)&=f(T^{-1}(\boldsymbol y))\vert\boldsymbol J\vert \\ &=\frac{1}{(2\pi)^{n/2}\vert\boldsymbol\Sigma\vert^{1/2}}e^{-\frac{1}{2}\left[\boldsymbol A^{-1}(\boldsymbol y-\boldsymbol b)-\boldsymbol\mu\right]^T\boldsymbol\Sigma^{-1}\left[\boldsymbol A^{-1}(\boldsymbol y-\boldsymbol b)-\boldsymbol\mu\right]}\left\vert \boldsymbol A\right\vert^{-1} \\ &=\frac{1}{(2\pi)^{n/2}\vert\boldsymbol\Sigma\vert^{1/2}}e^{-\frac{1}{2}\left[\boldsymbol y-(\boldsymbol A\boldsymbol\mu+\boldsymbol b)\right]^T\boldsymbol(\boldsymbol A\boldsymbol \Sigma\boldsymbol A^T)^{-1}\left[\boldsymbol y-(\boldsymbol A\boldsymbol\mu+\boldsymbol b)\right]}\left\vert \boldsymbol A\right\vert^{-1} \\ &=\frac{1}{(2\pi)^{n/2}\vert\boldsymbol A\boldsymbol \Sigma\boldsymbol A^T\vert^{1/2}}e^{-\frac{1}{2}\left[\boldsymbol y-(\boldsymbol A\boldsymbol\mu+\boldsymbol b)\right]^T\boldsymbol(\boldsymbol A\boldsymbol \Sigma\boldsymbol A^T)^{-1}\left[\boldsymbol y-(\boldsymbol A\boldsymbol\mu+\boldsymbol b)\right]} \end{aligned} $$即:$\boldsymbol\mu'=\boldsymbol A\boldsymbol\mu+\boldsymbol b$,$\boldsymbol\Sigma'=\boldsymbol A\boldsymbol \Sigma\boldsymbol A^T$
3D 高斯的非仿射变换
从相机空间到射线空间的变换是非仿射变换
参考 3DGS 3. 体渲染,对于相机空间中的一个点 $\boldsymbol x$,投影变换函数可以写作:
$$ \phi(\boldsymbol x)=\begin{bmatrix} x_0/x_2 \\ x_1/x_2 \\ \Vert\boldsymbol x\Vert \end{bmatrix} $$我们在将高斯投影到射线空间时,是知道高斯的中心点 $\boldsymbol\mu$ 的,所以我们使用泰勒展开对这个变换进行近似:
$$ \phi(\boldsymbol x)=\phi(\boldsymbol\mu)+\boldsymbol J_{\boldsymbol\mu}(\boldsymbol x-\boldsymbol\mu)+o(\cdot) $$其中,$\boldsymbol J_{\boldsymbol\mu}$ 是 $\phi(\boldsymbol x)$ 对 $\boldsymbol x$ 的一阶导数对应的雅可比矩阵在 $\boldsymbol x=\boldsymbol\mu$ 处的取值,它可以表示成:
$$ \boldsymbol J_{\boldsymbol\mu}=\begin{bmatrix} \frac{\partial \phi_0}{\partial x_0} & \frac{\partial \phi_0}{\partial x_1} & \frac{\partial \phi_0}{\partial x_2} \\ \frac{\partial \phi_1}{\partial x_0} & \frac{\partial \phi_1}{\partial x_1} & \frac{\partial \phi_1}{\partial x_2} \\ \frac{\partial \phi_2}{\partial x_0} & \frac{\partial \phi_2}{\partial x_1} & \frac{\partial \phi_2}{\partial x_2} \end{bmatrix}_{\boldsymbol x=\boldsymbol\mu}=\begin{bmatrix} \frac{1}{x_2} & 0 & -\frac{x_0}{x_2^2} \\ 0 & \frac{1}{x_2} & -\frac{x_1}{x_2^2} \\ \frac{x_0}{\Vert\boldsymbol x\Vert} & \frac{x_1}{\Vert\boldsymbol x\Vert} & \frac{x_2}{\Vert\boldsymbol x\Vert} \end{bmatrix}_{\boldsymbol x=\boldsymbol\mu}=\begin{bmatrix} \frac{1}{\mu_2} & 0 & -\frac{\mu_0}{\mu_2^2} \\ 0 & \frac{1}{\mu_2} & -\frac{\mu_1}{\mu_2^2} \\ \frac{\mu_0}{\Vert\boldsymbol\mu\Vert} & \frac{\mu_1}{\Vert\boldsymbol\mu\Vert} & \frac{\mu_2}{\Vert\boldsymbol\mu\Vert} \end{bmatrix} $$参考 https://zhuanlan.zhihu.com/p/666465701,射线空间的第三维坐标除了取 $\Vert\boldsymbol x\Vert$,也可以取 $x_0$、$x_1$ 或 $x_2$,但是取 $\Vert\boldsymbol x\Vert$ 的效果最好
一阶泰勒展开之后就是仿射变换了,写成:
$$ \phi(\boldsymbol x)\approx\phi(\boldsymbol\mu)+\boldsymbol J_{\boldsymbol\mu}(\boldsymbol x-\boldsymbol\mu)=\boldsymbol J_{\boldsymbol\mu}\boldsymbol x+[\phi(\boldsymbol\mu)-\boldsymbol J_{\boldsymbol\mu}\boldsymbol\mu] $$所以我们可以直接写出:$\boldsymbol\mu'=\phi(\boldsymbol A\boldsymbol\mu+\boldsymbol b)$,$\boldsymbol\Sigma'=\boldsymbol J_{\boldsymbol\mu}\boldsymbol \Sigma\boldsymbol J_{\boldsymbol\mu}^T$
那么,从世界空间到射线空间的变换就是:
$$ \begin{aligned} \boldsymbol\mu'&=\phi(\boldsymbol\mu) \\ \boldsymbol\Sigma'&=\boldsymbol J_{\boldsymbol\mu}\boldsymbol A\boldsymbol \Sigma\boldsymbol A^T\boldsymbol J_{\boldsymbol\mu}^T \end{aligned} $$重建
现在,我们把高斯从世界空间变换到了射线空间,下一步就是如何用这些高斯以及它们携带的属性渲染出一张图像
先看体渲染方程,右侧主要有 $c_\lambda$ 和 $g$ 两个函数,分别表示颜色和消光系数,我们需要用场景中所有的高斯构建出来这两个函数