近幾年,隨著WebGL標準被廣泛接受,涌現出許多基于HTML5的開源三維顯示引擎,如threejs、scenejs等。尤其threejs使用非常廣泛,一方面由于其使用門檻較低,另一方面是其支持若干種三維文件格式,如3ds、obj、dae、fbx等。對于中小規模的三維模型,使用threejs可以快速搭建一個基于Web的模型瀏覽應用。但對于模型構件比較多的應用場景,如BIM應用,直接使用threejs必然會遇到性能瓶頸,因此,必須針對threejs進行深度定制,甚至從零開始。
對threejs深入研究后,我們決定在threejs的基礎上進行擴展,主要從以下幾個方面展開:
1)場景空間八叉樹劃分
空間八叉樹是一種高效的三維空間數據組織方式,使用八叉樹可以快速剔除不可見圖元,減少進入渲染區域的繪制對象。這部分技術在桌面端的三維顯示引擎已非常成熟。
2)增量繪制
繪制效率跟場景中繪制對象的數量緊密相關。對象越多,繪制效率越低。而繪制效率又會影響用戶的交互體驗。因此,在繪制圖元達到一定數量的時候,需要使用增量繪制技術,減少等待時間,提高交互響應速度。
3)繪制對象內存池
瀏覽器分配給Javascript虛擬機的內存是有限的,當內存超出限制,整個頁面就會崩潰。這是由于Javascript是一種運行時解釋性語言,自身具有垃圾回收機制,當分配的Javascript對象過多,垃圾回收會占用大量時間,影響瀏覽器響應。使用對象池可以最大限度的減少對象分配,降低內存使用,從而減少垃圾回收產生的負擔。
4)圖元合并
圖元個數越多,顯示效率越低。這是由于每繪制一個圖元就會進行一次draw call。而在瀏覽器端的draw call比在桌面端draw call的調用代價更大。合并圖元可以減少draw call,從而提示顯示效率。
2、模型文件轉換
基于桌面的三維模型大多數采用單文件或幾個文件來存儲模型信息,比如幾何信息、材質信息、紋理貼圖及屬性。這樣的組織方式便于桌面程序管理,也便于用戶之間以文件的方式傳輸數據。但單個大文件卻不利于網絡端傳輸,尤其是從服務器端下載一個三維模型,使其在瀏覽器中顯示。一方面,大的文件傳輸需要更多的等待時間,另一方面,用戶需等待模型下載完成后才能解析顯示。 沒有人愿意等待,因此,我們需要定義適合網絡傳輸的大模型組織方式,把原始的模型文件轉換為適合網絡傳輸和輕量化顯示的文件格式。
1)構建“模型流”
與在線視頻播放一樣,用戶不需要下載和緩存完整的視頻才能觀看,只要點擊播放后邊下載邊緩存邊播放。以模型流的方式,用戶可以實時看到已經下載的部分,對顯示影響較大的部分先下載先顯示,細節部分可以后顯示。下載過程,用戶不需要等待,可以進行其他操作。
2)幾何唯一性表達
在模型轉換過程中,把具有相同形狀的幾何對象進行唯一性表達。大的模型一般會存在相同幾何的多份拷貝,而實際上可以用相同的幾何描述不同的構件。使用相似體的識別算法可以大大減少幾何體的數量,減少模型的大小,也能減少顯示時GPU的占用。
3)數據壓縮
數據壓縮可以大大減少網絡傳輸時間,尤其對于json和幾何數據,gz算法可以達到幾倍的壓縮率。
模型輕量化顯示和模型文件轉換是BIM模型輕量化的核心技術,具有一定的技術門檻。BIMFACE本著開放的精神,把核心技術提供給廣大的BIM開發者,使得開發者即使沒有掌握任何圖形技術,也能輕松開發強大的BIM應用。
BIMFACE,與你一起開發BIM的價值!