?

基于SketchUp 動態組件的建筑參數化設計方法研究

2024-03-04 10:33彭鵬王凱飛趙佳杰張月辰
重慶建筑 2024年2期
關鍵詞:表達式組件動態

彭鵬,王凱飛,2,趙佳杰,張月辰

(1 石家莊鐵道大學 建筑與藝術學院,河北石家莊 050043;2 北方工程設計研究院有限公司,河北石家莊 050011)

0 引言

隨著計算機技術的迅猛發展,建筑設計行業也已完全由計算機作圖替代了手工制圖,高效的制圖方式除了給設計表現帶來方便和快捷之外,還使得方案的精細推敲成為了可能[1]。

在當今建筑設計行業中,大多數計算機作圖依然停留在“先想后得”的制圖模式,即建筑師先在大腦中構建出所期望的結果,再利用計算機將其簡單地表現出來,其中設計和建模表現是兩個獨立的過程。但是在實際工程應用中,設計方案很少能夠一次性通過,設計方案的調整和變更需要耗費設計師大量的精力將新的方案再次建模。同時,由于表現相對于設計的滯后性,設計師從表現的結果直觀反饋到設計環節的推敲也會出現低效的現象。由于設計和表現是分離狀態,所以每一次對方案的調整都需要經歷一個完整的過程,在計算機建模環節會出現較大的人工內耗,大量重復性的工作降低了效率,同時還減小了方案推敲的精細程度[2]。

建筑參數化設計在此體現了巨大的優勢,參數化設計模糊了建筑設計和模型表現之間的界限,通過控制參數變量使模型按照某種編譯好的規則進行變化,縮短了從方案調整到呈現結果之間的過程,甚至可做到實時修改,真正實現“所見所得”。由于省去了再次建模的重復工作,方案推敲的過程也將會更加靈活和自由[3]。

1 SketchUp 軟件在建筑設計領域的優勢

SketchUp 軟件在建筑設計領域的應用比其他3D 設計軟件更為廣泛[4]。它的建模邏輯清晰且簡單,主要通過繪制直線和推拉成體的方式快速生成模型,步驟精簡,能夠快速表現效果,非常有利于建筑方案設計的前期推敲。同時,它內置較多適合建筑設計的功能,例如精確時間和地理坐標的太陽陰影渲染、方便快捷的材質系統、人視位置定位相機以及漫游、快速剖切模型等。由于其相對精度較低,所以它對計算機硬件要求也較低,非常適合常用的直線較多的線性建模場景。

SketchUp 擁有非常豐富的擴展功能[5],通過開放的Ruby 語言可以為軟件開發豐富的插件,實現更多的高級功能[6]。SketchUp 通過SUAPP、坯子助手、1001bit Tools 等建模輔助插件可以使建模更加方便快捷,有效提高建模效率,通過Viz、Profile Builder 等參數化插件可以實現更高級的非線性建模和參數化管理,通過V-Ray、Enscape 等渲染器插件可以快速對接后期效果圖的渲染表現。此外SketchUp 還擁有豐富的官方及第三方模型素材庫,可以在實際工作應用中快速得到預期的表現效果[7]。

因此在我們研究參數化建模設計時,除了關注主流的Grasshopper、Dynamo 等老牌參數化軟件以外,SketchUp 的參數化應用同樣值得被重視,尤其是容易被人們遺忘的SketchUp 內置動態組件功能,更加值得我們去認識和研究[8]。

2 參數化建模設計基本方法

2.1 參數化建模的定義和特征

參數化建模設計并非特指我們常見的復雜曲面的構建,對于一切將3D 模型的參數數據化,并通過一定的計算機算法控制其參數的建模設計都應統稱為參數化建模設計[9]。它有兩個重要特征,一是能夠提取3D 模型的參數和數據,二是能夠通過計算機程序算法來控制其參數。

參數化工具更像一種計算機編程語言。任何3D 建模過程的本質都是將設計者的某種預期反映至計算機3D 模型上的過程,是一種人與計算機的交流。在脫離參數化的直接建模中,人與3D 模型的交流媒介就是建模軟件中的常規編輯工具,它是一種抽象的語言,有如手語和行為語言,傳遞信息的過程是受限且低效的。參數化工具則更像一種高級語言,它重新建立了一套新的建模邏輯,利用更加自由的計算機語言來描述建模行為與過程,在某些場景下能夠產生更高的效率與發揮更大的優勢。

