• [转]超图的倾斜摄影优化方案:《空间三维模型数据格式》标准(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的发展与创新贡献一份力量。

    数据制作格式规范:

    相关规范如下:

      · 涵盖的数据类型

      该标准涵盖的数据类型包括但不限于:

      1、传统模型数据:城市级的人工建模三维模型数据;

      2、实景三维数据:包括大规模的倾斜摄影建模数据和点云数据;

      3、建筑信息模型(Building Information Modeling,BIM)数据:采用BIM设计软件制作的三维模型数据;

      4、矢量数据:包括二维点/线/面数据、三维点/线/面数据、城市三维管线数据。

      · 数据组织结构

      该标准规定了空间三维模型数据格式具体内容的组织方式,包括:

      1、树形结构:规定树形结构可以灵活地采用具有空间关系的空间数据结构,例如四叉树、八叉树、K-D树、R树等;

      2、细节层次(Level of Detail,LOD):规定采用包含LOD的树形结构对数据进行组织和管理,自上而下由粗糙层逐步过渡到精细层;

      3、实例化:规定采用实例化实现相同模型的反复渲染,支持实例化模型的表达;

      4、单体化:规定通过预留字段存储对象ID实现对象化/单体化表达,实现对建筑等地物进行单独的选中、赋予属性、查询属性、专题化表达、空间查询等操作,而且可以在GPU内实现该操作。

      · 文件存储格式

      该标准规定了空间三维模型数据的存储格式规范,采用json和二进制格式存储描述文件、数据文件、索引文件和属性文件。二进制数据尽量按照OpenGL的数据渲染格式进行组织,以提升可视化性能。

      该标准涵盖的所有类型的数据均采用S3MB(Spatial 3DModel Binary)格式,避免复杂多样的文件格式难以满足实际应用时在效率、功能等方面的需求。

    具体优化方案:

    大势智慧积极对接《空间三维模型数据格式》团体标准,将Spatial 3D Model(S3M)这一三维数据格式统一集成至自主研发的实景三维全自动重建软件GET3D(重建大师)中,以及针对倾斜三维模型出现的结构破损、变形,纹理拉伸、缺失、色彩不均等问题的模型后处理软件模方中,具体如图1、图2所示。

      同时,针对S3M,我们在使用过程中,与市面上最为常见的OSGB格式三维模型成果进行的初步的对比,得出以下结论。

      数据与结构分离,调度更快速

      S3M格式采用了数据文件和描述索引文件分离的数据结构,包括:数据文件(.s3mb)描述了一个空间范围内的三维瓦片数据;索引文件(.json)是对瓦片数据的树形结构的描述(.s3mb文件中也同步存储了该描述信息);描述文件(.scp)描述整个场景所有瓦片数据的基本信息。这种数据结构可以在不加载实际数据的情况下,获取每层的每个瓦片文件的包围盒、LOD的切换信息、挂接的子节点文件等,加速瓦片文件检索的效率,从而使加载渲染更流畅,如图3所示。而OSGB格式则把数据信息和结构信息组织在一个文件中,在仅需要结构信息时候,就需要加载整个文件,降低了加载效率。经测试,以数据信息和结构信息分离的数据组织形式使得加载渲染效率提高二至三倍。

      多源海量数据支持

      Spatial 3D Model(S3M)支持表达多源地理空间数据,例如常见的倾斜摄影模型、BIM、人工建模、激光点云等。同时,其支持具备海量数据高效绘制的能力,支持LOD、批次绘制等,提升渲染性能。城市级海量数据场景往往会出现数以万计的瓦片单元,常规以瓦片为单元进行遍历加载的模式难以实现快速场景显示。以上问题,通常解决方法是进行“根节点”合并,减少同时加载的瓦片数量,但整体三角网、纹理数据并没有改变。由于网格模型在的根节点数据,分辨率低,扭曲大,以网格形式表达的场景在效果并不理想,还会大大降低浏览体验。

      因此,目前有方法直接利用根节点合并出彩色点云结果,代替网格节点。经测试,与根节点合并后的网格数据进行加载相比,Spatial 3D Model(S3M)能使加载渲染效率提高5倍以上,浏览体验接近实时。大势智慧将紧跟时代要求,在三维空间数据的开放、共享与应用上,保持敏锐的洞察力和市场感应力,将具有完全自主知识产权的GET3D重建大师、模方等软件获得的三维空间数据,与《空间三维模型数据格式》团体标准进行更深层次的对接,为推进中国三维地理空间数据共享及深入应用发挥更大的积极作用。

  • 相关阅读:
    toString
    React系列,jsx
    React系列,初识
    如何在数据库中存储一棵树
    Linux-gate.so技术细节
    主引导记录MBR/硬盘分区表DPT/主分区、扩展分区和逻辑分区/电脑启动过程
    8259A工作原理描述
    汇编指令大全
    汇编条件判断整理(JCC,CMP/TEST的实现)
    【汇编】字符串处理指令 stosb、lodsb、movsw、scasb、rep
  • 原文地址:https://www.cnblogs.com/lyggqm/p/16455668.html
Copyright © 2020-2023  润新知