高斯溅射融合之路(一)- 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相关技术对比,高斯溅射在坐标系支持,瓦片加载等相关周边功能的支持度上都还较为欠缺。

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

相关推荐
supermapsupport2 天前
SuperMap iClient3D for WebGL三维场景与二维地图联动
3d·webgl
Mapmost3 天前
Mapmost SDK for WebGL 全新升级——解锁 3DGS 新能力!
3d·webgl
GISBox5 天前
3D Gaussian Splatting文件如何转换成3DTiles?这款免费GIS工具箱能帮你轻松解决问题
3d·gis·cesium·倾斜摄影·切片
山楂树の6 天前
【线性代数的理解】 为什么说线性代数研究的是空间变换?旋转矩阵坐标转换矩阵
线性代数·矩阵·webgl
山楂树の6 天前
Threejs 解析几何体提取顶点数据流程
3d·图形渲染·webgl
supermapsupport7 天前
SuperMap iClient3D for WebGL 影像数据可视范围控制
webgl
伶俜Monster7 天前
Threejs 光照教程,为 3D 场景注入灵魂
前端·3d·webgl·threejs
2201_759646567 天前
Three.js 引领时代的 三维可视化技术
开发语言·前端·javascript·3d·webgl
efvv9 天前
使用CSS3DRenderer/CSS2DRenderer给模型上面添加html标签
前端·javascript·webgl·threejs
伶俜Monster10 天前
Threejs教程一【三要素】
前端·3d·webgl