3D 模型轉譯為計算機可以處理的有效數據,則需將描述模型的參數和數據提取出來。因此,模型中的各項元素都應有一個對應的專屬信息標簽,通過這個信息標簽可以得到該元素的各項控制屬性,例如坐標、長度、材質等。屬性描述了模型中元素的狀態,也控制了元素的唯一性,我們既可以通過讀取屬性來獲取該元素的信息,也可以通過更改屬性來控制元素的形態及其模型效果,如圖1 所示。

圖1 模型與參數化工具之間交流的橋梁

在計算機程序設計中需要通過表達式來實現多種功能,其中較有代表性的為邏輯表達式和函數表達式。邏輯表達式是處理數據并集、交集的一種有效手段,它包含“與(And)”“或(Or)”“非(Not)”三種狀態[10]。函數表達式如同數學中的函數概念,通過輸入自變量x 可以得到唯一的因變量f(x)反饋值,計算機程序中的函數表達式是一個可以實現某種預定功能的代碼黑匣子,當為其輸入一個或多個自變量,便可返回一個經過代碼運算的因變量反饋,如圖2 所示。函數可自定義,也可通過調用運行庫獲得豐富的內置函數。在我們后續的參數化建模當中,表達式的運用非常關鍵[11]。

圖2 函數表達式示意

2.2 參數化建模常見的兩種控制模式

參數化建模設計的控制模式一般可分為類Grasshopper 系的通過數據流控制和SketchUp 動態組件的通過對象屬性控制兩種方式。

Grasshopper 或Dynamo 中的電池組相當于高度集成的函數表達式[12-13],數據在函數表達式之間的傳遞通過電池間的連線實現。它簡化了程序設計當中的許多特征,所有的功能都通過獨立的電池組即函數表達式來實現。例如,并不強調程序入口和出口的概念,它可從任意一個數據源開始,到任意一個函數表達式結束。它更關注的是數據的輸入和結果的呈現,任何一個數據源都是數據的輸入,數據源可以是一個參數化編程中指定的一個常數,也可以是模型中的某個參數;數據流中任意一個有控制模型功能的函數表達式都可作為結果,而這種帶有控制模型功能的函數表達式可能并非數據流的末端,它依然可將處理過的數據繼續傳遞給下一個函數表達式,如圖3 所示。

圖3 通過數據流控制方式

SketchUp 允許開發者給組件配置屬性(Attributes),而每一個配置了屬性的組件都可看作一個單獨的對象。組件的屬性反映了組件的幾何特征,為屬性賦予的值也會反過來控制組件的幾何形態,兩者是相互制約的關系,通過給組件的屬性賦予復雜的函數表達式便可實現對組件幾何形態的自由控制,如圖4 所示。通過對象屬性控制并沒有像Grasshopper 那樣直觀的數據流界面,它通過類似Excel 表的形式展現,表達式則直接以公式的形式出現在屬性表中,其操作的易用性也因此大打折扣,對開發者邏輯的清晰度也有更高的要求。

圖4 通過對象屬性控制方式

3 SketchUp 動態組件的功能及實際應用

3.1 功能簡介

組件(Components)是SketchUp 軟件的特有功能,它可以將指定的線、面合并成組,并且在重復使用時依然可以讓全部相同組件保持一致,類似于AutoCAD 中“塊”的概念。動態組件(Dynamic Components)是SketchUp 軟件附帶的參數化設計工具,它可以給組件添加更強大的功能,通過類似Excel 表的屬性窗口,便可自由地控制組件的幾何形態[8]。它主要通過“組件屬性(Component Attributes)”面板實現,如圖5 所示。

圖5 示例組件“Bookshelf”的組件屬性面板

屬性是“組件屬性”面板的主體部分,每一行對應了一項組件的屬性。軟件將屬性分為了多項子類,按照使用功能可以歸納為界面、幾何形態、行為、變量四大類。其中界面類的屬性主要控制“組件選項”面板中的內容,是開發者給普通用戶展現的部分;幾何形態類主要控制該組件的3D 模型形態,包含XYZ 坐標位置信息、長寬高數值信息、旋轉角度信息等;行為類可以對模型進行一些常規的操作,例如復制、隱藏、限定縮放控制點等;變量類則是工具給開發者預留的可以自定義設置變量的屬性空間[8]。

