铁路隧道构件级数字孪生模型渐进式高效更新方法
2024-03-04黄贤喆郭永欣陈俊桦丁雨淋
黄贤喆,朱 庆,郭永欣,陈俊桦,丁雨淋
(西南交通大学地球科学与环境工程学院,611756,成都)
0 引言
铁路隧道构件级数字孪生模型是铁路工程全生命周期信息化应用的重要信息载体,蕴含着丰富的几何、语义及安全-质量-进度等业务信息,要借助数字孪生模型实时感知、分析决策及可视化分析应用,通常需要模型信息集成融合到全域统一三维立体时空框架中,并通过实时数据不断对模型迭代优化动态更新[1]。铁路工程信息化部门更新模型流程主要通过BIM引擎中更新、BIM模型转换为GIS模型、GIS引擎中新瓦片覆盖3个关键步骤,专业人员常采用全局替代式更新方法来保障三维瓦片完整正确。然而,该方式忽略了已有三维瓦片模型基础,对大量已有三维模型重复冗余处理,更新代价高且效率较低,难以保障几十公里长的铁路隧道数字孪生模型高效实时更新。
国内外学者针对三维瓦片模型更新方法研究主要分为替代式与渐进式两类[2-9]。替代式研究主要聚焦在三维瓦片模型转换[2,9],以重新处理生成等方式按周期做覆盖性整体更新[3],这类方法能保证模型更新准确性,但未充分利用已有三维瓦片基础,时间效率低,难以满足数字孪生实时更新需求。渐进式方法研究一般分为缩编更新、增量制图综合和级联更新[4]三类,该类方法充分利用现有模型数据基础进行逐层级过渡更新,仅需要处理更新局部瓦片,效率较高。但缩编更新和增量制图综合的方式需要额外处理相邻模型,级联更新虽能通过树形结构[5-6]建立不同细节层次间的关联[7],但主要针对非二进制瓦片,难以直接适用于数字孪生铁路三维瓦片快速更新。以级联更新为基础,选用国际开放地理空间信息联盟标准三维瓦片数据结构3D Tiles[10]作为结构基础,定义并描述了铁路隧道数字孪生模型多细节层次划分,设计了适用于瓦片更新的索引结构,并基于级联更新提出隧道构件级数字孪生模型在三维瓦片数据结构中的渐进式更新方法。
1 铁路隧道多细节层次三维瓦片结构
铁路隧道多细节层次三维瓦片结构设计思路如下:1)为确定三维瓦片更新的层级范围,划分铁路隧道的多细节层次;2)针对瓦片中结构复杂难以更新的问题,拓展三维瓦片数据结构,设计适用于瓦片内构件级模型更新的索引结构,为模型更新奠定基础。
1.1 构件级模型多细节层次划分
铁路隧道数字孪生模型具有空间跨度大、几何结构复杂、建模参考标准细节层级单一的特点,为保证转换后的GIS模型的高性能可视化分析应用,需要针对几何信息进行多细节层次处理。本文参照CRBIM1003—2017《铁路工程信息模型表达标准1.0》[11],将模型的多细节层次定义划为4级,分别为LOD 1、LOD 2、LOD 3和LOD 4[9]。不同细节层次铁路隧道超前支护、初期支护、二次衬砌及隧道内部结构等部分构件级模型分类如表1所示。
表1 隧道构件级模型多细节层次划分
1.2 多细节层次三维瓦片结构设计
现有三维瓦片结构面向GPU渲染设计,采用二进制形式将多个构件级模型的多类型信息压缩在一起,难以准确定位瓦片中存储字节段落。为此,本文采用3D Tiles进行拓展,设计了构件级模型与瓦片中Node结点对应的三维瓦片数据结构。
3D Tiles由瓦片结构树(Tileset)和三维瓦片(Tile)组成,其中,瓦片结构树记录多细节层次信息。本文瓦片采用批量化3D模型(b3dm)格式,由瓦片头(Header)、要素表(FeatureTable)、批量表(BatchTable)、Gltf几部分组成,要素表、批量表记录属性信息,Gltf用Json加二进制(Bin)存储图形信息。瓦片中构件级模型的图形信息与属性信息通过batchId值关联。本文提出了存储在瓦片结构树节点中的瓦片索引(TileIndex),作为节点中瓦片更新的索引。
本文设计的瓦片索引,记录隧道构件级模型及其对应的Node结点信息,作为瓦片内构件级模型更新的查询依据。瓦片中Gltf使用对象类记录模型信息。其中,Buffer对象中记录了点位、法线、纹理坐标等二进制数据;BufferView对象记录Buffer对象下标与二进制数据段的起点、长度、基本类型;Accessor对象记录BufferView对象下标、数据类型和数量;Mesh对象记录Accessor对象索引下标,标明组成面元的位置、法线等信息;Node对象可记录多个Mesh对象下标等信息;Scene对象是场景加载入口,记录包含的Node结点下标。对象类之间通过索引下标层层嵌套实现模型表达。本文将隧道构件级模型与瓦片中Node结点对象映射并记录在索引中。在索引结构中,PartsLength记录瓦片中存储的构件级模型个数,Children数组中存储构件级模型的唯一构件编码(UUID)及瓦片中其对应的LOD等级、Node序列值、batchId值。若Node序列值为-1,表明瓦片中不存储该构件,但瓦片所在树节点中存有该构件的空间范围。构件级模型在瓦片与瓦片索引间的关联通过存储的Node序列值实现,如图1所示。
图1 瓦片与瓦片索引间的关联关系
2 隧道构件级数字孪生模型渐进式更新
2.1 构件级模型渐进式更新流程框架
本文提出的渐进式更新方法分三步,首先根据更新信息查找到更新的叶子节点位置,其次更新节点中瓦片,最后在结构树中向上逐层更新多细节层次索引信息。该方法解决了瓦片内更新问题,同时能保证构件级模型更新前后不同层级间模型信息的一致性。更新流程如图2所示,实线箭头代表概念层面的模型更新方向,虚线箭头代表物理层面的具体实现过程。
图2 构件级模型渐进式更新流程框架
2.2 构件级模型多细节层次更新算法
2.2.1 层级索引更新算法 模型更新过程中一般需要依据变更信息完成变化检测操作实现要素匹配[4],而铁路隧道构件级模型具有设计定义的唯一标识符构件编码(UUID),编码中包含类别等语义信息,可以作为更新查找的依据。
更新时考虑以下条件:一是不同细节层次间空间拓扑关系一致性,父节点空间范围包括子节点;二是模型在不同层次中的版本一致性;三是为提高瓦片渲染效率减少内存消耗,设定父节点包含的子节点个数与瓦片中包含的构件级模型数目阈值,超出时创建新节点,根节点的子节点数目无限制;四是节点中存储同类构件级模型,并依据隧道构件几何表达精度确定更新层次。针对铁路隧道构件级孪生模型更新中可能出现的情境,多细节层次更新操作可分为删除、修改和插入3种类型,多细节层次更新算法概述如下。
1)输入更新模型与更新构件编码。
2)从结构树根节点查询,查找至叶子节点。以瓦片索引中的构件编码确定更新模型所处节点位置。若插入时查找失败,创建新的节点。
3)节点中执行不同类型的更新操作,同步更新瓦片与瓦片索引。
4)根据更新的构件级模型需要展示的细节层次,向上查找父节点执行更新,重复步骤3)中工作,直至不满足展示条件。
当多细节层次瓦片数据中执行插入操作且已存在模型同类别节点时,插入操作有6种情形,如图3所示。插入构件级模型的空间范围仅被一个瓦片包含或相交,若瓦片存储数目未达阈值,插入;已达上限,瓦片一分为二。若模型与瓦片空间范围无重叠,查找最邻近瓦片,若其数目未超阈值,插入;已达阈值,创建新瓦片。若模型空间范围与多个瓦片有交集,最邻近瓦片中构件级模型未超阈值,插入其中;若最邻近的瓦片中构件已达阈值,选择最邻近与次临近瓦片分裂成3个。以构件级模型与瓦片的重叠体积最大为最邻近瓦片选取原则。瓦片分裂采用空间聚类方法划分,以重叠(Overlap)、覆盖(Overlay)和瓦片空间范围形状(Shape)的均值为评价指标(公式1[12])。其中,Shape是构件级模型插入瓦片后瓦片三维柯西值的增加值,Metric值最小为最优结果。若叶子节点中瓦片分裂,向父节点传送新的节点信息,若父节点中子节点数量上溢,对父节点执行分裂操作。父节点分裂的最小单位为子节点的空间范围,分裂后的父节点根据空间包络关系重新确定子节点。
图3 瓦片中插入构件级模型示意图
(1)
2.2.2 三维瓦片更新算法 本文提出的瓦片更新主要原理如图4所示,图4中展示了瓦片和瓦片索引的存储内容。首先通过更新信息中的隧道构件编码值匹配瓦片索引中对象,获取其对应的Node序列值,根据瓦片中Node数组下标,确定变更的数据位置,在内存中完成数据更新,再更新瓦片中长度、模型对应的二进制数据等描述信息,同时更新瓦片索引中的相关信息,保证更新后瓦片中构件级模型与瓦片索引信息间的对应关系不变。
图4 三维瓦片更新流程图
瓦片中模型的更新可分解为插入、删除、修改3种基本操作。插入操作先解析模型信息,在Scene场景中存储新构件级模型对应的Node序列值,在瓦片索引中添加插入构件级模型的相关信息。删除操作在瓦片索引中匹配待删除模型的构件编码,根据对应的Node序列值从不同的对象类数组中剔除相应对象,若对象位于数组中非末端位置,遍历后续对象类数组,更新相应索引值,同时更新瓦片索引,剔除待删除构件级模型的相关信息。修改操作根据瓦片索引查找瓦片中对应的Node对象,移除原构件级模型对应数据,在原位置插入新数据,完成Buffer对象总长度的更新,如图5所示,同时更新瓦片索引。
图5 瓦片修改过程
3 实验验证
以典型大型铁路隧道中正洞与平导中截取的部分构件级模型数据为实验对象,已有3D Tiles格式数据424 MB,更新的构件级模型数据格式为Bentley的.dgn格式,将更新的模型几何数据以构件为单位转换为通用的OBJ格式,语义属性信息转换为.csv格式,数据量为21.3 KB,作为更新的输入信息,实验使用Intel(R) Core(TM) i7-8750H@ 2.20GHz中央处理器,32 GB内存,基于Microsoft Visual Studio 2019,引用nlohmann/json库和tinyobjloader库实现,设定瓦片中存储构件级模型数目阈值为10。
从原始数据集中抽取正洞二衬模型,作为瓦片中数据插入与删除的验证数据;从模型变更信息中抽取了因平导施工时周围地质环境与设计参考资料不符而产生变更的模型,作为瓦片修改的验证数据。以本文方法与替代式更新方法对抽取数据进行8次实验,记录了2种方法的处理时长。得到的瓦片更新结果中,去掉偏差较大的最大最小值,取其余6次结果的均值作为平均处理时长,处理结果如图6所示。
图6 瓦片更新结果
图6中表格记录了本文方法与替代式更新方法的平均处理时长。插入操作中,本文方法效率更高,其仅需在原瓦片基础上增加新信息,替代式更新要将瓦片中所有构件级模型重新处理。删除操作中,本文方法仅需57 ms,与替代式相比具有充足的优越性。修改操作中,本文方法耗时更长,原因在于瓦片中有4个模型产生变更,算法对该瓦片修改4次,而替代式的方法只对瓦片执行1次。但替代式更新方法除需输入待更新的构件级模型外,仍需人工搜寻瓦片中其余模型,这部分时间并未统计在处理时长中。在实际使用情景中,人工搜寻其余构件级模型的时长远大于瓦片执行多次更新操作的所需时长。实际更新时,往往变更的构件级模型仅占总模型中的小部分,因此模型瓦片总数量越大,渐进式更新方法相对节约时间愈显著。
本文通过搭建铁路隧道构件级数字孪生模型原型系统检验本文更新方法的实验效果。模型更新前后对比如图7所示,图7中展示了不同距离下模型更新前后的可视化结果,表明本文方法能够保证模型更新前后的几何、拓扑关系无误。与整体替代式更新的方式相比,本文方法充分顾及已有三维瓦片模型基础,避免了大量冗余处理,有效提高了铁路隧道构件级数字孪生模型更新的时间效率。
图7 多细节层次模型更新前后局部对比
4 结论
本文针对铁路隧道构件级数字孪生模型更新过程存在的大量重复性冗余处理、更新代价高且时间效率低等关键问题,设计了适用于铁路隧道构件级模型多细节层次动态更新的三维瓦片结构,提出了一种构件级数字孪生模型渐进式更新方法,提升了更新过程的时间效率。经过原型系统验证,结果表明本文方法充分利用已有三维瓦片数据基础,更新效率更高,可有效满足铁路隧道构件级数字孪生模型动态更新的时效性需要。后续研究将进一步优化更新算法,考虑采用多核并行处理和多版本追溯覆盖等方式进一步改善方法,综合提升铁路隧道构件级数字孪生模型在实际工程应用中的动态更新效率。