谷歌地球倾斜摄影数据3DTiles转换工具终于更新了上一次谷歌地球倾斜摄影数据3DTiles转换软件更新还是2024年1月6日(谷歌全球倾斜摄影数据转3DTiles工具V1.1更新,同步更新生成台湾、香港等数据!),在V1.1版本中,优化了数据结构组织,并提高了显示效果。时隔一年,转换工具迎来了再次更新,大家可能会觉得比较奇怪,为啥版本间隔了一年才更新,是遇到技术问题还是有其他原因?下面向大家详细说明。
一、更新背景
1.3dTiles数据无法转成其他格式。
熟悉三维倾斜摄影数据处理的读者都知道,OSGB能转成3DTiles/obj/fbx等各类成果数据,但是3DTiles却很难转成OSGB/obj/fbx数据,近乎不可逆,这就导致了即使3DTiles数据生产做的很完善,想要生产其他格式数据还需要重新再开发一个转换工具,工作量极大。
2.为了解决OSGB数据和其他数据格式使用需求,考虑优先生成OSGB数据。
所以去年一年的主要工作都是围绕OSGB版本在更新,从1月到11月,谷歌倾斜摄影转换工具从V0.1升级到V2.1,共更新7个版本,已经具备大规模数据生产能力.这7个版本解决了OSGB生成、数据偏移、生产效率、显示效率、按指定范围精确裁剪等各种重大问题,软件产品趋向成熟,技术路线清晰,这为3DTiles转换更新打下了良好技术基础。
二、技术路线
基于以上两个原因,在今年1月份的时候,停止了3DTiles转换软件的更新,转向研发OSGB转换软件。熟悉我的公众号的读者可能会有一个问题:既然你已经把OSGB转换软件做的很完善了,那直接用OSGB转成3DTiles格式不就行了,还煞费苦心更新3DTiles转换工具?针对这个问题,我先解释生成谷歌倾斜摄影生成3DTiles数据的三种技术路线,如下图所示:
1.橙色路线。这条路线大家都都比较熟悉,借助工具生成模型,再切成3DTiles数据。具体做法是:在谷歌地球Web端网站上借助RenderDoc生成帧缓存rdc文件,再通过Blender软件导入rdc数据,再导出生成obj格式文件;最后使用3DTilesConverter等工具将obj文件切成生成3DTiles格式。这个方法解决了有无问题,但是存在几大致命问题:
- 单次生产范围小,生产大范围数据需要人工一块一块截取模型,然后再拼接,很可惜的是,目前没有好用拼接工具,有裂缝,重复,无法达到谷歌地球官网上严丝合缝的拼接效果。比如单个范围能截取1平方公里范围,想生产台北市235平方公里的数据,至少需要截取235次,对人工操作要求极高,费时费力,效果也不佳。
- 丢失了LOD信息,生成的obj文件没有LOD信息,Obj生成3DTiles时需要建立LOD层次细节,会对Mesh进行抽稀等操作,目前绝大部分软件处理的并不好,导致数据再建立LOD时,生成的数据显示有大大小小的裂缝。
- 最严重的是丢失了空间信息。导出生成obj时就丢失了空间信息,只是一个单纯的三维模型文件,而3DTiles是有坐标系的,对于obj文件来说,使用工具生成3DTiles数据叠加在影像底图上,无法精准匹配,偏差较大。
2.红色路线。通过将谷歌地球原始数据转成OSGB格式,再使用OSGBLab转成3DTiles格式,这个方法我也验证过,经过对比,生成的3DTiles数据,能够达到能用的状态,显示效率方面尚可,但是与第三条路线相比,还有差距。
3.绿色路线。主要考虑了前两条技术路线的优缺点后,最终决定基于3DTiles转换工具,进行版本升级,这就是这次版本升级的由来。
三、版本更新
下面说一说本次版本特点:
1.根据范围进行精确裁剪
之前向大家免费分享的3DTiles数据中,分享的数据中既有倾斜摄影数据,又有影像地形数据,每一层的覆盖面积都不一样大,主要存在以下问题:
- 影响数据浏览体验,因为数据浏览逐级放大时,影像部分逐渐减小,越放大非倾斜摄影部分就消失了,与倾斜摄影和普通卫星影像的浏览体验大不一样,显示效果不佳。
- 用户在加载倾斜摄影数据前一般提前先加载好底图,有些底图是矢量瓦片或者栅格矢量瓦片,如果非倾斜摄影区域覆盖太大,这样会遮盖底图,导致矢量瓦片上的信息就无法展示出来,影响了用户对底图信息的获取。
- 最重要的一点,谷歌地球倾斜摄影数据没有水印,而影像部分有google的水印,大部分用户在意这点,虽然可以通过图像处理算法去掉水印,但是如果能直接裁剪的话,是不是从根本上解决问题了呢。
技术路线和OSGB转换工具一致,实现了瓦片内裁剪,保证了每个层级的范围一致,浏览体验效果更佳。3DTiles数据使用代码比较简单,首先创建Cesium3DTileset对象,再添加到primitives即可,具体如下:
let tileset = await Cesium.Cesium3DTileset.fromUrl("http://localhost:8802/tileset.json");viewer.scene.primitives.add(tileset);viewer.scene.globe.depthTestAgainstTerrain = false;
2.优化数据结构组织
之前导出的是b3dm文件,本次更新优化了b3dm文件组织结构,去掉无关属性信息,改为导出glb文件,在数据加载速度上更具优势;同时减少了json配置文件数量,为将来对象存储服务化做准备。
四、样例数据领取
我给大家生产了一份样例数据,也就是上面视频录屏采用的测试数据,领取方式还是老方法,大家关注公众号"按图索迹",在公众号中回复红色关键字“台北市政府3DTilesV2.0”即可获取网盘链接;由于还处于开发版,数据在显示方面尚遗留些许问题待解决,待优化完成后会分享效果更好的数据,敬请期待!