黃賢喆,朱 慶,郭永欣,陳俊樺,丁雨淋
(西南交通大學(xué)地球科學(xué)與環(huán)境工程學(xué)院,611756,成都)
鐵路隧道構(gòu)件級數(shù)字孿生模型是鐵路工程全生命周期信息化應(yīng)用的重要信息載體,蘊含著豐富的幾何、語義及安全-質(zhì)量-進度等業(yè)務(wù)信息,要借助數(shù)字孿生模型實時感知、分析決策及可視化分析應(yīng)用,通常需要模型信息集成融合到全域統(tǒng)一三維立體時空框架中,并通過實時數(shù)據(jù)不斷對模型迭代優(yōu)化動態(tài)更新[1]。鐵路工程信息化部門更新模型流程主要通過BIM引擎中更新、BIM模型轉(zhuǎn)換為GIS模型、GIS引擎中新瓦片覆蓋3個關(guān)鍵步驟,專業(yè)人員常采用全局替代式更新方法來保障三維瓦片完整正確。然而,該方式忽略了已有三維瓦片模型基礎(chǔ),對大量已有三維模型重復(fù)冗余處理,更新代價高且效率較低,難以保障幾十公里長的鐵路隧道數(shù)字孿生模型高效實時更新。
國內(nèi)外學(xué)者針對三維瓦片模型更新方法研究主要分為替代式與漸進式兩類[2-9]。替代式研究主要聚焦在三維瓦片模型轉(zhuǎn)換[2,9],以重新處理生成等方式按周期做覆蓋性整體更新[3],這類方法能保證模型更新準(zhǔn)確性,但未充分利用已有三維瓦片基礎(chǔ),時間效率低,難以滿足數(shù)字孿生實時更新需求。漸進式方法研究一般分為縮編更新、增量制圖綜合和級聯(lián)更新[4]三類,該類方法充分利用現(xiàn)有模型數(shù)據(jù)基礎(chǔ)進行逐層級過渡更新,僅需要處理更新局部瓦片,效率較高。但縮編更新和增量制圖綜合的方式需要額外處理相鄰模型,級聯(lián)更新雖能通過樹形結(jié)構(gòu)[5-6]建立不同細(xì)節(jié)層次間的關(guān)聯(lián)[7],但主要針對非二進制瓦片,難以直接適用于數(shù)字孿生鐵路三維瓦片快速更新。以級聯(lián)更新為基礎(chǔ),選用國際開放地理空間信息聯(lián)盟標(biāo)準(zhǔn)三維瓦片數(shù)據(jù)結(jié)構(gòu)3D Tiles[10]作為結(jié)構(gòu)基礎(chǔ),定義并描述了鐵路隧道數(shù)字孿生模型多細(xì)節(jié)層次劃分,設(shè)計了適用于瓦片更新的索引結(jié)構(gòu),并基于級聯(lián)更新提出隧道構(gòu)件級數(shù)字孿生模型在三維瓦片數(shù)據(jù)結(jié)構(gòu)中的漸進式更新方法。
鐵路隧道多細(xì)節(jié)層次三維瓦片結(jié)構(gòu)設(shè)計思路如下:1)為確定三維瓦片更新的層級范圍,劃分鐵路隧道的多細(xì)節(jié)層次;2)針對瓦片中結(jié)構(gòu)復(fù)雜難以更新的問題,拓展三維瓦片數(shù)據(jù)結(jié)構(gòu),設(shè)計適用于瓦片內(nèi)構(gòu)件級模型更新的索引結(jié)構(gòu),為模型更新奠定基礎(chǔ)。
鐵路隧道數(shù)字孿生模型具有空間跨度大、幾何結(jié)構(gòu)復(fù)雜、建模參考標(biāo)準(zhǔn)細(xì)節(jié)層級單一的特點,為保證轉(zhuǎn)換后的GIS模型的高性能可視化分析應(yīng)用,需要針對幾何信息進行多細(xì)節(jié)層次處理。本文參照CRBIM1003—2017《鐵路工程信息模型表達(dá)標(biāo)準(zhǔn)1.0》[11],將模型的多細(xì)節(jié)層次定義劃為4級,分別為LOD 1、LOD 2、LOD 3和LOD 4[9]。不同細(xì)節(jié)層次鐵路隧道超前支護、初期支護、二次襯砌及隧道內(nèi)部結(jié)構(gòu)等部分構(gòu)件級模型分類如表1所示。
表1 隧道構(gòu)件級模型多細(xì)節(jié)層次劃分
現(xiàn)有三維瓦片結(jié)構(gòu)面向GPU渲染設(shè)計,采用二進制形式將多個構(gòu)件級模型的多類型信息壓縮在一起,難以準(zhǔn)確定位瓦片中存儲字節(jié)段落。為此,本文采用3D Tiles進行拓展,設(shè)計了構(gòu)件級模型與瓦片中Node結(jié)點對應(yīng)的三維瓦片數(shù)據(jù)結(jié)構(gòu)。
3D Tiles由瓦片結(jié)構(gòu)樹(Tileset)和三維瓦片(Tile)組成,其中,瓦片結(jié)構(gòu)樹記錄多細(xì)節(jié)層次信息。本文瓦片采用批量化3D模型(b3dm)格式,由瓦片頭(Header)、要素表(FeatureTable)、批量表(BatchTable)、Gltf幾部分組成,要素表、批量表記錄屬性信息,Gltf用Json加二進制(Bin)存儲圖形信息。瓦片中構(gòu)件級模型的圖形信息與屬性信息通過batchId值關(guān)聯(lián)。本文提出了存儲在瓦片結(jié)構(gòu)樹節(jié)點中的瓦片索引(TileIndex),作為節(jié)點中瓦片更新的索引。
本文設(shè)計的瓦片索引,記錄隧道構(gòu)件級模型及其對應(yīng)的Node結(jié)點信息,作為瓦片內(nèi)構(gòu)件級模型更新的查詢依據(jù)。瓦片中Gltf使用對象類記錄模型信息。其中,Buffer對象中記錄了點位、法線、紋理坐標(biāo)等二進制數(shù)據(jù);BufferView對象記錄Buffer對象下標(biāo)與二進制數(shù)據(jù)段的起點、長度、基本類型;Accessor對象記錄BufferView對象下標(biāo)、數(shù)據(jù)類型和數(shù)量;Mesh對象記錄Accessor對象索引下標(biāo),標(biāo)明組成面元的位置、法線等信息;Node對象可記錄多個Mesh對象下標(biāo)等信息;Scene對象是場景加載入口,記錄包含的Node結(jié)點下標(biāo)。對象類之間通過索引下標(biāo)層層嵌套實現(xiàn)模型表達(dá)。本文將隧道構(gòu)件級模型與瓦片中Node結(jié)點對象映射并記錄在索引中。在索引結(jié)構(gòu)中,PartsLength記錄瓦片中存儲的構(gòu)件級模型個數(shù),Children數(shù)組中存儲構(gòu)件級模型的唯一構(gòu)件編碼(UUID)及瓦片中其對應(yīng)的LOD等級、Node序列值、batchId值。若Node序列值為-1,表明瓦片中不存儲該構(gòu)件,但瓦片所在樹節(jié)點中存有該構(gòu)件的空間范圍。構(gòu)件級模型在瓦片與瓦片索引間的關(guān)聯(lián)通過存儲的Node序列值實現(xiàn),如圖1所示。
圖1 瓦片與瓦片索引間的關(guān)聯(lián)關(guān)系
本文提出的漸進式更新方法分三步,首先根據(jù)更新信息查找到更新的葉子節(jié)點位置,其次更新節(jié)點中瓦片,最后在結(jié)構(gòu)樹中向上逐層更新多細(xì)節(jié)層次索引信息。該方法解決了瓦片內(nèi)更新問題,同時能保證構(gòu)件級模型更新前后不同層級間模型信息的一致性。更新流程如圖2所示,實線箭頭代表概念層面的模型更新方向,虛線箭頭代表物理層面的具體實現(xiàn)過程。
圖2 構(gòu)件級模型漸進式更新流程框架
2.2.1 層級索引更新算法 模型更新過程中一般需要依據(jù)變更信息完成變化檢測操作實現(xiàn)要素匹配[4],而鐵路隧道構(gòu)件級模型具有設(shè)計定義的唯一標(biāo)識符構(gòu)件編碼(UUID),編碼中包含類別等語義信息,可以作為更新查找的依據(jù)。
更新時考慮以下條件:一是不同細(xì)節(jié)層次間空間拓?fù)潢P(guān)系一致性,父節(jié)點空間范圍包括子節(jié)點;二是模型在不同層次中的版本一致性;三是為提高瓦片渲染效率減少內(nèi)存消耗,設(shè)定父節(jié)點包含的子節(jié)點個數(shù)與瓦片中包含的構(gòu)件級模型數(shù)目閾值,超出時創(chuàng)建新節(jié)點,根節(jié)點的子節(jié)點數(shù)目無限制;四是節(jié)點中存儲同類構(gòu)件級模型,并依據(jù)隧道構(gòu)件幾何表達(dá)精度確定更新層次。針對鐵路隧道構(gòu)件級孿生模型更新中可能出現(xiàn)的情境,多細(xì)節(jié)層次更新操作可分為刪除、修改和插入3種類型,多細(xì)節(jié)層次更新算法概述如下。
1)輸入更新模型與更新構(gòu)件編碼。
2)從結(jié)構(gòu)樹根節(jié)點查詢,查找至葉子節(jié)點。以瓦片索引中的構(gòu)件編碼確定更新模型所處節(jié)點位置。若插入時查找失敗,創(chuàng)建新的節(jié)點。
3)節(jié)點中執(zhí)行不同類型的更新操作,同步更新瓦片與瓦片索引。
4)根據(jù)更新的構(gòu)件級模型需要展示的細(xì)節(jié)層次,向上查找父節(jié)點執(zhí)行更新,重復(fù)步驟3)中工作,直至不滿足展示條件。
當(dāng)多細(xì)節(jié)層次瓦片數(shù)據(jù)中執(zhí)行插入操作且已存在模型同類別節(jié)點時,插入操作有6種情形,如圖3所示。插入構(gòu)件級模型的空間范圍僅被一個瓦片包含或相交,若瓦片存儲數(shù)目未達(dá)閾值,插入;已達(dá)上限,瓦片一分為二。若模型與瓦片空間范圍無重疊,查找最鄰近瓦片,若其數(shù)目未超閾值,插入;已達(dá)閾值,創(chuàng)建新瓦片。若模型空間范圍與多個瓦片有交集,最鄰近瓦片中構(gòu)件級模型未超閾值,插入其中;若最鄰近的瓦片中構(gòu)件已達(dá)閾值,選擇最鄰近與次臨近瓦片分裂成3個。以構(gòu)件級模型與瓦片的重疊體積最大為最鄰近瓦片選取原則。瓦片分裂采用空間聚類方法劃分,以重疊(Overlap)、覆蓋(Overlay)和瓦片空間范圍形狀(Shape)的均值為評價指標(biāo)(公式1[12])。其中,Shape是構(gòu)件級模型插入瓦片后瓦片三維柯西值的增加值,Metric值最小為最優(yōu)結(jié)果。若葉子節(jié)點中瓦片分裂,向父節(jié)點傳送新的節(jié)點信息,若父節(jié)點中子節(jié)點數(shù)量上溢,對父節(jié)點執(zhí)行分裂操作。父節(jié)點分裂的最小單位為子節(jié)點的空間范圍,分裂后的父節(jié)點根據(jù)空間包絡(luò)關(guān)系重新確定子節(jié)點。
圖3 瓦片中插入構(gòu)件級模型示意圖
(1)
2.2.2 三維瓦片更新算法 本文提出的瓦片更新主要原理如圖4所示,圖4中展示了瓦片和瓦片索引的存儲內(nèi)容。首先通過更新信息中的隧道構(gòu)件編碼值匹配瓦片索引中對象,獲取其對應(yīng)的Node序列值,根據(jù)瓦片中Node數(shù)組下標(biāo),確定變更的數(shù)據(jù)位置,在內(nèi)存中完成數(shù)據(jù)更新,再更新瓦片中長度、模型對應(yīng)的二進制數(shù)據(jù)等描述信息,同時更新瓦片索引中的相關(guān)信息,保證更新后瓦片中構(gòu)件級模型與瓦片索引信息間的對應(yīng)關(guān)系不變。
圖4 三維瓦片更新流程圖
瓦片中模型的更新可分解為插入、刪除、修改3種基本操作。插入操作先解析模型信息,在Scene場景中存儲新構(gòu)件級模型對應(yīng)的Node序列值,在瓦片索引中添加插入構(gòu)件級模型的相關(guān)信息。刪除操作在瓦片索引中匹配待刪除模型的構(gòu)件編碼,根據(jù)對應(yīng)的Node序列值從不同的對象類數(shù)組中剔除相應(yīng)對象,若對象位于數(shù)組中非末端位置,遍歷后續(xù)對象類數(shù)組,更新相應(yīng)索引值,同時更新瓦片索引,剔除待刪除構(gòu)件級模型的相關(guān)信息。修改操作根據(jù)瓦片索引查找瓦片中對應(yīng)的Node對象,移除原構(gòu)件級模型對應(yīng)數(shù)據(jù),在原位置插入新數(shù)據(jù),完成Buffer對象總長度的更新,如圖5所示,同時更新瓦片索引。
圖5 瓦片修改過程
以典型大型鐵路隧道中正洞與平導(dǎo)中截取的部分構(gòu)件級模型數(shù)據(jù)為實驗對象,已有3D Tiles格式數(shù)據(jù)424 MB,更新的構(gòu)件級模型數(shù)據(jù)格式為Bentley的.dgn格式,將更新的模型幾何數(shù)據(jù)以構(gòu)件為單位轉(zhuǎn)換為通用的OBJ格式,語義屬性信息轉(zhuǎn)換為.csv格式,數(shù)據(jù)量為21.3 KB,作為更新的輸入信息,實驗使用Intel(R) Core(TM) i7-8750H@ 2.20GHz中央處理器,32 GB內(nèi)存,基于Microsoft Visual Studio 2019,引用nlohmann/json庫和tinyobjloader庫實現(xiàn),設(shè)定瓦片中存儲構(gòu)件級模型數(shù)目閾值為10。
從原始數(shù)據(jù)集中抽取正洞二襯模型,作為瓦片中數(shù)據(jù)插入與刪除的驗證數(shù)據(jù);從模型變更信息中抽取了因平導(dǎo)施工時周圍地質(zhì)環(huán)境與設(shè)計參考資料不符而產(chǎn)生變更的模型,作為瓦片修改的驗證數(shù)據(jù)。以本文方法與替代式更新方法對抽取數(shù)據(jù)進行8次實驗,記錄了2種方法的處理時長。得到的瓦片更新結(jié)果中,去掉偏差較大的最大最小值,取其余6次結(jié)果的均值作為平均處理時長,處理結(jié)果如圖6所示。
圖6 瓦片更新結(jié)果
圖6中表格記錄了本文方法與替代式更新方法的平均處理時長。插入操作中,本文方法效率更高,其僅需在原瓦片基礎(chǔ)上增加新信息,替代式更新要將瓦片中所有構(gòu)件級模型重新處理。刪除操作中,本文方法僅需57 ms,與替代式相比具有充足的優(yōu)越性。修改操作中,本文方法耗時更長,原因在于瓦片中有4個模型產(chǎn)生變更,算法對該瓦片修改4次,而替代式的方法只對瓦片執(zhí)行1次。但替代式更新方法除需輸入待更新的構(gòu)件級模型外,仍需人工搜尋瓦片中其余模型,這部分時間并未統(tǒng)計在處理時長中。在實際使用情景中,人工搜尋其余構(gòu)件級模型的時長遠(yuǎn)大于瓦片執(zhí)行多次更新操作的所需時長。實際更新時,往往變更的構(gòu)件級模型僅占總模型中的小部分,因此模型瓦片總數(shù)量越大,漸進式更新方法相對節(jié)約時間愈顯著。
本文通過搭建鐵路隧道構(gòu)件級數(shù)字孿生模型原型系統(tǒng)檢驗本文更新方法的實驗效果。模型更新前后對比如圖7所示,圖7中展示了不同距離下模型更新前后的可視化結(jié)果,表明本文方法能夠保證模型更新前后的幾何、拓?fù)潢P(guān)系無誤。與整體替代式更新的方式相比,本文方法充分顧及已有三維瓦片模型基礎(chǔ),避免了大量冗余處理,有效提高了鐵路隧道構(gòu)件級數(shù)字孿生模型更新的時間效率。
圖7 多細(xì)節(jié)層次模型更新前后局部對比
本文針對鐵路隧道構(gòu)件級數(shù)字孿生模型更新過程存在的大量重復(fù)性冗余處理、更新代價高且時間效率低等關(guān)鍵問題,設(shè)計了適用于鐵路隧道構(gòu)件級模型多細(xì)節(jié)層次動態(tài)更新的三維瓦片結(jié)構(gòu),提出了一種構(gòu)件級數(shù)字孿生模型漸進式更新方法,提升了更新過程的時間效率。經(jīng)過原型系統(tǒng)驗證,結(jié)果表明本文方法充分利用已有三維瓦片數(shù)據(jù)基礎(chǔ),更新效率更高,可有效滿足鐵路隧道構(gòu)件級數(shù)字孿生模型動態(tài)更新的時效性需要。后續(xù)研究將進一步優(yōu)化更新算法,考慮采用多核并行處理和多版本追溯覆蓋等方式進一步改善方法,綜合提升鐵路隧道構(gòu)件級數(shù)字孿生模型在實際工程應(yīng)用中的動態(tài)更新效率。