你好,這里是BIMBOX。
今天的文章來自于我們的一位朋友,技術大牛 @Jack。他最早從室內設計專業(yè)進入BIM圈,之后又進了暖通專業(yè),還拿過兩個機械發(fā)明專利,對于模型和數(shù)據有很深的思考。
最近在我們的作者群里,Jack 分享了他使用非BIM軟件完成數(shù)據對接,做出了類似4D BIM成果的技術思路,并提出了原創(chuàng)的想法「散裝BIM」,我們覺得和上次@金戈的數(shù)模分離探索有著某種契合。
今天的內容,你讀起來會覺得很「硬」,我們建議可以不必全文一字不落的讀完,有些小節(jié)跟不上可以跳過。但如果你能硬著頭皮把這塊骨頭啃下來,一定能對 BIM 的模型和數(shù)據的關系有更深的理解。
以下是他的全文,已經和BIMBOX一起完成修改。
你好,我是Jack,一位硬核BIMer。今天我的分享是《散裝BIM——非BIM軟件的改造》,我想先從自己對目前BIM的一個思考談起。
OpenBIM 這個理念最早是由ArchiCAD的母公司圖軟公司提出來并發(fā)揚光大的,它表達的是一種開放的BIM之路?!督ㄖこ绦畔⒛P蛻媒y(tǒng)一標準》的條文說明里闡述了我國對BIM實施之路的態(tài)度:實踐證明用一款軟件、一個模型來實現(xiàn)全生命周期管理是不可能的。我國主張的方法是把整個BIM拆分成多個子模型、多種專業(yè)軟件,通過軟件之間的數(shù)據交換,來提高效率。于是,為了減少軟件或者人事成本,或者是為了保持技術優(yōu)勢,很多企業(yè)會專門設立一個研究部門負責探索「非BIM軟件」的 BIM 改造等工作。
這方面我參與過的技術探索很多,比如使用 Sketchup+Dynamic components (簡稱DC)動態(tài)組件+Profile Builder (簡稱PB)來建模,可以把模型做的快速又輕量化,同時利用 SketchUp 生成報告的功能,對DC(動態(tài)組件)進行數(shù)模分離,達到算量的目的。這里面 DC 就類似于 Revit 中的族,PB類似于 Revit 里面的 Dynamo。這種方法做出來的 Sketchup 模型大小僅僅是 Revit 模型大小的1/4,甚至更小。圖中的Revit文件為在桌子云中互相鏈接拼接而成的分工協(xié)同文件,所以作比較,得算所有文件的總大小。再比如,在工期十分緊張的情況下,我會使用 CAD 動作錄制或是宏來做,功能上等于自定義編程的建模插件,接著導入到 Revit 中做族。遇到深化問題,我就修改 CAD 模型。用這種方法,我曾經獨自在2-5天完成圖片里這種項目的暖通建模工程。于是我就思考,這種看似旁門左道的做法算什么呢?用 SketchUp 或是 Grasshopper 等非BIM軟件作為建模的方式,然后用 Revit 等BIM軟件來呈現(xiàn)?目前也有插件可以實現(xiàn)它們與Revit的實時關聯(lián)互通,是條走的通的路。為了把這個想法說清楚,就叫它散裝的BIM好了。意思是開放式的散戶、小戶型,和Revit的大戶型相比,就有了點味道。所以,對比一下以Revit等軟件為信息建模基礎的設計流程,我把它稱為:整裝BIM。與之相對的,不以Revit等軟件為信息建?;A的設計流程,我把它稱為:散裝BIM。它們的區(qū)別在于模型和數(shù)據的捆綁程度。? 整裝BIM的信息是原生裝配好的,需要我們在不同階段去分離自己需要的信息。這種方式需要熟練掌握軟件內部固定規(guī)則,遇到棘手問題時可以快速做出判斷,這個需求軟件能不能實現(xiàn),是不是需要和其他軟件協(xié)作。? 散裝BIM的信息是相對游離的,需要我們在不同階段去附加或是分離自己需要的信息,以滿足各方數(shù)據共享的需求。不同于整裝 Revit 的固定規(guī)則,我們可以根據工程各類情況和企業(yè)需求,邊設計邊思考,可以編程出這樣那樣的功能,然后展開一頓風騷走位。在多專業(yè)協(xié)作上,我必然是推崇整裝BIM的廣而全,Revit也許是大多數(shù)BIMer的信仰。但在單獨專業(yè)的內需上,我竊喜散裝BIM的專一和自由,因為它可以根據需求去做些自定義的功能或是更好的BIM,是一條開放的路。今天我會分享一個散裝BIM4D的案例,使用的軟件是建筑設計師很喜歡的 Rhino,和它搭配的參數(shù)化編程工具叫 Grasshopper(簡稱GH),如果你沒聽說過,可以把 Rhino 對標成 Revit,把 Grasshopper 對標成 Dynamo。為什么要去思考繪圖邏輯這種事情呢?因為把散裝BIM組裝到一起,需要對模型附加信息,附加信息則需要找到途徑,這個途徑的捷徑,就是順著繪圖邏輯來的。比如,對大多數(shù)2D繪圖軟件來說,繪圖邏輯是圖層,而信息附加的途徑可以是圖塊、子圖層等其他邏輯。所以為了方便走捷徑,就看繪圖邏輯,基于圖層就是最好的。當我們使用一個非BIM軟件來做散裝BIM時,需要分兩步走。? 第一步,確定軟件的繪圖邏輯,根據繪圖邏輯找到最好的數(shù)據和模型連接途徑。? 第二步,找插件或者寫程序,確定數(shù)據和模型連接的方式。前面我們說,使用 SketchUp 做散裝BIM,必須要使用動態(tài)組件。咱們就以先以它為例,梳理一下尋找連接途徑和連接方式的思路。在 SketchUp 中,在組件的內部和外部,材質優(yōu)先權不同,圖層優(yōu)先權也不同。當我們在組件內外給一個物體設置不同材質和圖層時,屬性顯示出來都是以組件外為準的。如果簡單的把圖層作為連接途徑,去對接數(shù)據和模型,就會因為組件的內外唯一性關系被干擾,導致我們繞路子。為了正向設計操作上不誤操作,信息對接得不繞路子,就需要找到優(yōu)先權最高的圖形屬性。對于 Sketchup 來說,優(yōu)先權最高的圖形屬性能夠被點開一個窗口,讓用戶注意到并使用它。SketchUp 的管理目錄就是這樣展示出來的,我們可以看出它的繪圖邏輯是組件所呈現(xiàn)出的一排排層次的關系。比如下面這張圖中的形體,是從面開始copy自身所形成多邊形體的動態(tài)組件,在管理目錄下看到組件的層次關系就是它的繪圖邏輯,比如里面的H copy 001和H copy 002,即使是復制的主體一致,因為和主體平級,在設置不同參數(shù)時也不能聯(lián)動。順藤摸瓜,動態(tài)組件的屬性編輯窗口呈現(xiàn)的就是組件的層次關系,于是,動態(tài)組件就是最優(yōu)的連接途徑,連接方式是動態(tài)組件的屬性編輯窗口,并利用其自帶的 function 達到相關功能。如果你從來沒用過 Sketchup,上面這一段不理解也沒關系,這里只是闡述一種組裝散裝BIM的思考方式。找到了連接方式和連接途徑,我們就能激發(fā)Sketchup 的BIM建模的潛力,并在最優(yōu)解的基礎上達到相應的BIM功能。4D BIM在SketchUp的實現(xiàn)方法可以是:整體大樓做一個大的組件,樓層為子組件,利用 onclick 的動態(tài)組件function,用 animation 程序的公式進行4D動畫的參數(shù)控制,如下圖簡單示意。今天要正式分享 Rhino+GH 的散裝BIM4D案例,思路也分為兩步走:要做4D BIM,最重要的工作是給模型構件附加時間信息,在GH內部直接做流水節(jié)拍相對繁瑣,就需要找到 GH 在外部讀取數(shù)據的方式。GH 里有讀取模型的電池,也有利用數(shù)據干預模型的電池組,只要解決了數(shù)據和模型的連接,就可以完成參數(shù)化驅動的4D方式。我找到的連接方式是使用 GH 插件 Lunchbox 。數(shù)據總不能一條一條地附加信息,要找到一個分類方式,再把數(shù)據精準地連接到模型對應的部分。比如,根據圖中 GH 內電池提供的功能,Rhino 可以基于圖層進行數(shù)據的對接。當然也可選擇其他的連接途徑,這部分內容我們放到結尾再詳細討論。到這一步,還不能正式開始干活,我們還需要解決標準化的問題。在 Rhino 里,確定模型和數(shù)據的連接途徑是圖層,那就要按圖層把模型做一個分類的工作。我們稱這個步驟為模型標準化。搞清楚它,即便你不理解今天的案例,也能知道目前 BIM 的癥結在哪里。需要說的是,這個步驟在「整裝BIM」里是不存在的,因為像 Revit 這樣的軟件已經有系統(tǒng)性的數(shù)據附加規(guī)則,不需要為了附加信息對模型做處理。而真正成熟的、具有正向設計能力的「散裝BIM」也是不需要「模型標準化」的,比如 SketchUp 全部用動態(tài)組件建出的BIM模型。有「模型標準化」就會有「數(shù)據標準化」,這個就不僅僅是散裝BIM的事兒了,整裝BIM也要面對。咱們先拿整裝 BIM 來解釋一下,Revit 族左側的屬性欄里,有一行一行的數(shù)據信息。如果沒有這些信息,后面分析、模擬等的BIM步驟都做不了。有時候我們需要調用的信息不是現(xiàn)成的,比如要調取主筋總數(shù)的值,那就需要用主筋間距乘以根數(shù),再來些運算其他的,這個就是對數(shù)據進行一次處理,也就是數(shù)據標準化。這個乘法只是一個簡單的例子,如果要運算的東西特別多、特別復雜,就得考慮人力成本的問題了,運算越復雜,標準化就越重要。為了使模型和數(shù)據有效達到我們的目的,目的可以是相互連接、也可以是運算,就需要解決數(shù)據和模型的標準化。具體先解決哪一個,取決于我們手里已經有哪一個標準了。? 當模型標準成熟,數(shù)據還沒有標準時,我們就得根據模型的標準去設定數(shù)據的標準。比如目的是數(shù)據連接時,也就是調整連接方式來適應已經建好的模型。? 當數(shù)據標準成熟,模型還沒有標準時,我們就得根據數(shù)據的標準去設定模型的標準。比如目的是數(shù)據連接時,也就是修改模型去適應它的數(shù)據連接方式。那么制定標準的依據是什么?是需求。
比如,我的需求是做散裝BIM4D,那就得給模型構件附加時間的信息。時間信息是可以這樣去標準化的,比如:我通過Excel內的數(shù)字序號,甚至排列的次序,或是時間點的量化處理等。而在GH內部再進行二次的數(shù)據處理。如下圖所示,左側序號可以作為時間參數(shù)輸入。前面我們說,標準化的目的是數(shù)模連接。那如果模型沒有按照圖層來建,或者構件所在的圖層不符合附加信息的要求,就得人為地把它們調整到對應的圖層上。這就是我們說的,已經有了標準的數(shù)據,要以此標準化模型。當然,在工程項目里,需求可能是來自設計師的,比如優(yōu)化方案;也可能是工程項目方的,比如做進場安排。經常發(fā)生的事就是一方要求另一方把標準改成對自己有利的。這也真是苦了專門負責數(shù)據和模型轉換的BIMer。也正是因為各方需求不同,整裝BIM的模型標準又涉及到底層的圖形邏輯,不可能因為數(shù)據標準不同,要求設計師重新做,甚至有些轉換是根本沒辦法做的。這也是為什么會去做「散裝BIM」,目的就是既可以調整數(shù)據標準,也可以調整模型標準,提高靈活性,甚至順帶對有優(yōu)勢的方面進行內部集成,提高繪圖效率。我們談到了繪圖規(guī)則,進而說了模型標準和數(shù)據標準的關系。接下來說說今天的技術實現(xiàn)部分。我面臨的實際情況是:數(shù)據是標準化的(4D時間信息用序號表示),模型需要標準化(按圖層安置各部分模型)。然后就可以考慮可視化編程了。編程要解決下面幾件事:? 圖層數(shù)量:根據構件動畫順序把圖層分為48個,以此構造數(shù)列去實現(xiàn)表格的讀取。? 參數(shù)計算:除了時間參數(shù)以外,還要計算比如成本等數(shù)據。最后,下面就是正式的可視化編程了,如果你對這部分具體的操作不感興趣,可以粗略看一下我的思路,或者直接跳過看我的總結;如果你想嘗試一下,也可以整體跟著做一遍。我們要做的就是通過實際的案例了解Grasshopper附加信息的方式。Rhino6(或者帶grasshopper的Rhino4/5)?整體的GH可視化編程結果如下圖。
由C:/路徑、根據圖層讀取,以及片體三個電池組成。目的是為了減少數(shù)據的Bug,同時使正確的數(shù)據持續(xù)地對準正確的模型圖層。由C:/路徑、Toggle、來自Lunchbox的讀取表格、梳理用的小樹和去錯幾個電池組成。利用Toggle進行數(shù)據更新,達到參數(shù)化實時的變化,比如:時間的變化、成本的變化。利用小樹和去錯電池穩(wěn)定數(shù)據,確保程序不會擋掉。通過多個顏色塊按次序的篩出,對應讀取表格內的具體序號,對不同模型部位上色。由一些條件判斷和紅色區(qū)域中的移動電池組成。如果不滿意下落式動畫可更換電池,變成漸隱式或上升式。數(shù)據的邏輯是總數(shù)不斷變小或變大,減去需要下落/上升的固定數(shù)值,做一個最大值判斷來達到逐步下落/上升的動畫,以此呈現(xiàn)4D的時間流逝。這種數(shù)據邏輯是速度恒定的等節(jié)拍流水,其實不等節(jié)拍、異步流水、交叉流水等,都可以通過判斷來實現(xiàn)。由一些我們愿意在grasshopper內調整的數(shù)據組成。這部分的作用是簡化電池和表格數(shù)據。這些數(shù)據我們可以直接在Grasshopper里調整,而不需要每次都要在表格里去改速度然后用 布爾值按鈕更新,減少了很多操作。由一些數(shù)學運算電池組成。這部分的作用是從模型提取出的幾何信息和附加上的非幾何信息的運算,可以根據項目或行業(yè)不同的估價標準進行調整。? 5D數(shù)據呈現(xiàn)和4D動畫區(qū)域。由一些表單,和視窗組成。作用是將4D、5D用可視化的方式呈現(xiàn)。補充一下,這個案例中模型和數(shù)據的格式,如圖所示。CAD中的模型根據圖層進行分類,Excel中的右側白色格子的數(shù)據代表成本或是其他需要添加的多維數(shù)據。成本的信息通過算量區(qū)域以動態(tài)圖表的方式展示出來了,具體可以看下面的動畫。BIM 4D 就是在模型上附加時間,而5D是在4D上附加成本。時間的變化需要動畫去呈現(xiàn),而利用 Grasshopper 的方式還可以實現(xiàn)多維數(shù)據的添加。今天分享的散裝BIM4D案例,主要是基于圖層對模型進行分類,再根據分類附加信息。我們還可以探索更好的解決方案,脫離圖層作為數(shù)模途徑的方式。比如在Grasshopper里利用 Human 和 HumanUI 插件完成正向BIM交互設計,并按照「族」分類生成模型,模型和數(shù)據連接途徑會變成電池包。通過電池任意 broke 模型,滿足不同的標準化需求,按圖層生成或是按族類別生成都可以。如果涉及到運維,則可以利用 API 或是 FireFly 插件對設備進行連接,輸入位置等其他信息,再利用 GH 和 Revit 相關插件進行參數(shù)化聯(lián)動,那可就真是打開了一扇大門。今天的文章無論是從思想還是操作,都可以說是非常硬核了,如果你堅持讀到這兒,相信一定能有些啟發(fā)。Jack 琢磨出的散裝BIM思路,SketchUp 的那一套做法,已經能在網上查到相關的視頻教程。而 Rhino+GH 學習成本高,相對冷門些,今天的案例還可以衍生出一些功能,比如隨工期變化模擬施工安全、隨工期和估價的變化模擬風險等等。未來BIM會帶來更多的設備,也會帶來更多的數(shù)據標準。借用圖軟公司的BIM理念:「不同專業(yè)的人,將用專屬于自己的軟件去解決效率和信息化的問題,然后通過開放的方式共享信息,來實現(xiàn)BIM。」未來的 BIMer 可能需要具備靈活處理數(shù)據和模型的能力,同時對于只帶幾何信息的模型,多種多樣的信息附加方式也值得我們去探索。最后,BOX也對熱情分享技術的 Jack 表達最衷心的謝意。
本文提供的技術方案僅供參考,在重大項目應用務必注意風險。本期內容探討人: @小耳朵貓醬 @VCTCN93 @老孫 @熊仔 @開開 @Duan
本期內容贊賞金額全部歸作者和參與討論的小伙伴們所有,感謝大家支持本篇文章來源于微信公眾號: BIM清流BIMBOX