王 琪,李智杰,李昌華,張 頡
(西安建筑科技大學(xué) 信息與控制工程學(xué)院,西安 710055)
建筑信息模型(BIM,building information model)在建筑的設(shè)計(jì)、施工、運(yùn)維的全生命周期中具有極高的應(yīng)用價(jià)值[1]。BIM技術(shù)在國(guó)內(nèi)外都有良好的發(fā)展,但是對(duì)于目前建筑業(yè)的需要,建筑體量也是愈來(lái)愈龐大,更多的信息數(shù)據(jù)導(dǎo)致BIM軟件對(duì)于計(jì)算機(jī)的軟硬件要求很高,而且BIM的實(shí)現(xiàn)大多是基于C/S架構(gòu)的,需要用計(jì)算機(jī)操作并且安裝專業(yè)的BIM軟件,這嚴(yán)重影響了BIM的發(fā)展。隨著Web端以及3D渲染引擎的迅速崛起,對(duì)BIM模型的Web端渲染提供了一種可行性方案[2]。在信息化社會(huì),移動(dòng)端已成為主流,所以將BIM模型以B/S架構(gòu)可視化渲染,并擺脫專有軟件、終端平臺(tái)的約束,這對(duì)于BIM的推動(dòng)以及輕量化研究都有重大意義[3]。因此,對(duì)于BIM模型數(shù)據(jù)的輕量化以及將其放置在Web端進(jìn)行渲染優(yōu)化都是十分必要的。
目前在Web端實(shí)現(xiàn)BIM模型輕量化展示以及場(chǎng)景渲染控制,國(guó)內(nèi)外研發(fā)部門和學(xué)者已有相關(guān)研究。Autodesk所研發(fā)的Forge云平臺(tái)以及廣聯(lián)達(dá)推出的協(xié)筑平臺(tái)都包含了BIM模型網(wǎng)頁(yè)端瀏覽功能,但是不提供用戶需要的開(kāi)發(fā)接口且存在敏感數(shù)據(jù)安全隱患問(wèn)題。為此,學(xué)者們通過(guò)建立私有云的方式改善了該問(wèn)題,文獻(xiàn)[4-6]實(shí)現(xiàn)了BIM模型在Web端展示,并提供了模型輕量化的實(shí)現(xiàn)方案,但是對(duì)于模型數(shù)據(jù)的優(yōu)化以及場(chǎng)景渲染效果不佳。文獻(xiàn)[7-8]從模型三角面片入手,提出了模型簡(jiǎn)化邊折疊算法,將三角網(wǎng)格簡(jiǎn)化降低面片復(fù)雜度,但是影響了模型外觀。文獻(xiàn)[9-10]通過(guò)剔除視野范圍內(nèi)的不可見(jiàn)構(gòu)件,降低了場(chǎng)景的GPU開(kāi)銷,然而剔除計(jì)算過(guò)程又極其復(fù)雜,嚴(yán)重降低了渲染速度,文獻(xiàn)[11]提出了八叉樹(shù)剔除算法,解決了這一難題,然而構(gòu)建八叉樹(shù)的過(guò)程會(huì)極大的消耗存儲(chǔ)空間。
鑒于此,本文提出了一種基于Web的BIM模型輕量化展示及渲染控制方法,對(duì)于模型數(shù)據(jù)優(yōu)化,通過(guò)冗余頂點(diǎn)刪除法和Draco算法來(lái)壓縮模型數(shù)據(jù),在確保保真度的前提下,將模型數(shù)據(jù)體量以及網(wǎng)頁(yè)端加載時(shí)間降低;對(duì)于渲染優(yōu)化,提出了一種LOD與自適應(yīng)渲染相結(jié)合的LOD-AD優(yōu)化算法來(lái)對(duì)場(chǎng)景內(nèi)構(gòu)件進(jìn)行渲染控制,有效剔除低重要度構(gòu)件。實(shí)驗(yàn)結(jié)果表明,本文方法極大壓縮了模型體量,并且在幀率較低的情況下自適應(yīng)選擇次要圖元的剔除以及重要圖元的優(yōu)先渲染,在不影響模型外觀情況下渲染流暢度大大提升,從而實(shí)現(xiàn)三維模型在Web端的輕量化顯示及渲染優(yōu)化。
Revit是Autodesk公司推出的一款BIM軟件,在建筑業(yè)內(nèi)盛行應(yīng)用它來(lái)作為BIM建模和信息化管理工具,具有較好的數(shù)據(jù)完整性和兼容性,能夠很好的達(dá)到工作需求,并且Revit提供了完善的開(kāi)發(fā)接口,供用戶自行開(kāi)發(fā)需要的功能。Revit模型中含有大量的數(shù)據(jù)結(jié)構(gòu),其中包含了模型的名稱、位置、幾何、屬性信息等,當(dāng)然也包含了很多冗余信息,因此提取重要信息減少模型數(shù)據(jù)以實(shí)現(xiàn)模型的輕量化具有一定的工程意義。本文主要實(shí)現(xiàn)模型中的幾何信息以及屬性信息的提取,并將它們轉(zhuǎn)化為輕量化數(shù)據(jù)結(jié)構(gòu)。
幾何信息中含有大量的組成建筑圖元的面、點(diǎn)、邊等信息,屬性信息中含有模型的材質(zhì)、紋理、標(biāo)高等信息[12]。對(duì)于幾何信息,將這些點(diǎn)、線、面轉(zhuǎn)化為渲染所需的最基本單位——三角面片的形式存儲(chǔ),包括三角面片的頂點(diǎn)坐標(biāo)、頂點(diǎn)索引、法線向量、法線向量索引、幾何體中心、唯一標(biāo)識(shí)符ID[13];對(duì)于屬性信息,可以在單獨(dú)導(dǎo)出材質(zhì)貼圖后,直接提取出模型的name、userData、標(biāo)識(shí)符ID,以上的幾何信息和屬性信息,都以數(shù)組的形式存儲(chǔ)以此來(lái)建立輕量化數(shù)據(jù)結(jié)構(gòu)。
在輕量化實(shí)現(xiàn)過(guò)程中,將Revit模型展現(xiàn)至Web端,需要一個(gè)中間格式作為橋梁。glTF(Graphics Language Transmission Format,圖形語(yǔ)言傳輸格式)是跨平臺(tái)的3D對(duì)象通用標(biāo)準(zhǔn)[14],該格式在Web端的解析與加載更加便捷迅速,因此本文采用glTF格式作為Revit和Web端的傳輸格式。
對(duì)于Revit數(shù)據(jù)的導(dǎo)出,可利用其強(qiáng)大的開(kāi)發(fā)接口,采用Revit二次開(kāi)發(fā)技術(shù)實(shí)現(xiàn)模型信息的提取,其中IExpotContext接口中含有所有模型數(shù)據(jù)的導(dǎo)出函數(shù),因此本文通過(guò)調(diào)用該接口中含有的函數(shù)來(lái)完成模型信息的提取并轉(zhuǎn)換為glTF格式,具體的Revit模型的數(shù)據(jù)導(dǎo)出流程如圖1所示。
圖1 Revit模型的數(shù)據(jù)導(dǎo)出
如圖1所示,數(shù)據(jù)在導(dǎo)出之前會(huì)首先判斷當(dāng)前的Revit是否在三維視圖中,若不是會(huì)報(bào)錯(cuò)并終止模型插件的繼續(xù)運(yùn)行,若在三維視圖中,模型會(huì)通過(guò)OnElementBegin()以及OnIstanceBegin()函數(shù)遍歷界面中所有的元素(element)和族實(shí)例(Instance),然后利用OnPolymesh()和OnMaterial()函數(shù)來(lái)提取所有元素的幾何、屬性信息,最后調(diào)用OnFaceEnd()函數(shù)完成所有幾何體的循環(huán),將模型信息導(dǎo)出為glTF格式。
雖然建立了輕量化數(shù)據(jù)結(jié)構(gòu),但模型文件中依舊存在著冗余數(shù)據(jù),降低了模型解析率和傳輸速度,導(dǎo)致加載緩慢甚至加載失敗,嚴(yán)重影響用戶體驗(yàn),因此模型數(shù)據(jù)輕量化尤為重要,需要對(duì)glTF模型文件作進(jìn)一步優(yōu)化處理。在glTF文件中包含了大量的三角面片,而三角面片是由無(wú)數(shù)個(gè)頂點(diǎn)信息組成,頂點(diǎn)之間也是依靠連接關(guān)系相連,因此模型的壓縮可以從頂點(diǎn)刪除、頂點(diǎn)連接關(guān)系壓縮方面來(lái)研究。本文主要通過(guò)冗余頂點(diǎn)刪除法和Draco網(wǎng)格壓縮算法實(shí)現(xiàn)模型數(shù)據(jù)的優(yōu)化。
1)冗余頂點(diǎn)刪除法。
Revit構(gòu)件的幾何信息在保存至glTF文件中均以三角面片形式存儲(chǔ),三角面片都是由頂點(diǎn)信息組成,以減少運(yùn)行內(nèi)存的使用空間,但是文件內(nèi)部依舊含有大量的冗余頂點(diǎn),例如模型邊界某頂點(diǎn)位于其相鄰兩個(gè)頂點(diǎn)之間且有可能三點(diǎn)共線或者該點(diǎn)與另外兩定點(diǎn)之間的夾角在一定范圍內(nèi)并不影響模型外觀的展示,則該頂點(diǎn)可稱為冗余頂點(diǎn)。如圖2所示,點(diǎn)E在邊BC上,點(diǎn)D在邊BC下且角D接近180°,此時(shí)點(diǎn)E與D都是冗余頂點(diǎn),刪除后模型外觀也基本不變。
圖2 冗余頂點(diǎn)刪除過(guò)程圖
(1)
設(shè)置閾值ω,若α≥ω,則表明該頂點(diǎn)影響因子很小,可將改點(diǎn)視為冗余頂點(diǎn)并剔除該頂點(diǎn);反之,則保留該頂點(diǎn)。三維模型中的剔除原理類似,將頂點(diǎn)相鄰三條邊向量化并判斷夾角與閾值的大小關(guān)系進(jìn)行剔除即可。
2)Draco壓縮算法。
Draco是由谷歌提出的一種用于壓縮和解壓三維幾何網(wǎng)格數(shù)據(jù)的庫(kù)[15]。其算法主要原理是將三維模型在傳輸或存儲(chǔ)的過(guò)程中,壓縮模型中的數(shù)據(jù)信息。Draco中主要使用了經(jīng)典三維網(wǎng)格壓縮算法Edgebreaker[16]。該算法的網(wǎng)格訪問(wèn)是基于區(qū)域增長(zhǎng)原理的,在訪問(wèn)網(wǎng)格的過(guò)程中,需始終維持一個(gè)由邊組成的有向邊界,該邊界將網(wǎng)格劃分為兩類,即已訪問(wèn)和未訪問(wèn)部分,并且每訪問(wèn)一個(gè)多邊形,則會(huì)輸出一個(gè)該多邊形與邊界的拓?fù)潢P(guān)系操作符,并將該多邊形納為已編碼部分,至此三角面的壓縮完成[17]。如圖3表示了壓縮過(guò)程中的五種基本操作符。
圖3 Edgebreaker的五種基本操作符
在圖中,X表示當(dāng)前遍歷的三角形,v表示被遍歷三角形的第三頂點(diǎn)。圖3(a)中的操作符L表示左側(cè)三角形已經(jīng)被遍歷過(guò),右側(cè)三角形沒(méi)有被遍歷過(guò);圖3(b)中的操作符C表示左右兩側(cè)三角形都沒(méi)有被遍歷過(guò);圖3(c)中的操作符R表示右側(cè)的三角形已被遍歷過(guò),而左側(cè)的三角形沒(méi)有被遍歷過(guò);圖3(d)中的操作符S表示左右兩側(cè)三角形都沒(méi)有被遍歷過(guò);圖3(e)中的操作符E表示左右兩側(cè)三角形都被遍歷過(guò)。
通過(guò)這五種基本操作符描述了利用有向環(huán)形將網(wǎng)格分割成數(shù)條路徑的方法,圖4是對(duì)一個(gè)不規(guī)則圖形的三角網(wǎng)格模型進(jìn)行Edgebreaker壓縮的示意圖,圖中的箭頭表示壓縮時(shí)所經(jīng)過(guò)的路徑。
圖4 Edgebreaker網(wǎng)格分割路徑示例
本文利用冗余頂點(diǎn)刪除法和Draco壓縮算法將提取出來(lái)的Revit模型數(shù)據(jù)的幾何信息進(jìn)行壓縮,降低了模型的數(shù)據(jù)體量,提高了模型文件在Web端的傳輸速度,并在此基礎(chǔ)上保證模型的高保真度。
glTF數(shù)據(jù)中包含的幾何數(shù)據(jù)中含有各個(gè)三角面片的局部坐標(biāo)系,而WebGL中的所有物體在全局坐標(biāo)系中都有精確的位置坐標(biāo),因此導(dǎo)出的glTF模型在Web上顯示時(shí)必須進(jìn)行坐標(biāo)系變換,坐標(biāo)變換如圖5所示。
圖5 坐標(biāo)變換
從全局坐標(biāo)系到世界坐標(biāo)系的轉(zhuǎn)變,實(shí)際是空間幾何圖形的平移、縮放與旋轉(zhuǎn)的單獨(dú)或組合變換而成[18]。兩坐標(biāo)系間的過(guò)渡矩陣計(jì)算如下:
T1=RxRyRzT
(2)
(3)
(4)
(5)
(6)
其中:假設(shè)(x1,y1,z1)為glTF格式中的局部坐標(biāo)系原點(diǎn)在Web端全局坐標(biāo)系中的坐標(biāo);局部坐標(biāo)系的Z軸垂直于地面;Y軸指向正北;Rx,Ry,Rz為繞X軸、Y軸、Z軸旋轉(zhuǎn)得到的旋轉(zhuǎn)矩陣;θx,θy,θz為旋轉(zhuǎn)后與X軸、Y軸、Z軸的交角。綜上,glTF文件中的幾何屬性可依據(jù)式(2)來(lái)完成空間坐標(biāo)系的轉(zhuǎn)換,使構(gòu)件的幾何信息能在Web端完成關(guān)系映射。
完成了Revit導(dǎo)出數(shù)據(jù)與WebGL的空間關(guān)系映射后需要將文件中的模型信息在Web端重組并展示出來(lái)。Three.js是WebGL技術(shù)的一種表現(xiàn)方式,其代碼體量小、加載迅速、操作簡(jiǎn)單[19]。因此本文選擇Three.js作為渲染框架來(lái)展示模型,基本渲染流程如圖6所示。
圖6 Three.js渲染流程圖
在三維模型顯示的過(guò)程中,首先引入Three.js及相關(guān)功能的類庫(kù),以便于開(kāi)發(fā)人員通過(guò)庫(kù)內(nèi)函數(shù)的直接調(diào)用完成場(chǎng)景中對(duì)象的創(chuàng)建;之后完成場(chǎng)景的建立并對(duì)場(chǎng)景內(nèi)的元素進(jìn)行加載,包括了設(shè)置相機(jī)屬性、燈光屬性、渲染器基本參數(shù)等;接著通過(guò)Three.js框架自帶的glTFLoader函數(shù)解析glTF文件,并將所有組成模型的三角面片轉(zhuǎn)化為對(duì)象添加至場(chǎng)景中;最后通過(guò)渲染器渲染場(chǎng)景內(nèi)所有組件元素,完成幾何模型在WebGL上的加載。
LOD(Level Of Detail,層次細(xì)節(jié))[20]是為簡(jiǎn)化場(chǎng)景中可見(jiàn)幾何體的多邊形細(xì)節(jié)而提出的一類加速算法。視覺(jué)原則中,距離視點(diǎn)越遠(yuǎn)的模型在計(jì)算機(jī)上所占面積越小,對(duì)幾何體的影響也最小,因此提出的模型繪制方法是對(duì)近距離幾何體繪制詳細(xì)的細(xì)節(jié),而對(duì)遠(yuǎn)距離的幾何體進(jìn)行簡(jiǎn)化,這便是LOD技術(shù)的原理[21]。
本文提出了一種最小包圍球的LOD優(yōu)化算法對(duì)場(chǎng)景進(jìn)行優(yōu)化,即大面片以及距離視點(diǎn)近的面片顯示渲染,而距離視點(diǎn)遠(yuǎn)以及小面片隱藏剔除。由于模型三角面片規(guī)則形狀不一,很難判斷其大小,因此可以使用最小包圍球的概念,用圓形來(lái)包圍住三角面片,通過(guò)圓形的半徑表示面片的大小。用場(chǎng)景中的三角面片最小包圍球的半徑r來(lái)表示該三角面片的大??;包圍球圓心到相機(jī)的距離d表示該三角面片距離視點(diǎn)的距離,d可通過(guò)式(7)來(lái)確定,其中(x0,y0,z0)表示相機(jī)坐標(biāo),(x,y,z)表示三角面片包圍球圓心坐標(biāo);TH表示設(shè)置的初始閾值。通過(guò)式(8)來(lái)判斷是否渲染此三角面片,當(dāng)圓形半徑與圓心到相機(jī)的距離之比小于等于閾值時(shí)隱藏且不渲染該三角面片,當(dāng)圓形半徑與圓心到相機(jī)的距離大于閾值時(shí)顯示且渲染該三角面片。
(7)
(8)
在Web端渲染BIM模型時(shí),會(huì)占用計(jì)算機(jī)的GPU資源,其性能指標(biāo)可利用FPS(Frames per Second,幀率)來(lái)表達(dá),即GPU每秒所刷新的次數(shù),通常情況下FPS的上限值設(shè)定為60 FPS,更高的幀率可以使模型渲染更為流暢。對(duì)于Web端的模型渲染,30 FPS已能足夠流暢展示三維場(chǎng)景,更高的幀率可提高用戶使用場(chǎng)景交互功能時(shí)的體驗(yàn)感。
在自定義導(dǎo)出的glTF格式中導(dǎo)出Revit的模型Category.name來(lái)確定模型構(gòu)件類型,通過(guò)模型構(gòu)件類型的重要程度劃分模型層級(jí),引入幀率來(lái)自適應(yīng)剔除層級(jí)類型,本文設(shè)置的層級(jí)如表1所示。
表1 層級(jí)劃分
當(dāng)FPS>30,顯示所有族類型;當(dāng)15≤FPS≤30,加載第二層級(jí)的族類型;當(dāng)FPS<15嚴(yán)重影響渲染流暢度,僅加載第三層級(jí)的族類型。
LOD場(chǎng)景控制算法雖然能渲染剔除遠(yuǎn)距離小構(gòu)件三角面片,但是對(duì)于大場(chǎng)景構(gòu)件的優(yōu)化卻很有限,幀率并不能達(dá)到理想狀態(tài)。因此本文結(jié)合自適應(yīng)層級(jí)劃分和LOD優(yōu)化算法,提出LOD-AD場(chǎng)景控制算法,先進(jìn)行LOD算法優(yōu)化后再通過(guò)幀率監(jiān)測(cè)來(lái)自適應(yīng)層級(jí)劃分剔除,從而達(dá)到最優(yōu)場(chǎng)景渲染效果。具體算法原理如圖7所示。
圖7 算法原理圖
為了驗(yàn)證模型數(shù)據(jù)優(yōu)化和場(chǎng)景渲染控制方法的可行性,本文選擇5個(gè)不同體量大小的BIM模型組成實(shí)驗(yàn)數(shù)據(jù)進(jìn)行驗(yàn)證,模型基本信息如表2所示。實(shí)驗(yàn)采用Intel(R) Core(TM) i5-5257U@ 2.70 GHz、8 GB內(nèi)存以及64位Windows10操作系統(tǒng)的筆記本電腦,基于Chromr瀏覽器實(shí)現(xiàn)。
表2 模型基本信息
針對(duì)原模型體量過(guò)大,在Web端重組加載時(shí)間過(guò)長(zhǎng)的問(wèn)題,提出以glTF為中間格式,并采用冗余頂點(diǎn)刪除法和Draco算法來(lái)達(dá)到模型數(shù)據(jù)優(yōu)化目的。為分析模型數(shù)據(jù)優(yōu)化的有效性,通過(guò)模型數(shù)據(jù)優(yōu)化前后的體量、傳輸時(shí)間和保真度來(lái)進(jìn)行實(shí)驗(yàn)驗(yàn)證。
實(shí)驗(yàn)依據(jù)表2中的5個(gè)BIM模型為實(shí)驗(yàn)對(duì)象,使用了模型數(shù)據(jù)壓縮算法與未使用算法的模型體量對(duì)比如表3所示,模型傳輸時(shí)間對(duì)比如圖8所示。
表3 模型體量對(duì)比
圖8 模型傳輸時(shí)間對(duì)比
從表3可以看出,隨著模型的體量增大,本文的數(shù)據(jù)優(yōu)化算法效果更佳,模型體量壓縮率提高更明顯。這是由于更大體量的模型具有更多的三角面片,而本文的壓縮算法是針對(duì)三維幾何網(wǎng)格的,而網(wǎng)格正是由無(wú)數(shù)個(gè)三角面片組成。盡管不同模型壓縮率有所差別,但是該算法相較于原模型整體壓縮率均在93%以上。
從圖8的模型傳輸時(shí)間可見(jiàn),模型A~E在數(shù)據(jù)優(yōu)化后傳輸時(shí)間相較于優(yōu)化前明顯縮短。模型在網(wǎng)頁(yè)端利用GPU重組導(dǎo)出的模型數(shù)據(jù)會(huì)消耗一定時(shí)間,且體量越大的模型重組所需的時(shí)間更多,而利用數(shù)據(jù)優(yōu)化算法后的模型在Web端重組速度明顯加快,這能極大的降低計(jì)算機(jī)GPU的消耗,提升用戶的操作體驗(yàn)。
對(duì)于模型的保真度,采用數(shù)據(jù)優(yōu)化算法后的glTF文件,實(shí)現(xiàn)其在網(wǎng)頁(yè)端的重組渲染,通過(guò)對(duì)比模型數(shù)據(jù)保真度與模型渲染保真度兩方面來(lái)驗(yàn)證。
1)模型數(shù)據(jù)保真度。
在導(dǎo)出的glTF文件中,包含了模型的統(tǒng)一標(biāo)識(shí)符ID,各個(gè)構(gòu)件擁有自己的標(biāo)識(shí)符ID,在模型的幾何信息與屬性信息中都含有標(biāo)識(shí)符ID使得它們互相關(guān)聯(lián)。因此通過(guò)點(diǎn)擊構(gòu)件后,獲取鼠標(biāo)所在位置來(lái)與模型幾何信息進(jìn)行匹配,得到該構(gòu)件元素的標(biāo)識(shí)符ID,通過(guò)該ID調(diào)取出模型的屬性信息。
對(duì)于模型數(shù)據(jù)的保真度以商務(wù)樓的屋頂為例,對(duì)比Revit原模型與網(wǎng)頁(yè)端模型的屬性信息,如圖9所示。
圖9 屬性信息保真度對(duì)比
圖9(a)中的重要信息在圖9(b)中均能一一對(duì)應(yīng)(框圖標(biāo)記),由圖中的屬性信息對(duì)比可見(jiàn),數(shù)據(jù)優(yōu)化后即使信息體量減少明顯但是模型主要屬性信息并未丟失,也未出現(xiàn)信息錯(cuò)誤的情況,確保了模型信息的高保真度。
2)模型渲染保真度。
為了更好呈現(xiàn)模型渲染外觀的保真度,在導(dǎo)出glTF格式的同時(shí)還導(dǎo)出了模型的材質(zhì)貼圖,配上材質(zhì)貼圖后該模型的網(wǎng)頁(yè)端渲染和該模型的Revit原圖的對(duì)比如圖10所示。
圖10 模型外觀保真度對(duì)比圖
由圖10的模型渲染保真度對(duì)比可見(jiàn)模型外觀無(wú)明顯差異,在網(wǎng)頁(yè)端的渲染能夠很好的代替Revit建模軟件的模型展示,起到方便用戶實(shí)時(shí)查看模型的效果。
通過(guò)上述模型數(shù)據(jù)優(yōu)化可行性分析實(shí)驗(yàn)可見(jiàn),優(yōu)化后模型的壓縮及傳輸過(guò)程都有明顯改進(jìn),且保真度完好。因此,使用本文的模型數(shù)據(jù)優(yōu)化算法更有利于模型的Web端傳輸。
本文針對(duì)模型渲染后場(chǎng)景幀率過(guò)低問(wèn)題提出了LOD-AD優(yōu)化算法來(lái)對(duì)模型構(gòu)件進(jìn)行有效剔除,達(dá)到提高幀率的目的。對(duì)此,本文以構(gòu)件類型較多的辦公樓為例具體展現(xiàn)LOD-AD優(yōu)化算法的顯示效果,并以表2中的5個(gè)BIM模型作為實(shí)驗(yàn)對(duì)象,設(shè)置相同閾值和相同視距下這些對(duì)象的LOD-AD優(yōu)化后與優(yōu)化前的FPS對(duì)比,以此驗(yàn)證本文渲染控制的可行性。
選擇族類型較多的辦公樓模型為例來(lái)展現(xiàn)其顯示效果,原模型在Web端顯示以及LOD-AD場(chǎng)景控制算法優(yōu)化后顯示效果圖如圖11所示。
圖11 辦公樓模型展示
可以看出,原模型FPS在15~30之間,模型自適應(yīng)選擇第二層級(jí)渲染,剔除第二層級(jí)以外的所有族類型,從圖中可見(jiàn)圖11(a)中室內(nèi)的桌椅、室外綠化等構(gòu)件在圖11(b)中被剔除,但是模型的重要圖元如墻、屋頂、樓板等圖元顯示渲染,并且在渲染過(guò)程中剔除了遠(yuǎn)距離小構(gòu)件三角面片,依據(jù)此方法完成幀率監(jiān)測(cè)的場(chǎng)景自適應(yīng)以及遠(yuǎn)距離小面片構(gòu)件自動(dòng)剔除的控制效果,從而完成低重要度構(gòu)件剔除、高重要度構(gòu)件實(shí)時(shí)渲染,達(dá)到模型外觀保留的效果。
圖12列舉了表2中五種不同體量的建筑初始模型、使用LOD渲染控制算法模型以及LOD-AD渲染控制算法模型(閾值參數(shù)0.05,視點(diǎn)距離模型中心距離3m)的幀率比較結(jié)果。
圖12 幀率對(duì)比
可以看出,未使用任何優(yōu)化算法的初始模型,在模型面片數(shù)量較少的模型A、模型B中幀率均在30以上,能達(dá)到流暢渲染的目的,但是當(dāng)模型體量更大擁有更多的三角面片時(shí),模型幀率極低,網(wǎng)頁(yè)端渲染卡頓明顯;當(dāng)使用LOD場(chǎng)景控制算法時(shí)模型幀率相對(duì)有所改善,但是在達(dá)到模型D、模型E那樣較多三角面片組成的大體量模型時(shí),網(wǎng)頁(yè)端卡頓依舊存在;本文所提出的LOD-AD場(chǎng)景渲染控制算法相較于原模型與LOD優(yōu)化后的模型,幀率提高明顯,即使是對(duì)于模型E這樣的超大模型也依舊能保持40以上的FPS。
通過(guò)場(chǎng)景渲染控制可行性分析可知,LOD-AD控制算法不僅能確保模型外觀基本保留,而且能大幅提高幀率,對(duì)于大模型依舊能完成流暢渲染。因此,本文提出的LOD-AD渲染控制算法能有效達(dá)到場(chǎng)景渲染優(yōu)化的效果。
本文針對(duì)BIM模型體量大,在Web端模型加載緩慢及渲染卡頓等問(wèn)題,提出將glTF格式作為Revit與Web端的數(shù)據(jù)傳輸格式,進(jìn)而通過(guò)冗余頂點(diǎn)刪除法和Draco算法將glTF格式中的三維網(wǎng)格壓縮,并使用提出的LOD-AD渲染控制算法將模型場(chǎng)景中的構(gòu)件選擇性剔除及渲染。實(shí)驗(yàn)結(jié)果表明,本文提出的BIM模型輕量化展示以及渲染控制方法極大的減少了模型體量以及模型傳輸時(shí)間,保證了模型的保真度,且極大程度的提高了模型渲染效果,解決了Web端重組模型后流暢度較低的問(wèn)題。但是,本文對(duì)相機(jī)視野外的模型還可以進(jìn)一步剔除且Web端頁(yè)面仍可進(jìn)一步完善,下一步工作可通過(guò)可視域分析將不可見(jiàn)模型虛化渲染或者直接渲染剔除,借助大屏技術(shù)添加建筑施工信息監(jiān)測(cè)等功能,以期實(shí)現(xiàn)更好的輕量化顯示效果。