從事建築行業也有一段時間,知道了整個建築建設的大概流程:初設、設計、施工交付到后期運營,信息化有個關鍵技術就是模型的輕量化。
我們的BIM設計人員主要使用Revit 進行三維設計,這里主要是分享基於revit的輕量化實現。實現路徑很曲折,先后從uintiy 轉到webgl的threejs.
一、幾種模型的文件格式
FBX
FBX格式都是三維通用模型格式,基本主流的三維設計軟件都可以導出導入FBX,他們主要區別是FBX包含動畫、材質特性、貼圖、骨骼動畫、燈光、攝像機等信息。revit 可以直接導出FBX,通過加載這個文件,3DMAX、UNITY都可以載入進行處理,經過一些測試,3dmax2020可以直接載入rvt文件,可以按照類別、族等來合並模型從而減少模型文件的大小,當然也可在3dmax中進行再次處理,比如圖元合並、去除重復頂點、減少mesh等操作從而進一步減少模型體積,一般來說如果有專業的3dmax美術人員可以提供簡模+貼圖。3dmax 導入的RVT文件可以直接附帶顏色,還原度比較好。
文件導入UNITY中往往會丟失很多材質,結果顯示的都為灰白色,如圖:
因為沒搞過unity,期間也做了各種掙扎,查了很多資料,主要的因素好像是這些材質不是標准材質,需要在3DMAX中轉換為標准材質,也有說unity的版本不支持或者重新關聯,總之我沒有解決這個問題,只能在unity重新賦予材質。
IFC
為建築行業發布的建築產品數據表達標准。目前, FME2013 IFC讀模塊支持2x,2x2,和2x3版本的IFC規范。使用了面向對象、范化的數據描述語言EXPRESS 語言,具體的數據格式網上有很多介紹,這里就不在贅述。revit 可以直接導出IFC格式文件,但是3dmax和uintiy 不能直接支持此文件格式。unity市場有個插件BIM Tridify可以將revit轉換至uinity上,按照IFC的分類對應,材質、數據保留的也很好,不過是通過雲端中轉數據。
github上有個開源的BIMSERVER,使用的是JAVA,支持在線轉換發布RVT文件。服務端對文件解析並轉換為IFC通過文件數據庫存儲,展現使用的是bimsufer,是基於xeogl引擎開發,不過項目作者不打算繼續維護了,估計是開源項目收益太小,目前主要在開發 xeokit,這個兩個項目的定位是一樣的,但 xeokit 商用要收費,一次性收 €2999。有能力的同學可以在這基礎上進行二次開發。我部署了一套,服務端的還好說,只是模型展示的功能比較單一,沒有定位、漫游、測量等這個常用功能需要進行二次開發,xeogl說明資源很少,需要自己慢慢摸索。
BIMSERVER:https://github.com/opensourceBIM/BIMserver
OBJ
OBJ文件是Alias|Wavefront公司為它的一套基於工作站的3D建模和動畫軟件"Advanced Visualizer"開發的一種標准3D模型文件格式,不包含動畫、材質特性、貼圖路徑、動力學、粒子等信息。OBJ也是比較通用的文件格式,很單純的描述了模型的頂點、貼圖坐標、法線坐標等等清晰簡單高效。自定義的數據格式可以參照這種數據格式表達。
GITF/GIB
GLTF代表Graphics Language Transmission Format(圖形語言傳輸格式)。這種跨平台格式已成為Web上的3D對象標准。它由OpenGL和Vulkan背后的3D圖形標准組織Khronos所定義,這使得GLTF基本上成為3D模型的JPG格式:Web導出的通用標准。GLTF主要包括兩部分,一部分JSON文件描述場景結構,另一部分為二進制文件描述幾何信息
此外還有DWG\DAE\3DS等需求模型文件格式,都是各個繪圖專業軟件的文件格式。
二、UINITY輕量化
我也不太清楚怎么就出現了輕量化引擎這個說法,可能是給不明白的人聽的吧,顯的高大上。倒不如說怎么把專業的繪圖文件轉換為更小更輕的文件展示,把各繪圖軟件的成果統一到一個平台一種格式,理想很好,現實很骨感。每個廠商都想統一市場、統一標准,可是它能嗎,更何況還有多版本兼容性的問題,所以才有各種行業協會制定標准讓大家遵守,but..
先開始使用Unity作為開發工具的原因是一款成熟的游戲引擎,資源教程多,更重要的是能支持PC,WEB,手機端,一套代碼多端使用,可以方便擴展減少工作量,實現的大概流程:
- 直接解析rvt文件不太現實,只能通過revti接口進行二次開發,revit 提供了IexportContext接口可以導出view\element\mesh等信息,這里只提取了每個構件的屬性信息,按照標高形成構件樹
- 經過3dmax對FBX模型文件處理后在導入unity進行開發,模型文件最好不要超過100m,否則會卡死,超過100m最好按專業把模型分成多個文件,不需要查看構件數據的可以合並。導入unity中最大的問題就是材質丟失問題,我遇到的主要是管線材質丟失,始終沒有什么好的解決方法。
- 導入到unity后,剩下的工作就是開發對模型操作的功能,基本包括模型的漫游、定位、高亮、測量等功能,導出webgl的還需要提供外部調用的接口函數。對於大模型三角面比較多的導出webgl后瀏覽器往往會內存溢出。導出客戶端形式體驗是非常好的。
總的來說:
如果產品需要的是展示效果,管理功能沒那么多的,可以考慮使用uinity這條路,unity今年針對AEC行業推出了新軟件 reflect,貌似可以做到revit與客戶端實時同步。
如果需要集成大量的管理功能來做平台系統,最好選擇webgl,優缺點就是B/S與C/S的區別