函數存在于屬性的值當中,以公式的形式存在。函數是使參數化設計工具能夠實現無限種類功能的關鍵所在。它涵蓋運算符、數學函數、邏輯函數、onClick 函數、SketchUp 函數、三角函數、文字函數七大類,其中以前三者使用頻率最高。通過復雜的函數搭配能夠使組件屬性獲得豐富多樣的邏輯變化,進而實現多種參數化功能。

3.2 設計過程

整個參數化設計的工作流程可以歸納為構思-設計-測試三部分[9]。

在構思階段需要重點考慮對動態組件所期望的功能和該功能的實現方法。在參數化設計過程中,我們的身份應當是開發者而非3D 建模的普通用戶,所以功能的重要性要大于建模,而實現方法的構思則需要開發者對動態組件知識有足夠的經驗積累,需要開發者清楚每一個屬性和函數表達式所能夠實現的功能,從而判斷每一種不同的功能能否搭配實現最終的目標功能。

設計階段則只需要熟練掌握動態組件的語法規則、屬性,以及函數的靈活運用,便可以輕松完成開發。動態組件也以利用像Grasshopper 那樣的數據流思維來推動屬性的編寫。數據流起始端是輸入的數據,它可以通過直接在屬性中自定義輸入數值實現,也可以通過模型中的組件屬性調取。通過各種函數表達式將數據進行適當的處理,并最終將其輸出于組件的某個屬性中??梢哉f,數據起始于屬性,中轉于屬性,輸出于屬性。

動態組件的語法規則很簡單,每一個屬性都可以當做普通變量來使用,也就可以當做函數的因變量直接嵌套。當屬性需要賦值時,則需要在表達式最前面加一個“=”符號,這里的等號不代表等于的含義,而是表示將等號右邊的值賦給左邊的屬性。

測試階段的目的是以普通用戶的角度試用檢查,來反推設計中是否出現了錯誤,測試的過程應當盡可能將所有可能出現的結果進行窮舉,若出現問題則需返回設計階段進行修改和調試,最終得到期望的結果。通過了測試階段,參數化設計的過程才能算完整。

3.3 應用實例分析

本節通過兩個不同類型的案例探討動態組件在實際使用當中的設計思路及應用。

3.3.1 參數化建筑表皮應用

利用參數化工具可對建筑外立面表皮進行豐富的設計,本案例通過制作一個圓柱形建筑格柵表皮來說明參數化設計在靜態建模中的運用。

現有一個直徑46 m、高18 m 的圓柱體建筑,維護結構采用玻璃幕,設計者希望用金屬格柵對外立面進行包裹,并通過格柵的長短和疏密來表現一種流動曲線的外立面效果,最終展現效果如圖6、圖7 所示。

圖6 圓柱體格柵效果圖

圖7 圓柱體格柵展開圖

利用動態組件功能,可以設定單個格柵為單元組件,設置格柵組件的坐標軸為建筑主體頂部的圓心,通過“Copies”屬性對格柵進行環繞復制,引用復制體的編號作為自變量,使用正弦函數得到目標曲線,并將最終計算結果輸出給格柵復制體的位置屬性“Z”和長度屬性“LenZ”。格柵組件的完整屬性表如表1所示,對應的效果如圖8 所示。

表1 格柵組件的屬性表

圖8 組件屬性及最終效果

本設計需要解決的關鍵問題是曲線的描述,預期效果中所有的曲線均可基于正弦函數生成。其中總共有三條曲線,分別為上半部分的底曲線、下半部分的頂曲線和底曲線,如圖7 所示,其分別可描述為“sin(COPY*360/480*3+90)*200-600”“sin(COPY*360/480*3)*200-500”“sin(COPY*360/480*3+90)*100-1300”,如圖9 所示。由于正立面的表皮格柵向上掀起形成入口,因此可以通過COPY 的取值范圍選擇性地設定曲線在豎直方向上的倍數來實現該效果,于是下半部分底曲線可以利用條件函數調整為“IF(OR(COPY <80,COPY >400),sin(COPY*360/480*3+90)*300-1100,sin(COPY*360/480*3+90)*100-1300)”。

