查看原文
其他

下一代NeRF, Gaussian Splatting来了~

深度抑郁患者 GIS小丸子
2024-09-08
昨天以NeRF为主要技术路线的厂商LumaAI发布了其新一代的基于Gaussian Splatting构建的可交互场景,根据其介绍,其中有两个关键的特色值得关注:
第一、在浏览器端和手机端的超高效渲染,这个其实是一个非常突破性的进步,无法高效的实时渲染一直是阻碍NeRF进一步应用的关键障碍,而NeRF无法实时渲染的原因,主要就是在于使用体积渲染的时候,需要查询每条射线上的采样点并进行积分,而且传统的NeRF还需要进一步对每个采样点去查询神经网络才能得到相应的输出值,当然后续也有很多改进的方法出现,比如缩小甚至是抛弃神经网络,并将这些采样点存储在体素中或者是哈希网格中等;
第二、对网络传输友好,8-20M的体积(未来可以更小),在手机端和浏览器端使用的一个关键的要素就是要体积小,现在对于大场景的主流方法都是流式加载,可以是将3D做成切片的瓦片流,也可以是直接基于WebRTC的视频流,其核心的思想都是为了保证当前视口下数据流大小的稳定;
当然官方也给出了一个Web端使用LumaAI生成的场景案例:
1、从加载上时间上来看,当前的场景应该是被分为前景和背景两个文件,gs_web_gaussian1.bin和gs_web_gaussian2.bin,在个人的当前的网络环境下加载的时间并不轻松,大概在30s左右,但是也有一个特点就是上述两个场景文件持续加载的过程场景也是逐渐渲染显示的,并不是都加载完才完全显示。
2、从渲染的效率来看,在我当前的机器配置下(M1 Pro 芯片 16GB内存),在进行场景交互的过程中,帧率可以稳定在118FPS,总体比较流畅。
根据原始文章的介绍,Gaussian Splatting可以支持在1080p的清晰度下保持大于30帧的输出效率。
所以从上面的一些案例来看LumaAI基本上解决了在Web端和手机端的辐射场的实时渲染问题,而这背后就是借助了Gaussian Splatting技术,关于该技术具体的描述可参考《3D Gaussian Splatting for Real-Time Radiance Field Rendering》这篇文章。
其实这个技术的出发点也比较清晰,目前的3D场景都是以Mesh和Point来显式表达,而且这种结构对快速的GPU光栅化是友好的,能够直接利用物理API的性能,所以可以得到比较快速的渲染效率。
但是现在的NeRF场景虽然渲染效果好,但是在渲染的时候需要对场景进行采样,这也就导致了渲染的效率不高。
那是不是可以把这两种方法结合在一起,既可以支持快速的光栅化(rasterization)渲染,同时又可以保证场景的可微连续便于优化。
一、场景表达
在计算机图形学中,三角形属于基础图元,场景中的对象最后都要经过三角形的光栅化(rasterization)成为像素之后才可以被显示出来。
而Gaussian Splatting中与三角形类似的概念就是高斯(gaussians),如下就是被光栅化(rasterization)之后的高斯函数(边界只是为了便于展示)。
其一共由四个部分组成:
  • 位置(Position): 表达它所在的位置坐标 (XYZ)
  • 协方差(Covariance): 表达它是如何被拉伸和缩放的 (3x3 矩阵)
  • 颜色(Color):表达它是什么颜色(RGB)
  • 透明度(Alpha):表达它的透明度 (α)
而在场景表达的时候就需要根据场景的特征进行多个高斯的叠加绘制。
如下就是由700万个高斯表达的场景
这是在不透明模式下场景光栅化之后的效果,更易于理解
二、构建流程
1、这个步骤其实和NeRF是一样的就是,借助SFM(Structure from Motion)方法从2D的照片中得到初始的3D点云。
2、将每一个点转换成高斯,完成这一步其实就已经可以支持光栅化了,但是为了得到更好的效果还需要进一步的进行训练。
3、使用类似于神经网络的随机梯度下降进行训练,将光栅化后的图像与真值对比,根据损失来调节高斯的参数。
其中高斯的光栅化过程和计算机图形学中的三角形光栅化是一致的:
  • 从相机视角将每个高斯投影为2D的图像;
  • 将高斯按照深度进行排序;
  • 对于每个像素从前到后将每个高斯混合在一起。
另外在误差处理方面,高斯有一些特别的处理方法,如果误差很大就需要高斯的大小进行克隆或者分割,高斯小的情况下进行克隆,高斯大的情况下就需要进行分割,如果高斯的Alpha值太低也需要将其删除,从而降低误差。
三、主要创新
根据论文中的贡献总结,主要有如下三点,有一部分由于需要涉及算法在前文未做展开,有兴趣的可以自己阅读原文(公众号后台输入“105”获取原文下载链接):
1、使用3D Gaussian来表达场景,保留了连续体积辐射场优化所需要的属性,同时还能够避免计算空白空间带来的无效计算;
2、对3D Gaussian场景的密度控制,特别优化各向异性协方差,以实现场景的精确表示;
3、开发了一种快速可见感知的渲染算法,支持各向异性的泼溅(Splatting),训练速度快,同时支持实时渲染;
总的来说,Gaussian Splatting将辐射场带向了实时渲染,同时也就意味着未来该项技术有机会能够进一步得到广泛的应用,是NeRF之后的又一次突破,也有人将该技术称为 Next Big Thing in 3D!
参考文献:
1.https://huggingface.co/blog/gaussian-splatting
2.https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_high.pdf
继续滑动看下一个
GIS小丸子
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存