金承澤
摘要:近年來,以建筑信息模型為核心的BIM(Building Information Modeling)技術(shù)的發(fā)展與應(yīng)用,在建筑行業(yè)已蔚然成風(fēng)。BIM系統(tǒng)的核心功能是提供工程模型的三維可視化。使用Web瀏覽器作為載體無插件地直接渲染BIM模型方便用戶隨時(shí)隨地瀏覽模型,極大地提高了溝通效率。但基于Web的平臺(tái)的BIM應(yīng)用功能和場景承載力較弱。本文針對BIM模型的特點(diǎn)提出LOD的優(yōu)化策略,提高了平臺(tái)的承載力?;谥鲗?shí)現(xiàn)了大規(guī)模WebBIM場景的在線剖切功能,并對場景進(jìn)行了體素化預(yù)處理。運(yùn)用體素化索引和構(gòu)件的逆索引實(shí)現(xiàn)了高效的在線碰撞檢測功能,提高了平臺(tái)的實(shí)用性。
關(guān)鍵詞:建筑信息模型(BIM) ;多分辨率網(wǎng)格(LOD); 碰撞檢測;剖切
中圖分類號:TP311? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? 文章編號:1009-3044(2019)02-0234-03
1 引言
BIM系統(tǒng)的核心功能是提供工程模型的三維可視化。但行業(yè)軟件面向設(shè)計(jì)且體量龐大,雙方要進(jìn)行交流首先要部署行業(yè)軟件,這樣不方便在用戶間進(jìn)行交互。本文基于WebGL使用three.js渲染引擎通過無插件的網(wǎng)頁直接向用戶提供模型的瀏覽與編輯服務(wù)。
出于安全角度考慮,瀏覽器能占用的系統(tǒng)資源較少。必須對動(dòng)輒幾百M(fèi)的設(shè)計(jì)文件進(jìn)行輕量化處理才能在瀏覽器中用WebGL技術(shù)直接渲染。本文對輕量級大規(guī)模WebBIM場景在線編輯的關(guān)鍵技術(shù)進(jìn)行研究,力圖解決目前WebBIM平臺(tái)承載力低且實(shí)用性不足的痛點(diǎn)問題。
2 多分辨率網(wǎng)格關(guān)鍵技術(shù)
LOD(Level Of Detail)技術(shù)是根據(jù)不同的策略,當(dāng)視點(diǎn)滿足策略規(guī)定的條件時(shí),渲染不同精度的LOD模型。LOD技術(shù)的核心是只渲染比較重要的模型。一個(gè)模型是不是重要的,可以根據(jù)這個(gè)模型在屏幕上的投影(包圍盒)尺寸來確定。距離觀察視點(diǎn)近、看得清就認(rèn)為相對比較重要。一般會(huì)綜合考慮構(gòu)件的包圍盒尺寸和距離來決定構(gòu)件的渲染精度。通??梢杂媒M成構(gòu)件的三角面片數(shù)除以包圍盒尺寸作為尺寸依據(jù),并用尺寸依據(jù)和包圍盒與視點(diǎn)的歐式距離的比值來定義模型的渲染精度。
大規(guī)模場景的特殊性在于構(gòu)件數(shù)量多且網(wǎng)格拓?fù)鋸?fù)雜。如果做處理一個(gè)構(gòu)件就會(huì)帶來一次GPU drawcall。這會(huì)顯著地降低設(shè)備的漫游幀率。對于性能較差的移動(dòng)端會(huì)暴露得更加明顯。對于大規(guī)模場景,一般會(huì)將同材質(zhì)的網(wǎng)格合并,當(dāng)作一張網(wǎng)格交給GPU處理。但單純地合并不能解決場景中三角面片過多的問題。WebBIM應(yīng)用占用的內(nèi)存與場景同時(shí)渲染的三角面片總數(shù)正相關(guān)。如果內(nèi)存占用超過瀏覽器的限制,瀏覽器將直接殺掉渲染進(jìn)程使WebBIM應(yīng)用崩潰。這是使用多分辨率網(wǎng)格來降低場景同時(shí)渲染面片總數(shù)的主要原因。因此,最關(guān)鍵的矛盾暴露了:要通過網(wǎng)格合并來保證幀率,又要使用多分辨率網(wǎng)格隨著用戶的漫游及時(shí)地更改場景中的網(wǎng)格。只要更改一個(gè)構(gòu)件的網(wǎng)格,就要把合并后的網(wǎng)格打散重組一次。頻繁地更改構(gòu)件精度同樣會(huì)引起幀率的明顯降低或內(nèi)存的急劇抖動(dòng)導(dǎo)致崩潰。
經(jīng)過對BIM構(gòu)件的分析,本文認(rèn)為現(xiàn)在主流框架結(jié)構(gòu)建筑的支承部分主要由柱、梁、板以及剪力墻等構(gòu)成。這幾類構(gòu)件作為建筑物的骨架,數(shù)量多且體積較大、容易被注意。但是這類構(gòu)件的網(wǎng)格拓?fù)鋮s比較簡單,三角面片數(shù)量較少。但對于通風(fēng)、供暖、電水管以及建筑設(shè)備之類的構(gòu)件,通常體積不大卻占用了較多的三角面片。
經(jīng)過上面的分析,本文不對所有的構(gòu)件適用多分辨率網(wǎng)格,在場景中合并總量較多但面片簡單的柱梁墻板類結(jié)構(gòu)支承構(gòu)件的網(wǎng)格后直接渲染。對前文提到的尺寸依據(jù)較大的,例如根據(jù)場景的構(gòu)件總量設(shè)定參考值,設(shè)為15%。只對尺寸依據(jù)排在前15%的構(gòu)件適用多分辨率網(wǎng)格。此外,在筆者進(jìn)行模型處理的過程中發(fā)現(xiàn)了一類比較特別的板件,在IFC(Industry Foundation Classes)標(biāo)準(zhǔn)中將其歸類為IfcPlate,這類板件外形類似長方體,但內(nèi)部網(wǎng)格拓?fù)浔容^復(fù)雜,該類別一般表示室內(nèi)隔熱空心板件或幕墻。對于這類構(gòu)件,使用OBB方向包圍盒來替代Hoppe[1]的基于邊折疊的一般網(wǎng)格簡化法能夠最大限度地保持構(gòu)件的外形并減少表達(dá)構(gòu)件的三角面片數(shù)。本文在場景預(yù)處理生成多分辨率網(wǎng)格時(shí)會(huì)專門處理這類構(gòu)件。
最后,在設(shè)計(jì)網(wǎng)格調(diào)度策略時(shí)本文著重考慮了用戶的漫游行為。如果用戶漫游速度比較慢,且持續(xù)性比較差,一般不持續(xù)漫游超過2秒。本文認(rèn)為此時(shí)用戶對視點(diǎn)周邊構(gòu)件特別感興趣。這時(shí)提高視點(diǎn)周邊構(gòu)件網(wǎng)格精度的更新頻率。如果用戶持續(xù)漫游超過2秒,則認(rèn)為用戶對周邊構(gòu)件不感興趣,暫停更新視點(diǎn)周邊的構(gòu)件網(wǎng)格。
3 輕量化網(wǎng)格碰撞檢測關(guān)鍵技術(shù)
為提高大規(guī)模WebBIM平臺(tái)的實(shí)用性,本文的WebBIM平臺(tái)提供構(gòu)件之間的干涉碰撞檢測功能。WebBIM主要檢查模型的現(xiàn)有狀態(tài),找出當(dāng)前場景中所有發(fā)生碰撞的構(gòu)件對并其進(jìn)行索引,提供便捷的導(dǎo)航功能使得用戶能夠快速定位到場景中發(fā)生碰撞的構(gòu)件。在Web端實(shí)現(xiàn)的碰撞檢測功能能夠方便設(shè)計(jì)單位、業(yè)主方、施工單位和監(jiān)理單位的溝通。
WebBIM是模型的消費(fèi)者,平臺(tái)渲染的模型的總體架構(gòu)已經(jīng)完成。平臺(tái)僅承擔(dān)很少或不承擔(dān)BIM模型修改工作,這意味著盡管需要處理的構(gòu)件組數(shù)很多,場景中主要構(gòu)件的位置是確定的。既然大多數(shù)構(gòu)件位置基本確定,就可以在渲染前對場景進(jìn)行體素化[3]并創(chuàng)建大規(guī)模WebBIM場景的體素化索引以及構(gòu)件的逆索引。
體素化就是把場景的包圍盒按照選定的尺度均勻剖分成立方體,每個(gè)立方體稱為體素。本文希望多數(shù)體素中含有的構(gòu)件數(shù)目不超過3個(gè)。我們就可以通過構(gòu)件頂點(diǎn)的位置確定某個(gè)體素有哪些構(gòu)件,并進(jìn)一步確認(rèn)一個(gè)構(gòu)件占用了哪些體素。運(yùn)用這個(gè)關(guān)系,可以直接確定一個(gè)構(gòu)件的周圍有哪些構(gòu)件。對場景體素化的過程已經(jīng)在渲染前的預(yù)處理階段完成,因此在WebBIM場景中真正執(zhí)行碰撞檢測的時(shí)候可直接篩選出既定構(gòu)件的鄰接構(gòu)件。從而高效地進(jìn)行查找。
對場景進(jìn)行體素化的難點(diǎn)在于難以選取一個(gè)合適的體素尺寸。本文受建筑設(shè)計(jì)的模數(shù)理念啟發(fā)來迭代確定體素的尺寸。模數(shù)是建筑設(shè)計(jì)中常用的基本單位。如100mm,大多數(shù)建筑構(gòu)件的尺寸是100mm的整數(shù)倍。設(shè)項(xiàng)目中獨(dú)立構(gòu)件數(shù)目為N,則場景包圍盒的初始最長邊應(yīng)當(dāng)劃分U個(gè)體素。
確定了最長邊體素總量之后,體素的尺寸就用最長邊長除以U確定。這時(shí)把構(gòu)件按照頂點(diǎn)坐標(biāo)填入體素得到表達(dá)一個(gè)體素中有哪些構(gòu)件的體素化索引,接著把不包含構(gòu)件的體素從索引表中剔除。然后對體素尺寸進(jìn)行初次校驗(yàn)。本文升序排列每個(gè)體素中的構(gòu)件數(shù)量,取0.9倍數(shù)組長度減1的構(gòu)件數(shù)目進(jìn)行校驗(yàn)。如果其值為1,則通過校驗(yàn)。這說明有百分之九十的體素中只包含一個(gè)構(gòu)件。如果沒有通過,則檢查0.8倍數(shù)組長度減1,如果為2則通過校驗(yàn)。否則認(rèn)為校驗(yàn)不通過,將最長邊劃分體素?cái)?shù)加10重新進(jìn)行校驗(yàn)。如果不是第一次校驗(yàn),除了檢查體素中的構(gòu)件分布外還要檢查總記錄條數(shù)。本文規(guī)定獨(dú)立構(gòu)件數(shù)為N的場景體素索引長度不能超過
方才介紹的方法能夠取得較好的體素尺寸。本文還要解決一個(gè)體素化引起問題:同一體素中會(huì)有構(gòu)件尺寸差異過大的情況。單體素中可能會(huì)包含一根柱子和三個(gè)消防噴頭。消防噴頭的面片十分復(fù)雜但包圍盒體積僅為柱子的幾十分之一。在精確地檢測兩個(gè)構(gòu)件是否干涉前,本文采用AABB包圍盒先行測試,直接剔除同一體素中明顯不相交的構(gòu)件對,顯著地提升了場景構(gòu)件的檢測效率。
WebBIM是基于WebGL渲染的場景。場景中的構(gòu)件均由三角形組成。精確的碰撞檢測結(jié)果是根據(jù)構(gòu)件對的最近三角面片是否碰撞確定的。但JavaScript目前未有成熟的計(jì)算幾何庫,我們需要自行實(shí)現(xiàn)三角面片之間的距離算法。筆者通過擴(kuò)展了平面Voronoi域的概念來找出兩個(gè)三角形之間的最近點(diǎn)對。此方法涉及較多的空間向量叉積運(yùn)算。本文在計(jì)算性能較差的前端使用拉格朗日恒等式用向量內(nèi)積簡化了叉積計(jì)算,提高了計(jì)算效率。
4 輕量化場景剖切關(guān)鍵技術(shù)
用戶希望通過WebBIM平臺(tái)實(shí)現(xiàn)移除視線遮擋物的功能。即希望查看位于部分構(gòu)件之后的構(gòu)件。例如,希望拆掉屋頂,看到房屋的平面布置。或是希望看到墻面后的房間布置圖。總之,用戶希望將精力集中在感興趣的部分空間。這個(gè)需求的本質(zhì)是在場景中去除不感興趣的構(gòu)件。在建筑設(shè)計(jì)表達(dá)中,有剖面圖的概念。對于比較復(fù)雜的設(shè)計(jì),例如室內(nèi)樓梯的布置,采用傳統(tǒng)的平面圖、立面圖不足以足夠明確地表達(dá)設(shè)計(jì)人員的意圖,需要在相應(yīng)的樓梯間位置增加一個(gè)剖視圖來把設(shè)計(jì)表達(dá)清楚。在我們的場景中也可以類似地運(yùn)用這樣的概念,為用戶提供一個(gè)靈活操控的平面,我們將隱藏全部平面上側(cè)的構(gòu)件。
在第二節(jié)中本文已經(jīng)述及,在輕量化WebBIM場景中不宜頻繁更改網(wǎng)格中的構(gòu)件。因此實(shí)現(xiàn)剖切功能不宜在WebBIM場景中真正對網(wǎng)格進(jìn)行剖分。如果對網(wǎng)格進(jìn)行在線剖分,不僅要進(jìn)行繁重的網(wǎng)格重構(gòu)計(jì)算還難以將剖切功能關(guān)閉后還原網(wǎng)格的初始形態(tài)。
本文利用可編程著色器找到每個(gè)復(fù)合幾何體位于剖面上方的點(diǎn)對應(yīng)的像素,直接丟棄全部該像素的后續(xù)操作。如此我們在場景中就不會(huì)看到處在剖切面之上的像素,呈現(xiàn)出來的就自然是剖面后原本被遮擋的構(gòu)件。
如圖1所示,在渲染管線中光柵化形成的片元會(huì)逐一傳入片元著色器中。著色器將決定每個(gè)片元的顏色后將結(jié)果送入顏色緩沖區(qū),也就是即將渲染的部分。我們可以通過GLSL來對片元著色器進(jìn)行編程遴選出我們需要渲染的像素進(jìn)一步處理,否則將其丟棄。
計(jì)算時(shí)只需要把確定平面的四個(gè)參數(shù)組成的向量p=(a,b,c,d)與片元著色器中表示片元所對應(yīng)場景空間位置的分量vPosVec4=(x,y,z,w)做一個(gè)內(nèi)積。如果
5 實(shí)驗(yàn)驗(yàn)證
本實(shí)驗(yàn)采用首鋼智慧城市項(xiàng)目提供的Revit模型來進(jìn)行。該Revit模型文件達(dá)1.41GB,三角面片數(shù)量達(dá)2000萬余,構(gòu)件總數(shù)達(dá)3萬5千余。Web端是通過一臺(tái)配置為Intel(R) Core(TM) i5-2400 CPU @3.10GHz處理器、8.0GB內(nèi)存、NVIDIA GeForce GTX1060顯卡的PC上訪問。在沒有使用本文敘述的多分辨率網(wǎng)格時(shí),加載該模型時(shí)WebBIM平臺(tái)直接崩潰。筆者部署了本文敘述的大規(guī)模場景輕量級在線互動(dòng)編輯技術(shù)后,成功渲染了該模型,并且漫游時(shí)的平均幀率大于24。開啟輕量化在線剖切后在其中漫游,幀率沒有受到顯著影響??梢娫诖笠?guī)模WebBIM場景中應(yīng)用可編程著色器實(shí)現(xiàn)剖切功能的優(yōu)越性能。通過應(yīng)用本文提出的WebBIM輕量級在線互動(dòng)編輯技術(shù)確實(shí)提高了平臺(tái)的承載力并對平臺(tái)進(jìn)行了實(shí)用功能擴(kuò)充。
6 結(jié)論
本文介紹了在WebBIM平臺(tái)渲染大規(guī)模場景會(huì)面臨的技術(shù)瓶頸——瀏覽器的資源限制,以及通過多分辨率網(wǎng)格技術(shù)來降低場景同時(shí)渲染的三角面片總數(shù)來提高場景承載力的優(yōu)化方案,還介紹了在Web平臺(tái)實(shí)現(xiàn)兩個(gè)BIM系統(tǒng)的實(shí)用功能,剖切與碰撞檢測的關(guān)鍵技術(shù)??v觀全文,有如下一些關(guān)鍵技術(shù)優(yōu)化點(diǎn):
(1)為了保證平臺(tái)的渲染幀率,需要對建筑構(gòu)件進(jìn)行分類,只對少部分構(gòu)件復(fù)雜的構(gòu)件應(yīng)用多分辨率網(wǎng)格。
(2)對于特殊的板類構(gòu)件,如中的藍(lán)色幕墻,使用OBB包圍盒更好的替代邊塌陷等通用網(wǎng)格壓縮法。
(3)調(diào)度不同精度的構(gòu)件的策略要考慮用戶的漫游習(xí)慣,用戶的持續(xù)漫游時(shí)間是較好的參考指標(biāo)。
(4)在線碰撞檢測宜做好在線預(yù)處理,使用場景體素化索引和構(gòu)件的逆索引可以快速確定一個(gè)構(gòu)件周圍的構(gòu)件。
(5)對于建筑構(gòu)件大小差異過大的問題,宜結(jié)合使用體素化與AABB包圍盒。
(6)通過可編程著色器運(yùn)用GPU的高性能圖形處理能力來控制像素的顯示來實(shí)現(xiàn)剖切,而不是實(shí)際對網(wǎng)格進(jìn)行剖分。
使用上述關(guān)鍵技術(shù)能夠顯著地提高WebBIM平臺(tái)的模型承載力并提高平臺(tái)的實(shí)用性。
參考文獻(xiàn):
[1] Hugues Hoppe, Tony DeRose, Tom Duchamp, John McDonald, Werner Stuetzle: "Mesh Optimization". SIGGRAPH '93, the 20th annual conference on Computer graphics and interactive techniques,19-26.
[2] 張東培,謝寧,劉小軍, 等. 網(wǎng)上大規(guī)模地下空間的輕量級實(shí)時(shí)繪制系統(tǒng)[J].計(jì)算機(jī)科學(xué)與探索,2015(9):1034-1043,2015.
[3] 劉小軍,張東培,謝寧, 等.大規(guī)模地下空間在線展示關(guān)鍵技術(shù)[J].光學(xué)精密工程,2015,23(3).