介绍
相较于传统nerf,3DGS存储“特定点”(这些点与中心物体密切相关)的球谐函数而不是用mlp存储空间中每个点颜色和透明度。渲染时,不是采用从像素点引出射线的方式而是采用压缩变换的方式,把整个空间压缩到以成像平面为低面的长方体中。
3DGS存储“特定点”的球谐函数,并用一个高斯分布的椭球拓展这些点。这里的高斯分布其实和概率论中的高斯分布没有太大关系,也没有涉及到概率的计算。高斯分布只是为了用概率密度代表“特定点”对其他点的影响程度。
渲染过程
渲染时,首先对所有空间点进行压缩变换,相机坐标:
然后把空间内所有的高斯分布投影到成像平面上(现在变成了二维的高斯分布),对于每一个像素点,按照公式
算出像素点的颜色,其中N是覆盖像素点
的高斯分布数量,
是第i个高斯分布所代表的颜色(由球谐函数和方向求得),
是第i个高斯分布在(x,y)点的贡献度,
是不透明度,
是高斯分布中心点。(在渲染前先将覆盖像素点的高斯球由近到远排序)
如何获得“特定点”?
利用SfM获得点云,将点云中每一个点就是“特定点”,将他们扩展成一个高斯椭球,并初始化这些“特定点”的位置、协方差
、颜色
(用球谐函数存储)、不透明度
如何提升渲染效率?
将要渲染的图片划分为16×16个方格,每一个线程负责渲染一个格子,这样渲染就可以并行进行,提高效率。每个格子在渲染时只用考虑视锥内的高斯球,而忽略其他的高斯球。