年初看到Cesium团队在splat-shader分支中完成了高斯泼溅文件的加载功能,实现了KHR_gaussian_splatting,于是山海鲸旗下的GISBox团队加班加点,肝了一天一夜,迅速进行了实现了切片支持能导出KHR_gaussian_splatting的glb,并写了一篇文章和大家分享其中的一些技术细节:
高斯溅射和GIS融合之路- 将splat文件切片成3dtiles
也同时把这篇文章收录在之前的文章合集当中,大家有兴趣的也可以去翻翻之前的文章:
编辑GIS融合之路山海鲸可视化 的专栏12 篇内容 · 80 赞同 · 32 订阅
编辑高斯溅射(3dgs)整合之路山海鲸可视化 的专栏3 篇内容 · 26 赞同 · 15 订阅
然而没想到的是Cesium团队不讲武德。做了个假动作之后,竟然抛弃了KHR_gaussian_splatting,搞了一个新的KHR_spz_gaussian_splats_compression并且迅速合进了正式版当中。执行力不可谓不强,直接让我们GISBox团队之前的全部努力付诸东流。
整理整理心情,兼容还是要兼容的。还是来看看这个KHR_spz_gaussian_splats_compression是一个什么样的扩展,我们先来看看github上的讨论:
https://github.com/KhronosGroup/glTF/pull/2490github.com/KhronosGroup/glTF/pull/2490
摘录一段内容:This extension proposal,KHR_spz_gaussian_splats_compression
, allows for efficient storage of 3D Gaussian splats data within glTF using the SPZ compression library from Niantic Spatial,似乎也没啥特别的,无非就是引入了一个spz的压缩,那么我们兼容一下这个spz压缩就行了。
那我们看下spz这个格式。spz是由Niantic Spatial提出来的一个开源的压缩格式,号称是高斯的JPG格式,我们看下官方给出的压缩比:
可以看到其实也没什么特别高深的东西,无非就是计算机图形学中经典的压缩方案,把浮点数压缩进整型,通过损失一定程度的精度换来存储效率的大幅提升。原理弄懂了就简单了,直接复写一下C++代码就好了,具体代码仓库如下:
https://github.com/nianticlabs/spzgithub.com/nianticlabs/spz
整合好之后,不得不说,这次的效果比上一版好了很多,而且由于CesiumJS正式版中已经包含了相关功能,我们也可以很方便的整合进GISBox预览当中了。我们可以直接先看下CesiumJS的sandcastle中加载的高斯文件的效果:
这个功能已经上线了,欢迎大家前往官网下载最新版GISBox试一试:
GISBox(GIS工具箱)-免费的倾斜摄影OSGB/3D Tiles编辑转换发布平台
这一次我们也贴心的为大家准备了示例文件让大家尝试一下这个GISBox新的切片功能,大家如果有需要,可以加我们GISBox官网的客服,我们会逐一发给大家。这个文件是我们山海鲸联合商汤科技一起制作的,也非常感谢我们的合作伙伴的大力支持。该模型仅供大家个人测试,请勿用作商业用途。