史瑞昌,秦 琳,朱 一
(中國鐵道科學(xué)研究院集團(tuán)有限公司 電子計(jì)算技術(shù)研究所,北京 100081)
建筑信息模型(BIM,Building Information Model)已成為工業(yè)互聯(lián)網(wǎng)在智慧建筑方向的研究熱點(diǎn),特別是BIM軟件之間的數(shù)據(jù)交換技術(shù)和Web渲染技術(shù)備受相關(guān)研究人員的關(guān)注。BuildingSMART[1]提出并成為BIM數(shù)據(jù)交換國際標(biāo)準(zhǔn)的工業(yè)基礎(chǔ)類(IFC,Industry Foundation Classes)標(biāo)準(zhǔn)[2],進(jìn)一步加快了BIM應(yīng)用的研究與成果落地。Web端BIM大場景應(yīng)用是未來發(fā)展趨勢,IFC標(biāo)準(zhǔn)在實(shí)際應(yīng)用中存在以下問題:IFC模型文件數(shù)據(jù)并非直接可渲染數(shù)據(jù),為滿足渲染要求,其數(shù)據(jù)需要經(jīng)過轉(zhuǎn)換處理;BIM場景數(shù)據(jù)體量較大時(shí),受制于網(wǎng)絡(luò)帶寬、瀏覽器性能、網(wǎng)頁渲染技術(shù)等多方面因素,Web端BIM應(yīng)用的用戶體驗(yàn)不佳。
為解決上述問題,近年來的研究主要集中在IFC模型文件數(shù)據(jù)解析與轉(zhuǎn)換優(yōu)化、BIM可視化應(yīng)用等方面。在IFC模型文件轉(zhuǎn)換方面,劉強(qiáng)等人[3]提出一種基于鍵值緩存的IFC模型文件Web應(yīng)用技術(shù),將IFC模型文件解析成JSON格式,為數(shù)據(jù)在網(wǎng)絡(luò)傳輸提供基礎(chǔ);徐照等人[4]提出一種基于WebGL的渲染方法,開發(fā)了IFC-OBJ轉(zhuǎn)換工具,但未考慮OBJ模型文件不可分割、過大時(shí)加載時(shí)間過長,甚至無法完成加載等問題。BIM可視化應(yīng)用方面,Hong-Lei Lu等人[5]在Scully T等人[6-7]提出的大模型分割策略基礎(chǔ)上考慮語義劃分,提出了基于語義對IFC大模型劃分,實(shí)現(xiàn)構(gòu)件語義劃分并對模型進(jìn)行分割后,利用空間索引完成場景加載,其劃分策略依賴語義數(shù)據(jù)集,數(shù)據(jù)集收集和語義劃分模型訓(xùn)練實(shí)現(xiàn)較為復(fù)雜,且需要為特定場景定制算法模型;李柯等人[8]提出云邊頁協(xié)同的Web端BIM多粒度在線可視化框架,定義構(gòu)件興趣度,在復(fù)雜遮擋場景中,效果不佳;劉小軍等人[9]提出一種面向手機(jī)網(wǎng)頁的大規(guī)模Web端BIM場景實(shí)時(shí)漫游算法,該算法從構(gòu)件實(shí)例冗余、構(gòu)件及空間混合索引、多粒度數(shù)據(jù)動態(tài)裝/卸載策略3個(gè)方面對場景進(jìn)行管理和加載,其空間劃分剔除算法,僅適合遮擋關(guān)系較強(qiáng)的構(gòu)件,需要提前設(shè)定遮擋物,設(shè)定遮擋物工作量較大,且通用性受限;BIMServer[10]為開源的IFC模型文件處理、Web端BIM場景加載工具集,作為BuildingSMART推薦的工具集,將IFC模型文件層次關(guān)系、幾何特性、材質(zhì)、屬性等數(shù)據(jù)分開加載,在一定程度上解決了BIM大場景應(yīng)用問題,但未考慮構(gòu)件加載優(yōu)先級?;谏鲜鲅芯?,本文提出基于IFC標(biāo)準(zhǔn)的面向需求的動態(tài)加載(IFC based Demand-Oriented Dynamic Loading,DODL)方法。對IFC數(shù)據(jù)進(jìn)行解析轉(zhuǎn)換,將層次關(guān)系、幾何特性、材質(zhì)、屬性等數(shù)據(jù)拆分存儲,在原數(shù)據(jù)基礎(chǔ)上,拓展輔助場景加載的字段;為優(yōu)化Web端BIM大場景加載,提出基于GPU加速實(shí)現(xiàn)構(gòu)件需求計(jì)算方法,計(jì)算需要加載的構(gòu)件集合,并利用幾何相關(guān)性設(shè)計(jì)構(gòu)件加載優(yōu)先級,計(jì)算構(gòu)件加載順序;通過網(wǎng)絡(luò)服務(wù),完成BIM大場景加載。
根據(jù)鐵路BIM應(yīng)用實(shí)際情況,BIM應(yīng)用流程可分為3部分,如圖1所示。
圖1 鐵路BIM應(yīng)用流程
建模人員使用CATIA等設(shè)計(jì)軟件完成三維模型后,導(dǎo)出IFC格式模型數(shù)據(jù),為數(shù)據(jù)共享和應(yīng)用奠定基礎(chǔ)。
讀取IFC模型文件,解析層次關(guān)系、幾何特性、材質(zhì)、屬性等數(shù)據(jù),重點(diǎn)處理無法直接渲染的拓?fù)鋷缀?,并將結(jié)構(gòu)化JSON格式數(shù)據(jù)存儲在數(shù)據(jù)庫中,為后續(xù)場景加載提供支撐。IFC模型文件無法直接用于計(jì)算機(jī)圖形渲染,需要對其進(jìn)行解析和處理,此過程耗時(shí)且對硬件資源要求較高,為減少數(shù)據(jù)處理時(shí)間,可利用云服務(wù)器資源完成此過程。
搭建Web應(yīng)用,Web端通過網(wǎng)絡(luò)服務(wù),加載BIM場景,結(jié)合鐵路業(yè)務(wù)開展應(yīng)用。
IFC模型文件處理即是對IFC模型文件解析、轉(zhuǎn)換、拆分、存儲的過程,該過程主要分為2部分:
(1)使用python腳本,制定特定類型正則表達(dá)式,過濾IFC.exp文件中的基本類型、枚舉類型、select類型、實(shí)體類型,并根據(jù)類型定義與繼承關(guān)系,生成可用于編譯的CPP文件,為IFC模型文件讀取與解析奠定基礎(chǔ);
(2)讀取IFC模型文件,根據(jù)CPP文件,在運(yùn)行時(shí)動態(tài)生成IFC實(shí)例對象,通過查詢IFC實(shí)例對象,將層次關(guān)系、幾何特性、材質(zhì)、屬性等數(shù)據(jù)進(jìn)行拆分與轉(zhuǎn)換,并將結(jié)果存儲到數(shù)據(jù)庫。
IFC實(shí)例對象拆分過程如下:
(1)為構(gòu)建模型層次關(guān)系,以IfcProject實(shí)例對象為入口,篩選IfcProduct類型實(shí)例對象,區(qū)分出空間結(jié)構(gòu)元素和非空間結(jié)構(gòu)元素(構(gòu)件節(jié)點(diǎn)),將空間結(jié)構(gòu)元素構(gòu)造為組節(jié)點(diǎn)對象,處理節(jié)點(diǎn)屬性和局部矩陣等信息,遞歸處理空間結(jié)構(gòu)元素包含的節(jié)點(diǎn)和關(guān)聯(lián)的節(jié)點(diǎn),直至非空間結(jié)構(gòu)元素的節(jié)點(diǎn);
(2)對非空間結(jié)構(gòu)元素處理,判斷其包含的Items屬性的實(shí)例類型,分別處理幾何、拓?fù)?、映射、材質(zhì)類型數(shù)據(jù),幾何和拓?fù)漕愋蛿?shù)據(jù)需要借助幾何算法庫Open CASCADE[11]實(shí)現(xiàn)幾何、拓?fù)渖膳c網(wǎng)格剖分,進(jìn)而構(gòu)造葉子節(jié)點(diǎn)存儲幾何數(shù)據(jù),并建立幾何與葉子節(jié)點(diǎn)間的關(guān)聯(lián)關(guān)系。
拆分后數(shù)據(jù)結(jié)構(gòu)如圖2所示。
圖2中字段含義如表1所示。
表1 字段含義說明
圖2 拆分后數(shù)據(jù)結(jié)構(gòu)
在網(wǎng)絡(luò)資源有限的情況下,BIM大場景無法通過一次網(wǎng)絡(luò)請求完成整個(gè)場景加載時(shí),有必要考慮構(gòu)件的加載優(yōu)先級。用戶通過計(jì)算機(jī)外設(shè)與模型進(jìn)行交互,定位到特定視角查看模型,用戶視角范圍內(nèi)的模型構(gòu)件即用戶需求的構(gòu)件,應(yīng)具有較高加載優(yōu)先級,需要優(yōu)先完成加載。
初始加載過程如下。
(1)根據(jù)模型標(biāo)識,請求模型層次關(guān)系數(shù)據(jù);從網(wǎng)絡(luò)加載層次關(guān)系;根據(jù)層次關(guān)系中葉子節(jié)點(diǎn)的box字段,構(gòu)建可用于渲染的輔助box網(wǎng)格。
(2)根據(jù)模型包圍盒初始化視角,獲取相機(jī)視錐參數(shù),進(jìn)而對場景進(jìn)行視錐剔除,得到視錐內(nèi)可見性構(gòu)件集合。
(3)綜合考慮效率與剔除精確性,采用WebGL 2.0接口,基于GPU對視錐剔除后集合box網(wǎng)格進(jìn)行渲染查詢,計(jì)算視錐體內(nèi)box網(wǎng)格是否被遮擋。
(4)過濾出未遮擋構(gòu)件集合,即需要加載的構(gòu)件集合,根據(jù)構(gòu)件幾何唯一標(biāo)識與優(yōu)先級,完成加載。初始加載過程如圖3所示。用戶交互改變視角時(shí),與初始加載不同,不需要網(wǎng)絡(luò)請求模型、解析層次關(guān)系和構(gòu)造可渲染box網(wǎng)格,只需要從視角剔除開始,加載未加載的構(gòu)件數(shù)據(jù)。
圖3 基于GPU加速的構(gòu)件需求計(jì)算流程
構(gòu)件自身的幾何數(shù)據(jù)量比其他數(shù)據(jù)量大,因此,幾何特性是影響構(gòu)件加載優(yōu)先級主要因素之一,例如,包圍盒box的大小、復(fù)雜度等,其中,復(fù)雜度是指構(gòu)件幾何網(wǎng)格數(shù)據(jù)存儲所占用的空間情況。本文層次關(guān)系定義中,bits字段可用于描述復(fù)雜度,單位為字節(jié)(byte)。因幾何特性是影響加載優(yōu)先級的主要因素,在設(shè)計(jì)構(gòu)件加載優(yōu)先級時(shí),需重點(diǎn)關(guān)注幾何特性。
幾何相關(guān)性(CG,Correlation of Geometry)是構(gòu)件包圍盒體積與其復(fù)雜度的比值,表示為
公式(1)中,CG(ci)為構(gòu)件ci的幾何相關(guān)性;bits(ci)為構(gòu)件ci的復(fù)雜度; volume(ci)為構(gòu)件ci的包圍盒box的體積;CG(ci) 的物理意義為單位字節(jié)傳輸空間體積大小。 bits(ci)越小、 volume(ci) 越大,則CG(ci)越大,加載到的數(shù)據(jù)對最后渲染到屏幕的影響越大,對用戶的視覺影響越大,因此,加載優(yōu)先級越高;反之,加載優(yōu)先級越低。
具體計(jì)算方法如下:借助幾何算法庫Open CASCADE,以不被遮擋的構(gòu)件集合作為輸入,遍歷所有構(gòu)件,利用式(1)計(jì)算幾何相關(guān)性,并根據(jù)計(jì)算結(jié)果對構(gòu)件集合由大到小排序,得到有序的加載構(gòu)件集合?;趲缀蜗嚓P(guān)性的構(gòu)件加載優(yōu)先級計(jì)算步驟如下。
步驟 1:輸入無序構(gòu)建集合C={ci,i=0, 1,…,M}。
步驟 2:若集合C中有元素ci,則取出;若無,則結(jié)束。
步驟 3:查看ci剔除標(biāo)識,若是,執(zhí)行步驟 4;若不是,則跳轉(zhuǎn)到步驟 5。
步驟 4:計(jì)算ci的幾何相關(guān)性。
步驟 5:得出c′i,插入、排序到集合C′。
步驟 6:重復(fù)Step 2,最終得到有序構(gòu)建集合C′={c′j,j=0, 1,…,N}。
為驗(yàn)證本文提出的DODL方法的可用性和有效性,設(shè)定BIM場景加載過程中評價(jià)指標(biāo),搭建實(shí)驗(yàn)環(huán)境。選取公開數(shù)據(jù)集Open IFC Model Repositor[12]中IFC模型文件作為實(shí)驗(yàn)樣本,借助幾何算法庫Open CASCADE,進(jìn)行仿真實(shí)驗(yàn),并與使用BIMServer開源服務(wù)器平臺加載的方法進(jìn)行比較。使用3個(gè)不同的IFC模型文件,選取初始加載構(gòu)件個(gè)數(shù)、內(nèi)存占用和初始加載時(shí)間作為性能評價(jià)指標(biāo)。實(shí)驗(yàn)使用的IFC模型文件信息如表2所示,圖4(a)~圖4(c)分別為3個(gè)IFC模型文件默認(rèn)視角下的渲染效果。
表2 IFC模型文件信息
圖4 實(shí)驗(yàn)用IFC模型文件默認(rèn)視角下的渲染效果
實(shí)驗(yàn)軟/硬件環(huán)境配置:Intel(R) Core(TM)i7-11800H 處理器,16.0 GB內(nèi)存,NVIDIA RTX3060顯卡,64 bit Windows 11專業(yè)版21H2系統(tǒng),Chrome版本為106.0.524 9.103,對比組BIMServer 的版本為1.5.182。
初始加載構(gòu)件數(shù),即初始視角情景下,需要加載構(gòu)件的個(gè)數(shù),單位為個(gè)。3個(gè)IFC模型文件在DODL方法下初始加載構(gòu)件數(shù)分別為1 252、2 178、4 547,相比BIMServer加載方法下的初始加載構(gòu)件數(shù)5 786、7 637、27 958,分別減少了78%、71%、83%,如圖5所示。實(shí)驗(yàn)結(jié)果表明,DODL方法可有效減少初始加載構(gòu)件數(shù)。
圖5 初始加載構(gòu)件個(gè)數(shù)比較
占用內(nèi)存,即初始視角情景下,初始加載完成后,瀏覽器占用的內(nèi)存,單位為MB。3個(gè)IFC模型文件在DODL方法下占用內(nèi)存分別為125、156、346,相比BIMServer加載方法下占用的內(nèi)存218、287、580,分別減少了42%、45%、40%,如圖6所示。實(shí)驗(yàn)結(jié)果表明,DODL方法可有效減少初始加載時(shí)占用的內(nèi)存。
圖6 占用內(nèi)存比較
初始化加載時(shí)間,即初始視角情景下,從網(wǎng)絡(luò)請求開始至可見的構(gòu)件加載完成時(shí)止,所用時(shí)間長短,單位為ms。3個(gè)IFC模型文件在DODL方法下初始化加載時(shí)間分別為2 641、4 631、8 867,相比BIMServer加載方法下的初始化加載時(shí)間13 105、77 656、41 853,分別縮短了79%、94%、78%,如圖7所示。實(shí)驗(yàn)結(jié)果表明,DODL方法可有效縮短初始化加載時(shí)間,減少用戶因場景加載而等待的時(shí)間,提高了用戶體驗(yàn)。
圖7 初始加載時(shí)間比較
本文研究IFC模型文件處理、面向需求的動態(tài)加載方法,提出基于IFC的面向需求的動態(tài)加載方法,在IFC數(shù)據(jù)拆分存儲基礎(chǔ)上,通過對視錐內(nèi)構(gòu)件進(jìn)行過濾、排序,實(shí)現(xiàn)基于IFC標(biāo)準(zhǔn)的面向需求的動態(tài)加載。通過實(shí)驗(yàn),證明了所提方法的可行性和可用性,可改善用戶體驗(yàn),也可推廣至其他非IFC格式的模型文件加載鐵路BIM的應(yīng)用場景。
在Web端加載BIM場景過程中,仍存在需要進(jìn)一步解決的問題,例如:IFC模型文件處理過程耗時(shí)較長;模型場景加載的過程中,初始加載時(shí)受初始視角影響,不同初始視角下,加載構(gòu)件數(shù)、初始加載時(shí)間、占用內(nèi)存等均有不同。因此,今后將進(jìn)一步研究縮短文件處理時(shí)間及最優(yōu)化選取視角的方法。