圖9 格柵輪廓曲線函數

行為屬性Copies 在使用時會生成一個名為“COPY”的只讀屬性,Copies 本身的值代表復制操作所生成的副本數量,COPY 則表示副本的編號,即距離組件本體最近的副本的COPY值為“1”,以此類推,最后一個副本為“239”,加上本體,總共得到了240 個格柵組件。COPY 值在組件的復制中有很重要的意義,很多變化都需要以該值作為自變量套入函數進行運算。

靈活設定自定義屬性可以讓單條公式更加簡潔,嵌套公式結構更清晰,便于開發者整理思路,也有利于提高程序的運行效率。本案例中的a、b、c 屬性分別對應的三條曲線函數;a1、b1 分別通過取二者最小值和最大值的方式修正填充重疊部分,如圖10 所示;SX 用來判斷COPY 的奇偶數,以識別格柵處于上半邊或下半邊。

圖10 曲線修正填充重疊部分前后對比

本次案例中用到了多處邏輯函數來實現復雜情況的判斷和執行。在開發中用到頻率最高的邏輯函數為條件函數“IF()”,它通過判斷邏輯表達式的真假來反饋不同的結果,是程序設計中條件結構的表現。在邏輯表達式中也經常用到“與”“或”“非”三種組合狀態,在c 屬性中就通過“與”函數“OR()”得到兩個邏輯表達式的并集。

3.3.2 參數化動態道路線應用

本節通過制作一個可以根據縮放自動變化的動態道路線為例簡述參數化設計在動態建模中的運用。

在實際工作應用中,經常需要對3D 模型場景中的道路進行建模,對于道路而言,最復雜的建模部分是道路線。道路線由道路中心雙實線、非機動車道實線、單方向車道間虛線、停車線、斑馬線等元素構成,各元素之間相互影響和制約。我們希望通過SketchUp 動態組件功能對整個道路線進行參數化設計,使其能夠按預定的長度和寬度自動匹配合適的道路線,最終效果如圖11 所示。

圖11 動態道路線的三種效果

動態道路線的主要輸入方式是用戶對道路線的拉伸縮放操作,通過縮放更改了道路線整體的X 與Y 軸方向的尺寸,計算出道路線中每一部分元素的尺寸、位置、可容納的車道數,最終將每一部分的尺寸、位置和數量輸出到對應的屬性中,使模型呈現預期的效果。此操作除了使用Copies 屬性、幾何屬性和常規的數學運算外,還需要做好不同組件之間信息的傳遞和共享,必要時可借用父級傳遞屬性信息。

一套完整的道路線涉及到的元素比較多,我們分別對其創建了組件,組件嵌套結構如圖12 所示。道路線的完整屬性表如表2 所示,效果如圖13 所示。

表2 道路線中各組件的屬性表

圖12 道路線組件嵌套結構

圖13 道路線大組件及其組件屬性

不同于首個案例,本設計增加了一個活動的輸入方式,即組件的尺寸。因此,整個道路線組件中會出現很多不確定變化,所以開發者應當考慮到每一種可能出現的情況,并運用合適的函數和結構對不同的情況作出不同的反饋。

本案例還涉及到大量的跨組件信息傳遞,在同組件中傳遞信息時,直接在公式中輸入屬性名稱即可。當需要跨組件傳遞信息時,則需要在屬性名稱前添加來源組件的名稱,并在中間用半角字符“!”隔開。例如“道路線!LenX”,在操作時也可以直接點擊需要引用的屬性,軟件會自動生成正確的引用格式。需要注意的是,這種傳遞只能在父級組件與子級組件之間進行,隔代和并列的兩個組件之間是不能直接交換信息的,如圖14 所示。對多次使用的表達式創建一個自定義屬性也是設計的重要技巧之一。

圖14 跨組件傳遞信息

4 SketchUp 動態組件的優勢與局限性

4.1 SketchUp 動態組件的優勢

1)易掌握。它的設計邏輯與市面上大多數參數化設計軟件不同,由于使用類似Excel 的屬性表形式,對于可以熟練使用Excel 的參數化設計初學者來說是易理解和掌握的。

