滑坡模拟三维地形建模关键技术与应用
2023-12-08吕奕杰
吕奕杰,叶 健
(西南交通大学地球科学与环境工程学院,四川 成都 611756)
滑坡灾害发生频繁且破坏力巨大[1-2],据统计,2008年1月至2017年3月,我国共发生山体滑坡灾害486次,给人民生命和财产安全造成了极大的威胁,滑坡灾害防治已刻不容缓。通过数值模拟滑坡运动过程,开展滑坡运动机理研究[3]、滑坡防灾工程设计[4]、滑坡致灾范围预测[5]等相关拓展工作,已成为当前研究滑坡灾害、开展滑坡灾害防治减灾工作的重要手段。
地形是滑坡数值模拟的边界,现实中滑坡灾害运动和堆积情况与地形条件紧密相关,地形建模需要使用高精度地形数据才能实现对实际地形条件的准确还原[6]。因此,高精度的滑坡地形数据是滑坡数值模拟准确度的重要保证,同时也是高保真表达滑坡灾害场景和滑坡影响范围的重要保证。目前,在开展滑坡数值模拟与三维可视化工作时,传统方法是将滑坡地形数据一次性全部读入内存参与数值模拟计算,并在可视化阶段对全部地形数据进行渲染[7]。该方法会导致当地形数据精度高、数据量大时,模拟程序需要进行大量的地形渲染工作,从而严重降低模拟程序运行速度,甚至导致程序无法正常运行。针对该问题,可采用层次细节(level of detail,LoD)技术对滑坡地形渲染进行简化,优化模拟程序运行速度。常用的LoD方法有:四叉树LoD方法[8]、实时优化自适应网格(real-time optimal adaptive meshes,ROAM)方法[9]、递进网格(pro-gressive meshes,PM)方法[10]、状态无关单通过自适应细化(stateless one-pass adaptive refinement,SOAR)方法[11]。其中,由于四叉树结构便于对块状地形数据进行管理,因此首选四叉树LoD方法。基于四叉树LoD方法,通过分层分块处理地形数据,根据四叉树结构动态调入不同分辨率的地形数据块到内存,再将这些数据块拼接并渲染,可以较高帧速率实现对大规模滑坡地形数据的三维可视化表达[12]。然而,上述方法在实际应用中,由于内存存储的地形数据块具有不同的分辨率,使得参与滑坡数值模拟计算的地形数据分辨率不统一,进而导致滑坡模拟可能产生严重偏差,且由于采用拼接的方式构造地形,使得参与滑坡模拟计算的地形数据是不连续的。此外,由于在滑坡模拟过程中,当模拟滑坡体从当前地形块运动至其他地形块时,还需根据模拟滑坡体的位置调用对应的地形数据块参与模拟计算,这给滑坡模拟造成不便。
针对上述问题,本文提出一种面向滑坡模拟四叉树LoD地形建模改进方法,以2015年深圳光明新区滑坡为例,模拟滑坡灾害场景,通过反映可视化实际提升效果的运行帧率,以及三维地形建模方法对滑坡数值模拟的实际影响作用,验证本文方法的有效性和实用性。
1 四叉树LoD地形优化建模关键技术
四叉树LoD地形优化建模方法的主要思想是使用四叉树结构管理地形数据,将地形数据按照不同分辨率分割成地形数据块,通过将不同分辨率地形数据块分批调入内存进行组合渲染,实现多分辨率地形建模,以减少需要渲染的图形数量,提升程序运行速度。该建模方法包含地形数据组织、调度、拼接的关键技术[13]。
在地形数据组织方面,采用四叉树结构管理地形数据,将地形数据分层分块处理,构建地形四叉树。每个地形数据块均各自对应一个四叉树节点,属于不同层级的四叉树节点所对应的地形数据块具有不同的分辨率。当前四叉树节点对应的地形数据块所表示的地形范围,与当前节点细分产生的下一个层级的4个子节点所对应的4个地形数据块,表示的地形范围是一致的,但后者具有更高的分辨率。为了方便描述,本文将地形数据块及其对应的四叉树节点整合统称为地形节点。
在地形数据调度方面,为了调用具有合适分辨率的地形节点参与地形渲染,需要控制地形四叉树的细分程度。使用两个条件对地形节点是否细分作出判断:一是节点与视点的距离,离视点近的区域用细分程度较高(分辨率较高)的节点进行精细描述,离视点远的区域用细分程度较低(分辨率较低)的节点进行粗略描述;二是节点的复杂程度,对于复杂崎岖地形用细分程度较高的节点进行精细描述,对于简单平坦地形用细分程度较低的节点进行粗略描述。综合上述两点,可构造一个地形节点细分评价体系[13],计算公式为
(1)
式中,f为地形节点细分评价值;S为视点到地形节点中心的距离;C为调节因子;Δh1、Δh2、Δh3、Δh4分别对应地形节点4条边的中点处高程值与边的两个端点处高程值的平均值之差;Δh5、Δh6同理,对应的边为对角线。
此外,对于一些在视景体内不可见的地形节点不参与地形渲染,无须进行调用,仅调用在视景体内可见的地形节点即可。由于地形节点本身的不规则性,使用节点包围盒[14]替代原有节点供视景体判断。
在地形数据拼接方面,按照地形四叉树的组织结构拼接地形节点,对于不同层级(不同分辨率)地形节点,在接边处由于高程点数目不同产生的裂缝[15],通过限制相邻地形节点层级差不超过1,并令属于较高层级的地形节点在与属于较低层级的地形节点的拼接处少绘制一部分高程点[14],即可解决裂缝问题。
2 面向滑坡模拟的四叉树LoD地形建模改进方法
开展滑坡模拟工作是当前滑坡防灾减灾的重要手段。地形作为滑坡模拟的边界,是滑坡模拟必不可少的组成部分。在数值计算方面,滑坡模拟需要高精度地形数据参与模拟计算才能保证模拟准确度,且为了保证模拟计算顺利进行,参与模拟计算的地形数据必须是完整的。在可视化方面,滑坡模拟同样也需要高精度地形数据渲染滑坡地形,才能高保真地表达滑坡灾害场景和影响范围。为了满足滑坡模拟场景流畅漫游的需要,模拟场景渲染帧速率需要维持在一个相对稳定的较高的区间内。然而,针对上述需求,若将高精度滑坡地形数据一次性全部读入内存参与模拟计算并全部渲染,由于地形数据量大,会导致模拟程序需要分配大量资源用于渲染工作,从而严重制约滑坡模拟程序运行速度;若采用分层分块处理高精度滑坡地形数据,并将不同分辨率地形数据块分批调入内存进行组合渲染以优化程序运行速度,会导致参与模拟计算的地形数据缺乏完整性(不连续且分辨率不统一),给滑坡模拟数值计算造成巨大困扰。
为满足滑坡模拟的需要,本文对原有四叉树LoD地形建模方法进行改进,不对地形数据进行分层分块处理与分批调入内存,而是在程序初始化时将滑坡地形数据一次性完整读入内存中。在滑坡模拟数值计算阶段,与滑坡动力学模型同时参与计算;在滑坡模拟可视化阶段,采用四叉树结构管理地形数据,从存于内存的滑坡地形数据中构造出地形节点,将不同分辨率地形节点拼接并渲染,实现滑坡地形优化建模,在为滑坡模拟数值计算提供完整连续地形条件的同时,从可视化渲染方面优化模拟程序运行速度。
本文从0开始对地形四叉树的层级由低到高进行编号,并根据地形节点所属层级含有的节点数量x,从0至x-1依次编写地形节点的序号。
完整滑坡地形模型由每个地形节点拼接构成,每个地形节点均由9个高程点通过三角形扇的形式连接绘制而成,9个高程点构成了地形节点的点集。在地形建模过程中,每个地形节点的点集直接从存于内存的完整滑坡地形数据中选取,如图1所示。
图1 地形节点点集选取
选取方法为:用一个二维数组dem存储完整滑坡地形数据,数组的行数和列数与地形数据的行数和列数相同,通过行索引值row和列索引值col进行访问,数组中的每个元素用于存储其对应高程点的Z坐标值,根据元素在数组中的排列位置,计算高程点的X和Y坐标值。同理,每个地形节点的点集均由一个3×3的二维数组cell进行存储,通过行索引值i和列索引值j进行访问。通过建立由i到row和由j到col的映射关系使数组元素cell[i][j]与数组元素dem[row][col]相对应。基于上述映射关系,可计算当前地形节点在滑坡地形数据中所处的位置,并提取对应高程点数据,实现对当前地形节点点集的构建。映射关系为
(2)
式中,N为当前地形节点序号;L为当前地形节点所属层级;rows和cols分别代表滑坡地形数据的行数和列数。
基于上述地形节点构造方法,改进的四叉树LoD地形数据调度方法,如图2所示,具体实现步骤如下:
图2 改进的四叉树LoD地形数据调度方法
(1)创建一条处理队列和一条缓存队列。处理队列用于存放正在处理的地形节点,缓存队列用于存放由处理队列中地形节点细分产生的子节点。
(2)访问地形四叉树的根节点,按照本文方法构造地形节点,将该地形节点送入处理队列。
(3)对处理队列中的所有地形节点依次进行处理。对于正在处理的节点,判断该节点在视景体内是否可见。若不可见,将该节点出列,不进行处理;若可见,判断该节点是否为叶子节点。若是叶子节点,将该节点出列并渲染;若不是叶子节点,使用地形节点细分评价体系判断该节点是否需要细分。若不需要细分,将该节点出列并渲染;若需要细分,将该节点出列并细分。按照本文方法构造细分产生的4个地形节点,并将这4个节点送入缓存队列。
(4)当处理队列为空且缓存队列不为空时,将缓存队列中的所有地形节点出列并送入处理队列,转到步骤(3)继续执行;当处理队列和缓存队列均为空时,停止执行。
3 算法实现与分析
2015年12月20日,广东深圳光明新区一工业园区附近的渣土填埋场发生山体滑坡事件,滑坡持续时间约为200 s[16-17],滑坡模拟对于滑坡灾情评估及防灾减灾具有重要作用。考虑滑坡模拟对三维地形数据调度的特殊需求,本文以2015年深圳光明新区滑坡为例,实现面向滑坡模拟的三维地形数据调度与可视化方法,采用光滑粒子流体动力学方法(smoothed particle hydrodynamics,SPH)构建滑坡动力学模型,模拟滑坡运动堆积过程。SPH方法是一种无网格方法[18],能够较好地解决不规则性、多相流耦合问题及大变形、高速冲击荷载等高度几何非线性问题,对复杂三维环境下的流体建模具有独特优势,是开展滑坡数值模拟工作的常用方法之一[19-22]。
试验平台硬件参数为:Intel Core i5-9400F的处理器,NVIDIA GeForce GTX 1050 Ti的显卡,16 GB内存,Windows 10 Professional 64-bit的操作系统。编程语言为C++/OpenGL。
图3展示了滑坡灾害场景模拟可视化效果,通过使用不同灰度表示SPH粒子的速度,模拟滑坡运动堆积过程,并以格网模式展示了滑坡地形建模效果。从模拟效果来看,本文提出的地形建模方法能够很好地实现滑坡动力学模型与滑坡地形模型的耦合,使滑坡模拟工作顺利开展,所构建的地形模型能够高保真表达滑坡区域地形,很好地再现了深圳光明新区滑坡灾害过程。
图3 深圳光明新区滑坡灾害场景模拟
图4展示了对滑坡灾害场景模拟程序渲染帧率变化情况的统计。通过对比使用本文方法简化地形渲染与未简化地形渲染情况下模拟程序的渲染帧率情况,可以看出,未做简化地形渲染操作的模拟场景渲染帧率维持在一个较低的水平上,严重拖慢了滑坡模拟进程;使用本文方法简化地形渲染可显著提升模拟程序运行速度,加速滑坡模拟进程,且模拟场景渲染帧率维持在一个相对稳定的较高的区间内,能够满足滑坡灾害场景流畅漫游的需要。
图4 深圳光明新区滑坡灾害场景模拟程序渲染帧率变化
此外,为了展示本文方法的优越性,开展了地形可视化与数值模拟稳定性对比试验,其目的是检验在滑坡模拟可视化过程中,通过场景浏览是否会对数值模拟的实际结果产生影响。对比试验方法如下:仍然选取深圳光明新区滑坡作为模拟对象,模拟过程200 s;第1组试验保持摄像机不动,全程录制深圳光明新区滑坡模拟的全过程;第2组试验通过鼠标和键盘移动摄像机浏览场景,并全程录制深圳光明新区滑坡模拟的全过程。多次试验表明,无论怎样移动摄像机浏览三维滑坡模拟场景,滑坡的堆积范围均保持一致,也充分说明了本文提出的三维地形建模方法的稳定性和可靠性。
4 结 语
传统的四叉树LoD方法虽能够满足大规模三维地形建模和可视化渲染的需要,但在滑坡模拟中,会导致参与滑坡模拟数值计算的地形数据存在不连续且分辨率不统一的问题,给滑坡模拟造成巨大不便和严重偏差。针对以上问题,本文提出了面向滑坡模拟的四叉树LoD地形建模改进方法,结论如下:
(1)与传统的四叉树LoD方法分层分块处理地形数据并将地形数据块分批调入内存的方法不同,本文根据滑坡模拟对三维地形数据调度的特殊需要,提出了改进的四叉树LoD地形数据调度方法,将地形数据一次性完整调入内存参与滑坡模拟计算,并从地形数据中动态构造地形数据块供渲染算法调用。
(2)在滑坡数值模拟方面,本文三维地形建模方法可满足滑坡动力学模型与地形模型的耦合需要,为滑坡模拟提供完整连续的地形条件,使滑坡模拟顺利进行。更为重要的是,利用该建模方法不会对滑坡数值模拟的结果产生实际影响。
(3)在滑坡可视化模拟方面,本文方法在高保真表达滑坡区域地形的同时,能显著提升模拟程序运行速度,满足滑坡模拟场景流畅漫游的需要。
当前滑坡防灾减灾刻不容缓,滑坡模拟已成为滑坡防灾减灾和灾情评估的重要手段。利用本文方法不仅能够满足滑坡模拟三维可视化浏览的需求,优化模拟程序运行速度,而且能够保证滑坡模拟结果的正确性,具有较高的实际应用价值。