山海鲸可视化

高斯溅射融合之路(一)webgl渲染3d gaussian splatting

大家好,我是山海鲸可视化的技术负责人,之前已经写了一个 GIS 融合系列。

其实 CesiumJS 的整合有相当的难度,同时也有很多方面的工作,很难在几篇文章内写完,整个山海鲸团队也是投入了接近两年的时间才把周边整套工具链进行了完善,后续有新的内容也会持续分享,系列传送门:
山海鲸可视化:GIS 融合之路(一)技术选型 CesiumJS/loaders.gl/iTowns?
山海鲸可视化:GIS 融合之路(二)CesiumJS 和 ThreeJS 深度缓冲区整合
山海鲸可视化:GIS 融合之路(三)CesiumJS 和 ThreeJS 相机同步
山海鲸可视化:GIS 融合之路(四)如何用 CesiumJS 做出 Cesium For Unreal 的效果
山海鲸可视化:GIS 融合之路(五)给 CesiumJS 加上体积云(Volumetric Cloud)和高度雾(Height Fog)
山海鲸可视化:GIS 融合之路(六)Cesium 的雨雪风雷电效果
文章11.webp
山海鲸中 GIS 多元素整合效果

一坑未平,一坑又起。去年年末,我们的 AI 合作伙伴突然给山海鲸技术团队丢来了一个新技术:3D Gaussian Splatting。在我们的理解中,一直认为 Nerf 类似的技术还是实验室里的玩具,没想到这么快就可以实际应用了。我们技术团队一向自认无所不能,怎么能在 AI 领域毫无建树呢。

于是作为一名有好胜心的技术负责人,必须拉来团队开个会传递了一下不服输的精神:
文章22.webp

大家都很平静了接受了我的提议,一致认为高斯溅射的渲染是未来的方向,是必须被整合进山海鲸的。好了,思想上同步了,团队摩拳擦掌,接下来就是了解一下到底什么是高斯溅射了。

经过了半天学习,不得不感慨一下,AI 界相比 GIS 界那可是真的是太人性化了。当年整合 GIS 的时候,当年就光理解 GIS 界的黑话就花了一天,刚弄懂投影坐标系和球心坐标系,又得看 WGS84 和 CGCS2000。刚以为终于算入门了,又被客户问了 4490 支持不支持,那真的是语言的迷宫啊。相比之下,AI 界虽然高级词汇多,但人家是真的实打实的难啊。

不过难得的是,相比 nerf,3d gaussian splatting对于渲染界的人来说,那可是太友好了,基本就是一个点云 Plus,结合一下 3D 高斯分布。渲染起来基本就是一堆 billboard,确实没有入门难度。网上一搜竟然有这么多开源的代码,那么作为一个讲究效率的技术负责人来说,那必然是没有自己研究的必要了,直接拿来就用吧。那么我们直接看下高斯泼溅在山海鲸中的渲染和功能集成效果吧:
【鲸孪生】山海鲸可视化加载高斯溅射(3D Gaussian Splatting)模型实现昼夜切换及独立后期处理

这么快就结束了?咱这可才是系列第一篇,而且从头到尾除了借鉴和废话,竟然没有对社会作出一丝自己的贡献,这心里自然是惴惴不安的
文章33.webp

既然写不出啥原创,我就学习下科研界的办法,来写篇综述吧,也算从我个人的理解出发,说说对高斯溅射的理解:

1. 渲染的几何表达

实际上现代的游戏和 3D 建模,基本上绝对的主流就是Mesh 网格表达,也就是三角形。三角形的优点就是和现代 GPU 兼容度极佳,因此渲染速度很快。

但实际上除了 Mesh 表达外,还有类似点云、有向距离场等等,而这些方案来说,点云才是最符合人物直觉能想到的最简单的 3D 模型的表现形式,甚至点云往表面的渲染,也不是从高斯溅射开始的,之前的渲染界也尝试了各种算法去填充点与点之间的空隙,只是最终 Mesh 网格成了渲染界最终赢家。而点云本身由于和激光扫描这类技术结合度较高,因此还是有着广泛的应用,山海鲸内目前也支持点云数据的接入。

最后贴一张 Games101 中的 PPT 来看下几何表达的困难:
文章44.webp

2. AI 三维重建

其实要说三维重建,数字孪生领域最熟悉的莫过于倾斜摄影了,而倾斜摄影里也是用各个角度的图片通过识别同一像素点来先建立点云数据,再通过表面重建的形式转成网格模型的。

那么为什么 AI 界要绕那么大弯从 NeRF 开始做?

因为 AI 领域引以为傲的最快梯度下降法必须要求几何表达是可微的,否则就没法训练了。目前常规的可微的几何表达就是有向距离场,但有向距离场目前直接渲染画面的能力还不是很常规,更多用于阴影的计算这类辅助渲染,而 NeRF 采用体素的渲染,实现了几何表达的可微,但遗憾的是,体素渲染目前的效率还比较低,和光栅化不可同日而语。3D 高斯泼溅使用点云作为渲染的基础,可以直接复用光栅化,同时又利用高斯函数的可微性进行训练实现了训练速度和渲染速度的兼得。

3. 目前高斯溅射的格式

当前高斯溅射主流格式就是PLY 格式,PLY 格式是一个文件头是文本形式,而顶点数据是二进制的模式,文件头中给出了每个顶点所有的属性,是一个扩展性很强的文件格式,只是读取的时候要先读取头文件内容以确定数据部分如何读取,因此这个过程相对较慢。而现在主流的方案就是把这个 PLY 文件先读取进来,然后对每个顶点只保留位置 旋转 颜色 和 高斯函数的参数的形式生成 SPLAT 文件,牺牲掉 PLY 文件的扩展性,换来更快的加载速度。

山海鲸目前也同时支持的 ply 文件和 splat 文件的载入。

4. 目前山海鲸整合渲染时的问题

由于高斯溅射算法更多的考虑的独立渲染,和其他元素进行整合渲染就会出现各种各样的问题。

首先就是和光照的互动,目前山海鲸中可以加入如平行光,IBL,点光源等等的光照,这些光照还不能直接和高斯溅射的模型产生效果。其次高斯溅射由于没有直接的 depth 和 normal 信息的输出,导致在雾效,空气透视,延迟渲染等类后处理中很难处理。最后同 GIS 相关技术对比,高斯溅射在坐标系支持,瓦片加载等相关周边功能的支持度上都还较为欠缺。

当然,目前高斯溅射技术领域还在蓬勃发展,我们山海鲸也会一同逐步完善高斯溅射在渲染中的整合程度,也欢迎大家下载软件进行体验。