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

大家好,我是山海鲸的技术负责人。之前已经写了一个GIS融合系列。其实CesiumJS的整合有相当的难度,同时也有很多方面的工作,很难在几篇文章内写完,整个山海鲸团队也是投入了接近两年的时间,才把周边整套工具链进行了完善,后续有新的内容也会持续分享,隔壁系列传送门:GIS融合之路

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

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

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

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

不过难得的是,相比nerf,3d gaussian splatting对于渲染界的人来说,那可是太友好了,基本就是一个点云Plus,结合一下3D高斯分布。渲染起来基本就是一堆billboard,确实没有入门难度。网上一搜竟然有这么多开源的代码,那么作为一个讲究效率的技术负责人来说,那必然是没有自己研究的必要了,直接拿来就用吧。那么我们直接看下高斯泼溅在山海鲸中的渲染和功能集成效果吧: www.zhihu.com/zvideo/1754... 这么快就结束了?咱这可才是系列第一篇,而且从头到尾除了借鉴和废话,竟然没有对社会作出一丝自己的贡献,这心里自然是惴惴不安的

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

1、渲染的几何表达

实际上现代的游戏和3D建模,基本上绝对的主流就是Mesh网格表达,也就是三角形。三角形的优点就是和现代GPU兼容度极佳,因此渲染速度很快。但实际上除了Mesh表达外,还有类似点云,有向距离场等等,而这些方案来说,点云才是最符合人物直觉能想到的最简单的3D模型的表现形式,甚至点云往表面的渲染,也不是从高斯溅射开始的,之前的渲染界也尝试了各种算法去填充点与点之间的空隙,只是最终Mesh网格成了渲染界最终赢家。而点云本身由于和激光扫描这类技术结合度较高,因此还是有着广泛的应用,山海鲸内目前也支持点云数据的接入。最后贴一张Games101中的PPT来看下几何表达的困难:

2、AI三维重建

其实要说三维重建,数字孪生领域最熟悉的莫过于倾斜摄影了,而倾斜摄影里也是用各个角度的图片通过识别同一像素点来先建立点云数据,再通过表面重建的形式转成网格模型的。那么为什么AI界要绕那么大弯从NeRF开始做呢,因为AI领域引以为傲的最快梯度下降法必须要求几何表达是可微的,否则就没法训练了。目前常规的可微的几何表达就是有向距离场,但有向距离场目前直接渲染画面的能力还不是很常规,更多用于阴影的计算这类辅助渲染,而NeRF采用体素的渲染,实现了几何表达的可微,但遗憾的是,体素渲染目前的效率还比较低,和光栅化不可同日而语。3D高斯泼溅使用点云作为渲染的基础,可以直接复用光栅化,同时又利用高斯函数的可微性进行训练实现了训练速度和渲染速度的兼得。

3、目前高斯溅射的格式

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

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

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

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

首先就是和光照的互动,目前山海鲸中可以加入如平行光,IBL,点光源等等的光照,这些光照还不能直接和高斯溅射的模型产生效果。

其次高斯溅射由于没有直接的depth和normal信息的输出,导致在雾效,空气透视,延迟渲染等类后处理中很难处理。

最后同GIS相关技术对比,高斯溅射在坐标系支持,瓦片加载等相关周边功能的支持度上都还较为欠缺。

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

相关推荐
_oP_i20 小时前
Unity Addressables 系统处理 WebGL 打包本地资源的一种高效方式
unity·游戏引擎·webgl
新中地GIS开发老师1 天前
WebGIS和WebGL的基本概念介绍和差异对比
学习·arcgis·webgl
_oP_i2 天前
Unity 中使用 WebGL 构建并运行时使用的图片必须使用web服务器上的
前端·unity·webgl
undefined&&懒洋洋3 天前
Cesium使用flyToBoundingSphere实现倾斜相机视角观察物体
前端·javascript·cesium·webgis
flying robot5 天前
Three.js简化 WebGL 的使用
webgl
小彭努力中6 天前
114. 精灵模型标注场景(贴图)
前端·3d·webgl·贴图
小彭努力中6 天前
109. 工厂光源(环境贴图和环境光)
前端·深度学习·3d·webgl·贴图
小彭努力中6 天前
112. gui辅助调节光源阴影
前端·深度学习·3d·webgl
GIS瞧葩菜6 天前
GeoSever发布图层(保姆姬)
wms·geoserver·cesium
新中地GIS开发老师7 天前
地理信息科学专业想搞GIS开发:学前端还是后端?
前端·javascript·arcgis·前端框架·cesium