海量三维空间数据可视化技术研究

2021-01-20 08:43孟天杭
科学技术创新 2021年1期
关键词:视景视点瓦片

孟天杭

(北京建筑大学测绘与城市空间信息学院,北京100000)

1 概述

随着智慧城市的提出,对三维地理信息系统的需求有了迅速且实质性的进展。无人机、三维激光扫描仪技术的发展,三维空间数据获取的时间周期与获取成本大大缩减,由于获取的数据更全面更精细,伴随而来的是数据量的增加带来的一系列问题,包括数据的管理、数据的筛选、数据的更新等众多问题[1]。

随着互联网的不断发展以及需求更加广泛,三维GIS 可视化平台WebGIS 应运而生,WebGIS 大大降低了系统的成本,用户的操作也变得更简单与高效,这就进一步促进了WebGIS 技术的大众化发展[2]。Cesium 是一种表达地理数据的三维WebGIS可视化平台。它的优点是具有多维的空间尺度和友好直观的三维可视化效果,适合向不同专业程度的人群展示和分发地理数据。3D Tiles 是一个开放规范,可用于在台式机、Web 程序和移动应用程序之间共享,可视化,可以包含多种类型的3D 地理空间内容,比如倾斜摄影测量模型、BIM建筑模型、人工模型、点云、矢量数据等都可以转化为三维瓦片,从而高效地进行可视化、共享和互操作等难题[3]。

2 场景裁剪

2.1 要素可见性判断

Cesium 在进行三维瓦片可视化过程中,它是通过相机来决定那些瓦片是当前视点情况下是可见的,对于可见的瓦片则请求瓦片数据,对于不可见的要素直接在此步骤剔除。

在可视化过程中,因为在三维瓦片的索引文件中有每个瓦片的包围体信息,我们在解析索引文件的时候计算了每个瓦片的包围体信息,并用一个3dTile 类来管理。对于三维空间数据我们在绘制时通过AABB 包围盒来近似其空间范围,以此包围体来与相机的视景体求交来分析视景体裁剪过程[4]。

图1 视景体裁剪示意图

如图1 所示,视景体是由六个面组成的,分别用六个平面方程来表示,通过六个表面组成了在可视化场景的可视区域。 1代表进裁剪平面、3 代表远裁剪平面,2 4 与视景体相交或部分相交,5 在视景体外面。瓦片的可见与不可见是通过瓦片的包围盒与视景体求交来判断的,Cesium 通过三个变量表示裁剪结果。MASK_INSIDE:表示瓦片在视景体里面、MASK_OUTSIDE:表示瓦片不在视景体里面、MASK_INDETERMINATE: 表示瓦片部分在视景体里面。

图2 可见性判断流程图

如图2 所示在进行瓦片的可见性判断时:

a.遍历索引文件获取每个瓦片的外包围体信息、旋转矩阵、几何误差、精化方式等信息。并将这些信息构成Cesium3DTile类 , 包 含 transform、computedTransform、boundingVolume、viewerRequestVolume、geometricError 等信息。

b.判断当前节点是否有父级旋转矩阵parentTransform,如果有父级就用父级旋转矩阵,如果没有就用索引文件中的旋转矩阵。

c.判断是否有父级的parentVisibilityPlaneMask 信息,如果有就用父级的可见性平面,从而提高瓦片可见性判断的速度,如果没有则利用裁剪平面去计算此值。

d.更新旋转矩阵transform,用于包围体边界的计算。

e. 计算相机到瓦片包围盒最近的距离distanceToCamera 与相机到瓦片中心的距离centerZDepth,用来后面屏幕空间误差的计算。

f.计算屏幕空间误差,并根据c 和e 计算的值进行瓦片的可见性判断过程。

2.2 LOD 调度策略

当相机视点远离时,对场景要素的精细程度要求较低,即所需数据的LOD 级别较低。当相机视点拉进时,对场景要素的精细程度要求较高,所需数据的LOD 级别较高。如何去判断当前瓦片的细节层次是否满足当前视点下的要求,Cesium 使用像素误差来决定瓦片的细节层次,也就是屏幕空间误差SSE。

式中SSE 表示计算得到的屏幕空间误差;geometricError 表示瓦片的几何误差;height 是当前画布的像素高度;distance 表示相机到瓦片中心的距离;seeDenominator 表示2 倍的tan(fov/2)值[5]。

图3 LOD 调度流程图

如图3 所示在LOD 级别跳跃过程中:

a.判断根节点是否满足SSE 要求,如果根节点不满足要求整个树不会被渲染。

b.判断tileset 是否定义skipLevelOfDetail,如果没有则执行基础遍历,获取基础屏幕空间误差与最大屏幕空间误差,如果有则执行跳跃遍历。

c.基础遍历是一个深度优先遍历过程,遍历所有可见的瓦片并标记。如果skipLevelOfDetail 处于禁用状态,则直到所有子瓦片都加载后,瓦片才会进行refine 操作,这个是传统的替换求精方法,称为基遍历。屏幕空间误差大于基本屏幕空间误差的瓦片进行基本遍历,所有其他瓦片都跳过遍历。

