張毅 趙京勝 神洲
關(guān)鍵詞 標(biāo)準(zhǔn) 存儲格式 優(yōu)化
1引言
BIM 全稱“Building Information Modeling”,即建筑信息模型,其是建筑學(xué)、工程學(xué)及土木工程的新工具,由Autodesk 公司率先提出,已經(jīng)在全球范圍的建筑業(yè)內(nèi)得到廣泛認(rèn)可。它可以形容以三維圖形為主,與物件導(dǎo)向、建筑學(xué)有關(guān)的電腦輔助設(shè)計(jì)。在BIM 建筑數(shù)據(jù)傳遞的過程中,各種專業(yè)和各種BIM 數(shù)據(jù)描述形式都存在差異,如IFC 格式數(shù)據(jù)中的一種交換格式被廣泛應(yīng)用于各種建筑領(lǐng)域的數(shù)據(jù)傳遞[1] 。
三維模型輕量化主要包含兩個方面,即模型輕量化顯示和模型文件轉(zhuǎn)換[2] 。常見的模型處理方法有:(1) 圖元合并,其應(yīng)用于大模型結(jié)構(gòu)比較復(fù)雜,頂點(diǎn)、面比較數(shù)據(jù)比較大,可以通過算法和根據(jù)權(quán)重剔除相應(yīng)的頂點(diǎn)、面,從而到達(dá)輕量化模型效果;(2)場景八叉樹劃分,八叉樹可以快速剔除不可見圖元,減少進(jìn)入渲染區(qū)域的繪制對象;(3)幾何對象構(gòu)件對象化,即相同形狀的幾何對象不做多次拷貝,大模型相同幾何體只做一個加載,只做相同模型構(gòu)件移動、旋轉(zhuǎn)、縮放,最終模型文件和瀏覽器內(nèi)存得以明顯減小;(4)Lod,即模型可以設(shè)置Lod,根據(jù)距離、級別差異加載不同復(fù)雜度的結(jié)構(gòu)模型;(5)模型文件壓縮,即三維模型stl、obj、3ds、obj、json 等文件格式算法壓縮。
2IFC在建筑領(lǐng)域中的應(yīng)用
目前,IFC 標(biāo)準(zhǔn)格式文件通常為特定的商業(yè)交易雙方交換信息[3] 。同時,IFC 標(biāo)準(zhǔn)格式文件可以歸檔項(xiàng)目信息,它的應(yīng)用頻率會在設(shè)計(jì)、采購和施工階段逐步增加,并作為長期保存和運(yùn)營目的的“竣工”信息集合。建筑信息建模工具軟件供應(yīng)商包括模型創(chuàng)作、設(shè)計(jì)、模擬和分析、查看等,將為最終用戶提供接口,以某種IFC 格式導(dǎo)出、導(dǎo)入和傳輸數(shù)據(jù)[4] 。國內(nèi)在基于IFC 標(biāo)準(zhǔn)的基礎(chǔ)上做了大量工作,如4D 施工管理系統(tǒng)、智能建筑消防管理系統(tǒng)、IFC 建筑幾何表達(dá)等。此外,也有不少學(xué)者探索利用WebGL 技術(shù)建設(shè)建筑平臺,如拱壩工程的三維可視化網(wǎng)絡(luò)平臺、WebGL 與IFC 的建筑可視化分析方法等。
3IFC格式說明
若對IFC 文件進(jìn)行存儲上的優(yōu)化,首先就要了解IFC 文件的構(gòu)成。IFC 模型文件存儲的層次結(jié)構(gòu)與DIKW 體系類似,其中包含資源層(Resource Layer)、核心層(Kernel Layer)、交互層(Shared Layer)和領(lǐng)域?qū)樱―omain Layer)四個層次。各層次結(jié)構(gòu)內(nèi)的實(shí)體之間既可以相互引用屬性,也可以被上層結(jié)構(gòu)引用,但一般不允許下層結(jié)構(gòu)引用,即引用實(shí)體資源原則上只能自上而下,或在同層進(jìn)行。
資源層(Resource Layer)是IFC 文件存儲中的基礎(chǔ)層。其主要存儲在建造建筑過程中產(chǎn)生的基本實(shí)體對象和具體結(jié)構(gòu)數(shù)據(jù)。核心層(Kernel Layer) 是IFC 文件存儲中的第二層。其是實(shí)體與實(shí)體之間的數(shù)據(jù)進(jìn)行描述的關(guān)鍵。交互層(Shared Layer)是IFC 模型文件存儲的第三層。其是實(shí)現(xiàn)不同的建筑三維設(shè)計(jì)軟件的數(shù)據(jù)交換的關(guān)鍵,相關(guān)數(shù)據(jù)只可被同屬于該層的數(shù)據(jù)引用或是被領(lǐng)域?qū)右茫换硬荒苤苯右煤诵膶雍唾Y源層的相關(guān)數(shù)據(jù)。領(lǐng)域?qū)樱―omainLayer)是IFC 文件存儲中的頂層。其屬于專業(yè)性的數(shù)據(jù)層,具有各個專業(yè)的特征和屬性,如在IFC 手冊中就定義了建筑、電力、基礎(chǔ)、結(jié)構(gòu)、設(shè)備等9 個專業(yè)化的數(shù)據(jù)領(lǐng)域集的數(shù)據(jù)。
4優(yōu)化算法的實(shí)現(xiàn)
優(yōu)化IFC 文件的主要目的是減小IFC 文件的大小,因?yàn)樵趯?shí)際的存儲中IFC 文件非常大[5] 。造成該問題的主要原因是重復(fù)的實(shí)體實(shí)例的出現(xiàn)。為了優(yōu)化算法,本文采用幾何對象構(gòu)件化,且相同形狀的幾何對象不做多次拷貝,大模型相同幾何體只做一個加載,只做相同模型構(gòu)件的移動、旋轉(zhuǎn)、縮放。
首先,對任一IFC 文件進(jìn)行IFC 實(shí)體出現(xiàn)頻率分析,并繪制實(shí)體頻率直方圖(圖1)。根據(jù)實(shí)體頻率直方圖,明顯可以看出存在大量的重復(fù)出現(xiàn)的IFC 實(shí)體對象。
為了分析該IFC 文件,可以抽取任一相同實(shí)體,如抽取的實(shí)體為零件加勁板IfcDiscreteAccessory,其除了ID 和位置信息外與其他實(shí)體的屬性都相同(圖2),換言之所有實(shí)體都可以簡化為三個實(shí)體,然后進(jìn)行不同的坐標(biāo)轉(zhuǎn)化,即為另外一個實(shí)體。
根于上述特性,我們可以選用圖3 的拓?fù)渑判颍═opological sort) 根據(jù)節(jié)點(diǎn)的依賴關(guān)系對圖進(jìn)行排序。這表明在圖層次結(jié)構(gòu)中沒有父節(jié)點(diǎn)或父節(jié)點(diǎn)最高的節(jié)點(diǎn)將是已排序列表的第一個節(jié)點(diǎn)。因此,由于一些節(jié)點(diǎn)可以是兄弟節(jié)點(diǎn),所以同一個圖有幾種可能的拓?fù)渑判?,并且它們在圖中具有相同的層次位置。
對IFC 文件中的實(shí)體實(shí)例進(jìn)行逐行定義(圖4),節(jié)點(diǎn)引用其他節(jié)點(diǎn),保持“依賴性較低”的實(shí)體排序,以消除重復(fù)的實(shí)體是一個很好的解決方案。因此,最獨(dú)立的實(shí)體被排在第一位,下一個實(shí)例便可以引用它們。
我們參照IFC 文件里的一個實(shí)體之間的引用關(guān)系,文件行中的#1 和#3 的IFCCARTESIANPOINT 的內(nèi)容一致,可以相互替換使用,通過實(shí)例的id 來調(diào)用它們,#1 將被存儲并添加到新文件中。當(dāng)#3 出現(xiàn)時,它將被映射到已經(jīng)注冊的類似實(shí)例,所以是#1。在#4處,使用#3 作為實(shí)例映射中的鍵,該鍵被映射到#1,因此在存儲文件的過程中,就可以減少一個存儲的IFC實(shí)體對象,此方法基于拓?fù)渑判虻倪壿嬏幚?。因此,由于一些?jié)點(diǎn)可以是兄弟節(jié)點(diǎn),所以同一個圖有幾種可能的拓?fù)漕愋?,并且由于它們在圖中具有相同的層次位置(或程度),因此它們?nèi)匀粚儆谂判虻乃枷搿?/p>
在IfcOpenShell 中,map_value 函數(shù)允許遞歸遍歷實(shí)體實(shí)例的屬性值。它接受一個IFC 實(shí)例的屬性作為輸入:如果屬性是一個列表或元組,那么它將遞歸地調(diào)用自己;如果屬性是python 值,那么它將輸出該值,屬性則引用另一個IFC 實(shí)例。
首先,map_value 函數(shù)可以是一個等價于基本python 類型的IFC 實(shí)例,如IfcBoolean 或IfcInteger。在該情況下,通過重新創(chuàng)建索引為0 的實(shí)體及其值來返回。在其他情況下,當(dāng)屬性是一個IFC 實(shí)例時,map_value 函數(shù)將創(chuàng)建該屬性。但是,map_value 函數(shù)是通過在instance_mapping 映射變量中取其值來創(chuàng)建的,由于實(shí)體已經(jīng)按照拓?fù)渑判蜻M(jìn)行了排序,因此可以肯定引用已經(jīng)注冊。否則,若沒有拓?fù)渑判颍瑢?shí)體將不能確定地注冊。#1 將被存儲并添加到新文件中,#2 相同與其一致。當(dāng)#3 出現(xiàn)時,它將被映射到已經(jīng)注冊的類似實(shí)例,所以是#1。在#4 處,map_value 函數(shù)將使用#3 作為實(shí)例映射中的鍵,該鍵被映射到#1,因此#1 將被添加到新文件中,而不是#3。
按照上述方法處理IFC 文件來對比實(shí)體出現(xiàn)頻率,該IFC 文件過濾了大量的冗余實(shí)體,因此文件存儲體積減小。
5結(jié)論