倾斜摄影三维模型实体提取和动态表达的技术研究
2020-11-11朱周华吕志慧于建强
朱周华,吕志慧,于建强
(江苏省测绘研究所,江苏南京 210013)
0 引言
倾斜摄影技术是国际地理信息领域近年来发展起来的,它融合传统航空摄影技术和数字地面采集等技术,克服了传统航摄技术只能从垂直角度拍摄的局限,通过在同一飞行平台上搭载多台传感器,同时从1 个垂直角度和4 个倾斜角度采集影像,更加真实地反映地物的实际情况,弥补了正射影像的不足,还能基于影像进行各种测量。倾斜摄影成果已广泛应用在城市管理、自然资源管理等领域。本文针对倾斜摄影成果的数据特点,分析相关实体提取的流程方法,研究基于三维场景的实体动态表达和空间分析的技术方法[1]。
1 倾斜摄影三维模型发展现状
基于倾斜摄影的三维模型重建是目前摄影测量与遥感、计算机视觉、图形图像学等交叉领域的研究热点,通过多视影像密集匹配生成点云,然后基于高密度点云数据构建不规则三角网模型,最后进行纹理映射,实现道路、建筑物、植被等三维地表形态重建。目前,基于倾斜摄影的高精度大场景快速建模技术在工程应用已相对成熟。在数据采集方面,利用工业级甚至消费级无人机便可快速批量获取多种空间尺度的倾斜摄影原始影像数据。在数据处理方面,以CC为代表的倾斜摄影建模软件提供了完整的数据建模作业体系,可自动实现较高精度的地理场景建模工作[2]。这些已成为获取三维地理信息数据的重要手段,其真实、高效地对地面人工建筑和自然地表同时获取与表达的特点,更能准确直观地表达出复杂山地环境下的立体地表空间。
2 存在的主要问题
倾斜模型是连续不规则三角网并贴图的成果,模型上各地理要素构成一体,无法对各地理对象单独管理,类似于影像地图“一张皮”,只能作为底图提供基本的可视化与量测功能,缺少对象信息查询分析等功能。因此,数据能够被管理,必须具备可分割、可查询等能力。
2.1 单体化
一般认为,基于倾斜模型实现结构化分割是实体三维实现的必要条件之一。目前,主流的结构化分割方法一般以矢量线划数据作为基础资料,辅助实体构建工作,主要包括ID单体化、切割单体化和动态单体化等多种单体化方法,这些方法都能达到最基本的使用要求,都可以将模型绑定要素属性信息以至于能够查询地理要素属性信息,但是它们在后期使用各有优劣。ID 单体化不是本质上的单体化,各地物要素模型还是在一张三角网上,并没有对模型进行分割,ID单体化不支持动态渲染环境,对模型后期管理和应用不方便。切割单体化对模型进行分割,可以对单个单体化模型进行管理和操作,是严格意义上的单体化,但切割单体化会破坏原有倾斜摄影模型的LOD(多层次细节模型)结构,并且倾斜摄影模型全要素的切割对成本提出来一定要求,而且各行业对地理要素分类标准不统一,影响数据后期的共享使用,且切割后的模型周围具有锯齿边缘,影响美观。动态单体化与ID 单体化一样,并没有实现对连续三角面的实际分割,不是彻底的对象物单体化,对后期的管理应用稍显欠缺[3]。
2.2 持久化存储
倾斜摄影测量的数据成果从本质上看就是mesh模型(空间网格面模型),它是点云构成的。基于几何校正、联合平差等处理流程,利用倾斜摄影测量内业处理软件可计算出倾斜影像的超高密度点云,对点云进行简化,然后构建TIN(不规则三角网),最后经过纹理映射构建出真实三维模型。
为了实现3D 场景和模型的高效、可交互操作传输,需要将倾斜模型数据转换成面向实时渲染应用的数据格式,目前主流主要有glTF(图形语言交换格式)。glTF是一种3D内容的格式标准,可以直接传输给WebGL(Web graphics library)的绘制命令的数据形式,不再需要二次转换,数据格式基于JSON,具有更好的Web 友好性。在数据转换过程中,当原始数据的LOD 发生变化,将重新构建LOD。新构建的LOD,无论是效果还是性能,都远逊于原始LOD,导致性能不佳[4]。鉴于上述两种情况,3D Tiles 数据格式应运而生,3D Tiles 是在 glTF 的基础上,加入了 LOD 的信息,专门为大数据量地理3D 数据流式传输和海量渲染而设计的一种格式,将三维数据以分块、分层的形式组织起来,可以大量减轻浏览器和GPU的负担,用流式传输海量三维数据,平衡不同三维场景范围的表达性能和视觉质量。
目前,倾斜模型数据主要是以文件集的形式进行存储,大型场景存在小文件多、拷贝和管理要求高等特点,如果直接使用或调用,易产生磁盘读写的性能瓶颈,同时数据的安全和权限也需要保障,因此需要对数据持久化存储进行相关研究,提高倾斜模型数据的存储和访问效率。
2.3 动态表达
三维模型中每个顶点包含顶点坐标、法向量、颜色、纹理坐标等属性信息。在WebGL中,根据顶点及其相关的信息进行可视化,由顶点属性组成的数据流首先从Web 应用程序输入,依次经过顶点着色器、片段着色器的处理,最后到达图形绘制帧缓存,然后在视图中显示。对于WebGL 来说,三维数据可视化的重点是要将顶点信息以及由顶点构成的面信息显示出来,确定了顶点和面,再根据计算机图形学的相关知识,就能结合模型视图矩阵和投影矩阵,实现三维绘图。但要得到一个真实感的3D 场景,仅仅绘制某些位置的对象是不够的,还需要考虑到灯光的效果,即着色,着色过程分为顶点着色器和片段着色器。基于GPU 并行化多通道渲染技术,通过对图形数据进行解析、组织、图元装配后,进入一条效果渲染通道,输出帧缓存结果,输出结果进行下一渲染通道,执行多通道渲染着色。一条渲染效果包括多个自定义顶点着色器、片段着色器的组合。在Effect(效果)中组织多个自定义Shader(着色通道),形成图形数据发光、渐变、浮雕、阴影效果,进而实现实体的动态表达。
针对动态单体化,通过矢量数据与倾斜模型的结合,利用WebGL 技术,将矢量图形套叠到倾斜模型上,动态渲染矢量图形,实现对应的倾斜模型动态单体化。再挂接矢量数据的属性信息,实现属性查询和管理。采用动态单体化方式,无需对倾斜模型进行修改,仅需相关矢量信息,采用此种方式实现单体化,由于缺乏矢量数据的动态调度机制,矢量数据都是一次性读取加载,大场景批量数据的加载功能和渲染效率有待进一步提高。由于单体模型没有被物理切割,因此无法实现特定区域的三维信息统计分析功能,如无法实现选定区域内的最高建筑物、平均楼高等。
为拓展倾斜模型的应用范围,需要对倾斜摄影成果进行实体提取和动态表达等方面进行研究。
3 实体提取和动态表达的处理方法
3.1 主要技术路线
针对倾斜模型成果单体化和表达的技术瓶颈,采用三维模型自动化编辑技术和在线可视化技术,实现倾斜模型的单体对象化管理和持久化存储,基于三维场景的实体动态表达和空间分析等功能,主要技术路线如图1所示。
(1)数据预处理:收集整理若干典型区域的倾斜模型数据、矢量线划数据等,对数据的组织结构、坐标投影、拓扑关系等进行整理加工。
(2)实体模型提取:基于倾斜航空摄影测量技术、三维空间拓扑技术,利用倾斜模型数据和矢量线划数据,进行倾斜模型数据的物理分割,实现实体对象的三维模型自动提取、纹理重映射等技术方法,输出开放格式的模型文件。
(3)实体模型属性提取和持久化存储:利用三维模型凹凸包拟合技术,对实体模型进行综合检查处理,实现模型的表面积、体积、高度等几何属性的提取和计算。利用开源数据库存储三维场景和模型,并进行数据和接口封装,发布RESTful服务。
(4)实体动态表达:综合大型场景LOD 优化技术、矢量切片调度技术、WebGL的二三维叠加渲染技术等,基于服务接口,开展实体动态表达研究,实现实体模型的在线可视化、信息查询、统计输出等功能。
3.2 具体实现方法
3.2.1 数据预处理
收集相关区域的矢量线划数据、倾斜模型数据等,首先对数据进行处理,处理步骤分为:矢量线划数据处理、倾斜模型处理、矢量切片处理等。
图1 技术路线
(1)矢量线划数据处理:收集整理相关数据,通过统一数据格式,统一坐标体系,对属性字段进行规范化处理,形成标准、通用的矢量图形文件,接着对图层中的图形进行拓扑检查,检查图元的重叠、重复、压盖、相交、自相交等拓扑问题,进行图形的拓扑修正,最后读取矢量图元的图形、属性等信息,输出JSON文件,文件内包含WKT格式的图形信息。
(2)倾斜模型数据处理:对倾斜模型成果的整个细节层次树进行解析和转换,按照地物模型的多细节层次组织规则和3DTiles 规范构造三维模型瓦片集。针对原始瓦片集顶层细节层次模型,使用纹理烘焙技术进行纹理压缩,形成新的顶层模型,迭代生成更粗的细节层次模型,直至最终顶层模型数据量小于阈值,得到简略细节层次模型树,接着将计算得到的简略细节层次模型树和精细细节层次模型进行合并,最终得到3DTiles格式的模型瓦片集。
(3)矢量切片处理:在GeoServer中使用GeoJSON-vt扩展库设置GeoJSON的矢量切片方案,实现矢量数据GeoJSON 格式的切片服务,通过OGC 标准的wms服务访问获取数据。
3.2.2 实体模型提取
综合利用倾斜模型技术、三维空间物理分割技术,研究可适应多细节层次倾斜模型的实体提取流程,实现实体模型的自动化物理分割和对大型倾斜场景文件的实体模型自动提取,研究倾斜模型数据的R叉树文件的快速识别,倾斜模型与矢量图元的图形映射关系建立,基于空间相交算法的布尔裁切,实体三维模型的纹理重映射烘焙等。
(1)OSGB和矢量图元建立映射关系。
读取倾斜模型的最低层级数据格式文件,并转换成obj 模型文件。获取数据文件相对空间坐标信息,构建数据文件空间坐标格网,然后读取矢量图元的空间坐标和空间范围。通过二维空间相交判断,获取与矢量图元空间范围相交的数据最低层次模型的集合,接着对集合内的每一个数据最低层次模型,遍历其模型的金字塔(LOD)层级文件,生成不规则R 树,树中的每一个节点都是数据模型自身关联的子节点数据模型信息,遍历R 树,进行矢量图元图形范围与R 树中当前遍历节点的空间范围相交分析处理,通过不断迭代最终获取到与矢量图元相交的全部数据叶子节点文件,获取与数据叶子节点对应的obj 模型文件集合,形成相关的映射关系。
(2)模型合并和布尔裁切。
读取映射关系文件,基于blender 的空间缝合方法,对读取的obj模型文件集合进行合并,将三角网合并融合,生成一个独立的obj模型文件,接着对矢量图元的图形进行适当的缓冲计算,并拉伸成三维柱体,最后通过Difference裁切方法处理,完成布尔裁切。
(3)模型纹理烘焙。
重建UV,重新建立模型几何与纹理之间的映射,构建新的纹理贴图,然后重新计算现有模型顶点的纹理坐标,保证其可以在新的纹理上分布均匀,接着从原有的UV 和原有的纹理图片中读取像素色彩信息,并依照现有模型的纹理坐标写到新的纹理贴图中去,生成完整的纹理图片文件,最后关联新的纹理图片到现有的模型的材质,输出新的模型文件。
3.2.3 实体模型属性提取和持久化存储
在实体的基础上,研究实体的几何属性提取方法,实现对所有实体高度、表面积、体积等几何属性的计算。优化模型空洞的自动提取与修补方法,提高实体模型表面积计算和体积计算的准确性、利用开源数据库进行高效存储。
(1)实体模型属性提取。
采用基于面法线的方法计算单个四面体的网格体积,依据三角形的顶点或四面体元素的顺序,依次计算体积,进行体积累加迭代,形成综合的体积信息。
(2)持久化存储。
数据持久化存储主要包括倾斜模型入库存储和实体模型入库存储两部分。
倾斜模型数据的主要内容以树形结构存储的细节层次模型以及相关索引文件,要求存储数据库需具备非关系型文件数据存储能力和高效读取等性能,可使用MongoDB 数据库作为倾斜模型数据的存储数据库。利用MongoDB 的GridFS 存储和检索3D Tiles 数据集中各类数据,并根据服务接口的调用方法修改相应的Json文件信息,保证三维场景引擎从读取文件数据到读取数据库信息的无缝切换,从而兼顾访问效率和数据安全。提取的实体模型有三维图形的obj 文件、纹理文件等,这些信息互相关联,也需要利用MongoDB 的GridFS存储和检索,通过建立key值建立实体的对应关系,支持实体的批量输出[5-6]。
实体模型的三维空间信息除可满足数据可视化需求外,还可为三维空间查询分析提供数据支持,要求数据库具备完整的三维空间索引存储和查询能力,因此可使用关系型数据库PostgreSQL(含空间扩展模块)作为模型实体库,以POLYHEDRALSURFACE 为图形存储类型,将实体模型的三角网、表面积、体积、高度、长度、宽度等几何属性进行存储,同时建立空间索引[7-8]。
3.2.4 实体动态表达
利用大型倾斜模型场景多细节层次优化方法、矢量切片调度方法,研究基于WebGL 的二三维叠加渲染方法,实现表里统一的倾斜模型场景在线三维可视化、实体模型查询、统计和输出功能。
(1)大型场景LOD优化。
多细节层次优化技术,就是为了预先对数据模型作不同程度近似的多个逼近模型,以在实时绘制时根据当前帧的视觉参数选用相应的逼近模型进行绘制,能够在整体上优化场景中模型间的多边形分配,从而实现硬件所能达到的最佳仿真效果。当在不同细节层次模型之间进行切换时,不同细节层次模型之间的差异会导致仿真画面的跳跃感。LOD 模型在显示时需要从简化序列中选择合适的模型,如果相邻层次之间的多边形数差异较大,转化时会引起图像的跳跃[9]。项目利用WebGL 技术实现大型倾斜模型场景的实时可视化功能、动态加载数据服务接口定义的三维数据资源,以及其他3DTiles 在线数据文件。利用Cesium 场景容器,调用三维场景服务接口,基于视觉启发加载倾斜模型瓦片集,并利用渲染技巧来精确地混合多级层次细节,合理调用细节层次瓦片的加载顺序。在场景的绘制过程中,依据物体距离视点在屏幕中心的偏离程度排序所需要渲染的模型。可利用缓存设计、异步调用等数据调度策略,来缓解大规模三维场景可视化数据传输的瓶颈问题[10]。
针对服务器端多用户请求和数据库频繁查询的问题,在服务器设计了数据缓冲池,对用户经常访问的数据进行缓存。同样采用金字塔结构的文件系统对缓存数据进行管理,对数据进行分层分块管理和存储。用户发送请求时,首先根据请求数据的分辨率,搜索数据所在层级。然后再依据数据的范围,寻找相应的数据缓存。如果缓存存在,就直接获取数据,如缓存数据找到对应,再向数据服务器进行数据请求,读取相关后添加到缓存中。
(2)矢量切片调度。
矢量切片以GeoJSON的形式,继承了矢量数据和切片地图的双重优势,具有更灵活,更细粒度的数据划分,能返回请求区域和相应级别的数据,渲染样式可改变和定制。项目利用Cesium 场景容器,通过矢量切片调度策略,动态加载GeoJSON 信息,可将不同层级的矢量瓦片和细节层次模型进行贴合显示。
矢量切片调度策略主要是:使用预定的方式,通过接口请求获取图层配置信息,主要包括图层范围、样式配置地址、其他信息等。当图层被勾选时,绑定三维场景的视角移动结束事件,视角移动之后根据视角范围,计算出当前视角内的切片编号。为了避免重复加载对切片编号进行筛选,将需要删除切片和需要添加切片分离出来,在对新添加的对象异步请求的同时,对不需要的切片进行删除。当添加切片请求完成时,对请求结果进行筛选、设置样式等操作之后进行创建、存储。
(3)实体模型动态表达。
研究基于GLSL 语言(OpenGL 着色器编程语言)GPU 编程技术,顶点着色器和片元着色器编程,定制渲染效果,实现自定义的渲染管线,在GPU绘制阶段,通过多次绘制实现矢量和模型数据的融合表达,无须改变原始数据存储结构。项目将基于Cesium所内置的Primitive基类,实现了以Shader逻辑为核心的GLSL实时单体化分割渲染机制,渲染效果如图2所示。
对于数据调度获取到的每块矢量瓦片单元,先以图元为单位拆解出内部包含的几何对象,构建为基础二维几何图元,然后设置三维单体化底面高度属性字段、顶面高度属性字段等必要样式信息,读取图元本身的三维空间位置信息,同时结合样式配置,提取必要的图元属性,构建三维几何图元,建立自定义Primitive 绘制对象。为确保海量数据渲染效率,对图元进行合并处理,接着构造GLSL Shader 与JavaScript的基于图元唯一键的关联关系,支撑对象属性拾取,进行实例着色属性赋值,支撑基于属性的对象单体化着色,基于编写的自定义GLSL Shader 顶点着色器脚本和片元着色器脚本,实现浏览器渲染管线下的动态单体化效果渲染。
4 结语
2018 年自然资源部部长陆昊在海南调研期间提出,自然资源相关业务系统要由二维系统变成三维系统,解决自然资源调查、确权和国土空间用途管控等问题。开展基于倾斜模型的实体提取和动态表达技术研究,可以充分挖掘现有二、三维数据价值,实现实体三维单体模型的动态提取,服务实体三维建设,应用于后续三维矢量结构线和白模的构建工作,同时研究实体模型的动态表达,兼顾在线浏览高效性、保真性和实体查询统计准确性,改善实景三维地理场景“一张皮”和“表里不一”的现状,可充分发挥三维地理信息技术优势,服务社会经济发展需要。
图2 实时单体化效果