d.跳跃遍历过程,遍历树并检查其选定的帧是否为当前帧,如果是将其添加到选择文件中排队。这是一个前序遍历过程,因此子节点优先于父节点被选中,这样可以很容易地标记出它们的选择深度。

e.遍历完之后对满足要求的文件请求文件、渲染解析。

根据以上步骤判断瓦片是否满足当前视点要求下的LOD渲染策略,如果满足则进行请求文件、解析渲染文件如果不满足则用该节点的子节点去重新判断是否满足当前视点要求的渲染策略,这样实现了动态去调度不同lod 级别的数据。

3 海量三维瓦片调度

3D Tiles 三维空间数据格式包含一个json 索引文件,索引文件中包含了每个瓦片的几何误差、包围体信息、瓦片数据的引用路径、父子节点关系等。索引文件包含了整个三维瓦片的所有节点信息,由这些节点构成一个多叉树。在Cesium 中通过Cesium3DTile 类管理,通过广度优先遍历索引文件,形成节点树用于后面的一系列操作[6]。三维瓦片的调度过程如图4 所示。

图4 瓦片调度过程图

如图4 所示,在三维可视化过程中对三维瓦片调度时:

a. 首先定义一个Cesium3DTileset 类来管理三维瓦片数据。包括了索引文件的解析、节点树的构建等。

b.解析三维瓦片数据的索引文件,通过广度优先的方式遍历整个索引文件,从而得到三维瓦片数据的树状结构。其中树状结构每个节点包含了一个瓦片的几何误差、包围体信息、旋转矩阵、子节点等信息,具体含义如下:

1 子节点属性:表示当前瓦片的所有子瓦片。

2 旋转矩阵:表示当前瓦片的旋转矩阵,旋转矩阵是具有级联关系的,当前瓦片的位置是由其父节点的旋转矩阵乘以当前节点的旋转矩阵计算得来的。

3 包围体属性:表示当前瓦片所包含的三维空间数据大的包围体信息,有三种表示方法:地理范围、AABB 包围盒、包围球三种方式。

4 几何误差属性:表示瓦片所包含三维空间数据的分辨率信息。用来计算瓦片的空间屏幕误差,即瓦片的LOD 级别,便于在三维可视化时进行判断。

c.根据相机的视点和视景体对树结构的根节点进行裁剪测试,如果根节点对象可见或者部分可见,根据屏幕空间误差因子判断多细节层次是否满足当前视点下的要求,如果满足则进行d,如果不满足则对子节点进行c,如果当前节点对象不可见则直接剔除。

d.对通过瓦片的可见性判断并且满足当前视点下的允许的最大屏幕空间误差条件,请求三维瓦片数据,通过requestTiles、requestContent、updateTiles 等操作请求瓦片数据,并根据瓦片的具体格式采用不同的解析方法来进行解析渲染工作。若该瓦片请求成功则将该瓦片的contentUnloaded 属性设置为false,避免重复请求。

e.瓦片更新是根据索引文件中的refine 属性来进行瓦片的更新替换过程。它有两种方式add 和replace。add 就是把请求完成的节点对象解析渲染加入到当前场景中。replace 是当前的节点对象的多细节层次不能满足要求,则用其满足要求的子孙节点瓦片进行替换。

4 平台设计与实现

此平台以B/S 模式的三维WebGIS 框架为基础,结合WebGL 图形硬件加速渲染技术,依托Cesium 平台,设计和实现基于Cesium 的三维虚拟地球可视化系统。系统采用前后端分离的方式进行开发,前端采用Vue 框架进行模块化设计、后端采用Nodejs 框架进行数据的发布以及整个平台的发布、数据库采用MySql 来存储三维地理要素的属性信息,如图5 所示。系统集成了三维场景绘制、三维漫游、三维测量、属性信息查询等功能。

图5 系统总体架构图

5 结论

本文基于WebGL 渲染管线,通过视场裁剪算法、LOD 调度策略优化,解决Cesium 场景中要素可见性判断问题,通过剔除场景中不可见要素,降低Cesium 的渲染工作量,减轻浏览器的工作负担。在此基础上,结合三维瓦片的数据结构利用多叉树的数据调度算法,解决海量数据的按需传输加载问题,实现快速移动的场景中三维空间数据的流畅渲染。采用前后端技术并结合MySQL 数据库,形成了一套可进行查询、分析、管理等的三维WebGIS 平台。

猜你喜欢
视景视点瓦片
飞行控制算法演示验证系统设计
飞行模拟器多通道视景校正融合方法研究
打水漂
地理信息技术在机载增强合成视景中的应用
某炮模拟训练系统中三维视景的设计与实现
乡村瓦语
惯性
环境视点
让你每天一元钱,物超所值——《今日视点—2014精萃》序
寻找新的视点