为3D GIS而生:《空间三维模型数据格式》标准(S3M)

发布时间:2019 年 11 月 06 日  文/三维研发中心 冯振华
导读:S3M是伴随着国内三维GIS的需求一步一步设计出来的,我们开放出S3M格式,期望为三维GIS的发展与创新贡献一份力量。

  上一篇文章《空间三维模型数据格式》(S3M)进行了多方面的解读,包括该标准为何提出、经历了怎样的过程、对空间三维模型数据格式做了哪些规范、以及S3M格式具备哪些技术特点和优势等,但相信有不少GISer对该标准还是有着比较浓厚的兴趣。因此本文将详细介绍S3M研发背后的故事。

  缘起KML

  最近有本书很火,那就是《谷歌方法》,该书在第六章用“罗尔夫的KML”作为章节标题,把KML格式设计背后的技术专家罗尔夫推给了读者。十几年前,最开始做三维GIS平台软件的这拨人,都对KML有着一种特殊的喜爱。有时候客户会问“二维GIS有WMS等OGC标准,那三维GIS有OGC标准吗?”我通常会推荐KML。

  KML(Keyhole Markup Language,Keyhole标记语言)最初是由Google旗下的Keyhole公司开发和维护的一种基于XML的标记语言,利用XML语法格式描述点、线、面、图片和模型等地理空间数据。2008年4月,KML的最新版本2.2版被OGC(Open Geospatial Consortium,开放式地理空间协会)宣布为开放地理信息编码标准,并改由OGC维护与发展。

  虽然KML是适用于网络环境下的地理信息协作与共享的三维数据标准,但它无法承载大规模的三维数据。

  S3M的前身:SuperMap扩展的OSGB格式

  2014年,倾斜摄影自动化建模技术开始在国内掀起一股热潮。市面上Smar t3D (后改名为ContextCapture)、街景工厂等倾斜摄影建模软件,统一采用OSGB格式作为倾斜摄影数据的格式。SuperMap软件也在2014年最先支持了OSGB格式的倾斜摄影数据,并设计了一个扩展名为.scp的配置文件。

  该配置文件包含了坐标系的信息,以支持倾斜摄影模型数据和GIS数据在三维场景中的坐标匹配。

  OSGB作为一种开放的数据格式,其开放性在一定程度上推动了三维空间数据格式的标准化进程,并基于此,逐步形成了倾斜摄影建模上中下游完整的产业链:首先,无人机采集数据,再通过倾斜摄影建模软件生成OSGB格式的倾斜摄影模型数据;然后,OSGB格式的倾斜摄影模型数据可以通过SuperMap等GIS平台软件加载、显示、分析、管理以及发布服务;最后,GIS应用厂商可以基于SuperMap等GIS平台构建国土、规划、智慧城市等应用。

  我是在2013年开始接触倾斜摄影模型数据。最初,超图智慧城市事业部的同事拷备了一份倾斜摄影模型数据给我。数据是一堆OSGB小文件,每个文件打开对应了一个3D瓦片(几个模型构成的连片数据)。我们解析OSGB文件后,发现3D瓦片之间有LOD层级关系,该LOD层级关系是通过PagedLOD组织的。以上所述的组织方式,决定了OSGB格式可以支持大规模倾斜摄影建模数据。但由于每个3D瓦片是几个模型构成的连片数据,所以它不支持对象化与单体化。

  OSGB格式给了我们设计三维模型数据格式的两点启发:

  1、通过3D瓦片将三维模型组织到一起,以方便在渲染时批次绘制,减少往显卡传输数据的次数,充分利用好带宽;

  2、通过树状结构组织不同细节层次的3D瓦片文件,以降低几何复杂度。倾斜摄影建模数据是全要素表达的切片数据,不会把建筑、地面、树木等地物区分出来,构建出来的是一个连续的三角网切片,无法对单个建筑进行操作,需要进行一定的处理才能实现“单体化”。

  2015年我们设计并提出了3种单体化方法:虚拟动态单体化、ID单体化、切割单体化。S3M设计中更多使用的方法是ID单体化,所以这里只重点介绍下ID单体化,ID单体化是三角面片中的每个顶点都对应存储一个32位的唯一标识(ID),这样在渲染时,借助顶点着色器可以高效选中与高亮,批量改变对象颜色,以及批量改变对象的可见性。提到“批量改变对象颜色,以及批量改变对象的可见性”,我们联想到BIM的使用场景:按照施工进度批量控制BIM构件的显隐。我们将三维模型数据格式,扩展到了对BIM模型等多源数据的支持。某次在上海和某BIM客户交流时,他们的技术工程师问我:“SuperMap的3D瓦片,既可以将N个BIM构件组合成一个批次,批量交给显卡渲染;又可以单独选中某个BIM构件。这是怎么做到的?”其实这里的原理就在于采用了ID单体化。

  基于此,我们得出三维模型数据格式设计的第3条原则:

  3、每个顶点对应存储一个ID ,既支持多个模型组合成一个批次,又支持借助GPU实现高效对象化查询。

  仅仅依赖ID单体化的设计,三维模型数据格式就可以很好支持BIM模型数据了吗?并不是。要实现支持BIM模型,还需要实例化技术。

  BIM模型通常会有大量重复的对象,比如:门、窗等,这些对象共用一份顶点、材质,只是位置、大小和旋转角度等不同。如果所有的对象都存储完整的信息,那么数据膨胀会非常厉害(甚至上百倍),内存占用就会有非常大的浪费。因此实例化方式存储和渲染,非常适用于BIM数据,既降低了内存占用,又提升了渲染性能。

  基于此我们得出三维模型数据格式设计的第4条原则:

  4、通过实例化的方式存储,解决BIM模型对象被多次重复引用的问题。

  时间再往回倒。大约是2012年,我们与Khronos Group有过一次交流。提到Khronos Group这个组织,我们通常会想起OpenGL。当时,该组织正在定义一种适合于网络传输、高效绘制的三维模型格式标准,这个标准的名称是glTF,这次交流的目的是“超图是否有意愿一起参与制定glTF标准”。然而这个提议没有引起我的兴趣,毕竟当时glTF还不为大家所知晓。但是他们的设计思路,却引起了我极大的兴趣,也给了我很大的启发。他们设计glTF格式的思路是:数据组织对应OpenGL的渲染API,使得渲染时尽量减少数据准备环节,可以支持快速填显卡。

  这次交流,启发我们得出了设计三维模型格式的另外两条设计原则:

  5、3D瓦片的数据组织对应OpenGL的API ,以支持快速填显卡;

  6、OpenGL的API支持点、线、三角网等对象的绘制,对应的是,数据格式也可支持点、线、三角网等多种类型的数据。于是,我们的三维模型数据格式在理论上支持点、线、三角网等多种类型的数据,随后,我们基于OSGB切片格式,扩展支持了密集点云数据、点、线、面等数据类型。

  综上所述,我们最终在OSGB切片格式上扩展支持了:1、通过.scp配置文件,支持不同的坐标系统;2、每个顶点对应存储一个ID,支持对象化;3、支持实例化的方式存储;4、支持3ds Max模型、BIM模型、点云、点、线、面等多源数据。Spatial 3D Model(S3M)2014年初,我们与Smart3D(后改名为ContextCapture)进行了第一次交流。他们非常欣喜于SuperMap GIS能直接读取OSGB格式的倾斜摄影模型数据,并提出在产品文档中帮忙宣传SuperMap GIS,SuperMap GIS成为了Smar t3D帮助文档唯一提到的一家中国GIS平台厂商。另外,他们提出了一个需求:因为他们的数据要上传到亚马逊云,所以期望SuperMap GIS能做一款基于WebGL的无插件客户端,可以在线访问倾斜摄影数据。那么技术问题来了,WebGL客户端是很难直接支持OSGB格式的,我们需要设计一种新的模型格式。

  2015年底,我去成都参加三维成都研发团队的年终述职,成都团队花费了一年多的时间,终于实现在WebGL客户端加载倾斜摄影模型数据。这期间我接到一个用户的电话:“我们期望在WebGL客户端支持BIM数据,将BIM叠加到倾斜摄影模型上。”我的答复是:“可能明年年底能实现。”我是基于“支持倾斜摄影模型的研发花费了1年时间”,推导得出“支持BIM数据也要花费1年时间”。显然,用户很难满意这个答复。而实际的项目中,还需要支持3ds Max模型、BIM模型、点云、点/线/面等数据,这就需要更多时间才能实现,而且这种实现方式很低效。

  于是,我给研发团队提出了一个想法:设计一种新的三维数据模型格式,将多源异构的数据都统一到这种格式下,实现支持各类数据。基于这个设计,我们只用了2-3个月的时间,就在WebGL客户端支持了各类三维数据。这就是最初设计S3M格式的发端。

  S3M的命名,最初是参考了诺基亚地图(Here地图)的三维切片格式n3m—Nokia 3D Model的命名方式,我们的研发工程师将其命名为了SuperMap 3D Model(S3M)。N年之后,我们在和CC的一次交流时,了解到ContextCapture在推一种新的三维格式3SM,S3M和3SM好像“撞衫”了。

        大约是2016年3月,Cesium推出三维数据规范——3D Tiles的测试版本,并在github上公开了这个格式的细节。我们也在2016年初,接触到了3D Tiles,也将S3M和3D Tiles做了对比,发现两者在设计上确实有很多相似之处。但是,正如前面所述,S3M是伴随着国内三维GIS的需求一步一步设计出来的,和3D Tiles之间还是存在很多差异,比如:3D Tiles针对不同数据类型定义了不同的文件类型(如模型数据、点云数据,使用不同文件类型),而S3M通过一种文件类型支持各类数据;S3M是通过在每个顶点对应存储一个ID,实现3D瓦片的对象化;S3M的属性切片文件,有单独的s3md文件存储,只有根节点有,没有冗余;3D-Tiles模型的切片采用glTF格式,而S3M的几何切片文件是s3mb文件……

  2017年,我们决定在github上开源出S3M的细节,同时将S3M的定义由SuperMap 3D Model(S3M)变更为 Spatial 3D Model(S3M),期望S3M格式成为一种开放的三维空间数据格式,从而推动三维地理空间数据的开放、共享,为三维GIS的发展贡献一份力量。

  团体标准:《空间三维模型数据格式》(S3M)

  2018年6月,超图联合自然资源部信息中心、国家基础地理信息中心等11家单位,向标准管理委员会申请立项并获批复,开始起草制定《空间三维模型数据格式》(S3M)。团体标准的申请经历了:提案、立项、起草、征求意见和审查等。2019年7月19日,中国地理信息产业协会审查批准,《空间三维模型数据格式》(S3M)团体标准发布,于8月31日正式实施,并由中国标准出版社正式出版发行。

  《空间三维模型数据格式》(S3M)团体标准规定了三维地理空间数据格式的逻辑结构及存储格式要求。该标准适用于网络环境和离线环境下海量、多源三维地理空间数据的数据传输、交换和高性能可视化,以及满足不同终端(移动设备、浏览器、桌面电脑)上的三维地理信息系统相关应用。该标准定义的S3M数据格式具备以下技术特点和优势:

  1、支持表达多源地理空间数据:倾斜摄影模型、BIM、人工建模、激光点云、矢量、地下管线等多源数据。

  2、具备海量数据高效绘制的能力:支持LOD、批次绘制、实例化等,提升渲染性能。

  3、具备单体化选择和查询能力:支持高效选择、支持批量修改对象颜色、批量修改对象可见性。

  4、简洁易读:格式简洁,易解析,适用于WebGL等轻量级客户端。

  5、高效传输:数据紧凑,以二进制形式保存,占用空间小,传输性能高。

  6、快速载入显卡:数据结构尽可能跟OpenGL接口保持一致,减少加载时间,高性能,低消耗。

  7、跨终端:独立于任何终端,适用于PC端、Web端、移动端,具有较好的兼容性。

  8、扩展性好:支持扩展,允许增加一些多用途扩展或特定厂商的扩展。

  9、完善的工具支撑:提供开源免费的S3M数据解析和转换工具,支持3D-Tiles、OSGB等格式与S3M格式相互转换。(开源地址:https://github.com/Super Map/s3m-spec。)

  10、完善的配套设施:完整的解决方案,成熟的可行性,强大的实用性。基于S3M形成了完整的B/S及C/S架构的三维GIS应用解决方案,从数据生成、服务器端发布到多种客户端加载应用等多个环节解决用户实际问题。

  目前,深圳珠科Altizure、东方道迩pixe3D Builder Engine(P3BJet)、大势智慧重建大师(GET3D)、瞰景科技集团Smart3D 2019、大疆智图等倾斜摄影建模软件已完成与该标准格式的对接,并且S3M还正在与国内外多个倾斜摄影建模软件、BIM软件及前端的三维渲染引擎开展对接工作。

  当《空间三维模型数据格式》(S3M)团体标准正式发布前夕,我收到了一个意外的惊喜:Skyline在gi thub上公开了3DML格式……

  结语

  这篇文章介绍了S3M研发背后的故事,这些故事贯穿了我在超图做三维GIS平台研发的十几年。从这些故事,我们可以从一个小侧面了解到,中国三维GIS应用需求的不断创新与进步,推动着像超图这样国产三维GIS平台软件的设计、发展与创新。国产三维GIS平台软件从十几年前跟着国外软件的脚步,到逐步跟着市场应用需求去设计与创新,可以这么说,正是有国内三维GIS市场应用需求,才培育出了像超图这样的国产三维GIS平台软件。正如这篇文章的名字《为3D GIS而生:<空间三维模型数据格式>标准(S3M)》,S3M也是伴随着国内三维GIS的需求一步一步设计出来的,我们开放出S3M格式,期望为三维GIS的发展与创新贡献一份力量。

版权所有© 1997-2019 中国科学院地理信息产业发展中心 《超图通讯》编辑部