2)兼容性高。由于是內置于SketchUp 軟件的官方工具,其兼容性較高,參數化程序可以直接存儲在skp 文件中,對比Grasshopper 無需額外獨立保存參數化程序文件,如圖15 所示。

圖15 Grasshopper 需要額外獨立保存參數化程序文件

3)簡化工作流。憑借SketchUp 軟件在建筑設計領域的廣泛應用,其生成品可以快速對接各類其他軟件,減省了多余的轉換,較大程度簡化了工作流。

4.2 SketchUp 動態組件的缺陷

1)界面直觀性不足。數據流式參數化工具采用更為直觀的圖形化編程,無需或較少需要開發者手動編寫公式及代碼,更低的學習成本和更便捷的操作有利于開發者專注于3D 建模設計本身。SketchUp 動態組件采用類似Excel 公式表格的形式,雖然可以讓熟悉Excel 的用戶快速理解和上手,但是整體編程效率和程序可讀性較差,出現問題時不易鎖定問題所在位置,對于沒有基礎的設計者難度則更大。

2)拓展性不足。雖然SketchUp 動態組件內置了大量組件屬性接口和豐富的函數表達式,但它并不能通過借助第三方程序開發工具增添更高級功能,這也導致了較少有擴展插件可以直接對接SketchUp 動態組件[14]。主流參數化工具Grasshopper 擁有豐富的擴展性,可以直接創建C#、VB 或Python 腳本電池組[15](圖16),用專業的程序語言對參數化設計功能進行拓展,同時豐富的拓展程序也使其能較輕松地實現多種復雜功能。

圖16 Grasshopper 原生的編程語言腳本

3)運算效率較低。SketchUp 動態組件在運行過程中的計算速度比較慢,經常在修改一個參數的時候出現Working 進度條(圖17),甚至在復雜的組件中可能會導致SketchUp 程序的崩潰,導致參數化開發和調試過程中的體驗感下降。這制約了動態組件的參數化建模能力,致使其難以處理復雜的參數化建模問題。

圖17 Working 進度條

4.3 參數化設計的便利性探討

參數化設計建模按照目的可分為兩類:一次性靜態建模和多次性動態建模。一次性靜態建模是為了實現某種造型而使用參數化工具輔助建模,它的開發僅僅適用于特定建筑方案,并不具有通用性和普適性,它的價值主要在于通過參數化輔助構建了較難直接建模的模型,如3.3.1 節中參數化建筑表皮的應用案例。多次性動態建??梢宰龅揭淮卧O計多次使用,即將經常在模型中重復使用的元素進行參數化設計,通過參數滿足其在不同場景中的變化需求。此類建模在設計開發過程中會遇到更多問題和挑戰,需要考慮的情況也更多,但最終的收益也較大,例如3.3.2 節中動態道路線的應用案例。

由于參數化設計和開發本身也需要耗費較多的時間精力,因此在建模時不宜盲目選擇參數化設計的方法,很多不適合參數化處理數據的場景中使用參數化反而效率較低。當采用參數化設計時應優先考慮多次性動態建模,以便后期還能重復利用??傊?,需要提前對成本和收益做好評估,選取合適的方式高效完成工作。

5 結語

SketchUp 動態組件憑借其獨有的開發邏輯在參數化建模軟件中獲得關注。雖然它在某些方面與主流參數化建模軟件有差距,但它基于應用廣泛的SketchUp 軟件平臺,擁有極大的用戶數量和良好的兼容性,SketchUp 動態組件依然可在工作中提供新的問題解決思路。不同的參數化設計軟件有各自的特點和使用方法,但其基本邏輯卻在很多平臺上通用。結合計算機程序設計原理,歸納對比不同參數化軟件的特點,靈活運用參數化設計技巧,最終可實現更加高效的建模設計。

注:感謝河北省高等學校人文社會科學重點研究基地——石家莊鐵道大學人居環境可持續發展研究中心對本文的支持。

猜你喜歡
表達式組件動態
國內動態
無人機智能巡檢在光伏電站組件診斷中的應用
國內動態
國內動態
新型碎邊剪刀盤組件
一個混合核Hilbert型積分不等式及其算子范數表達式
表達式轉換及求值探析
U盾外殼組件注塑模具設計
動態
淺析C語言運算符及表達式的教學誤區
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合