GH 0.9 的 Cluster 介紹

[Tested in Grasshopper 0.9.0006]

Grasshopper 的叢集(cluster)在之前的版本大多被用在元件的群組、打包,或用來整理工作區。而 0.9 版重新改造過的 cluster 終於朝真正的、可重複使用的巨集邁了一大步。簡單來說,cluster 之於 Grasshopper 就是使用者自訂的巨集指令、巨集元件,或者你要叫他自訂函數也可以。

舉例來說,我有好幾個地方需要累加1:

就可以將「加1」的流程打包為 Cluster,複製到需要用的地方,一來保持工作區清爽,二來便於管理。打包方法:選取欲打包的元件,從主選單 Edit > Cluster 或者按滑鼠中鍵的環形選單中執行即可。

如果二個 cluster 來自相同的定義,內容會保持同步。如果想變更累加值,把「加1」變成「加2」,我只需要修改其中一個 cluster (下圖A1),其他源自相同定義的 cluster (下圖A2)也會跟著改變:

而且,cluster 除了在檔案內與一般元件並存,現在也可以單獨匯出存檔,有專屬的副檔名 *.ghcluster,還可以密碼保護!匯出方式:在 cluster 上按滑鼠右鍵,選 Export... 或 Export & Reference... 就可以匯出存檔。這二者差異是前者只有匯出,後者是匯出及產生連結。

這些操作流程都變得很直覺、好用。想像一下,你可以:
  1. 把檔案裡大量重複出現的元件群組,用 cluster 來管理!
  2. 把自己慣用的元件流程包裝成新元件,便於未來重複使用!
  3. 把獨家秘方單獨存檔,再用密碼保護,不怕別人盜用!
然而,要享受美好的事物總是要付出代價的... 以下的事情要先搞清楚。

我泥中有妳、妳泥中有我(Entanglement)

前述例子中,若 A2 是複製於 A1,則二者為「同體分身(entanglement)」,擁有相同的物件編號(可以想像成身分證號碼),所以才會像駭客任務中的 Agent Smith 分身一樣,彼此的樣貌和能力都一致,還會一起升級。

但若 A1 和 A2 是分別建立的 clusters,則二者的物件編號不同,即使外觀能力都一樣,未來卻無法保持同步。

問題來了,我們如果從 cluster 元件的外觀根本無從判斷二者的異同,名稱也無法區分,怎麼知道他們是不是 entanglement?難道要打開改一改,看哪幾個 cluster 跟著變?

妥善的命名策略也許是最簡單的方法(記得要切換為顯示元件名稱),其次是把 cluster 匯出存檔管理,再者還可以很認真的設計專屬 icon 作為視覺辨識。總之,如果沒有養成好習慣,想打包就打包,想匯出就匯出,也不命名,結果畫面上只看到一大堆紙箱元件,我想 cluster 就變成 clutter 了。

起手無回(Point of No Return)

我記得以前將元件群打包為 cluster 後,還可以炸開回復原狀(希望沒記錯)。現在 0.9 版只能打包元件,尚未支援炸開回復,未來會不會支援也不知道。所以呢,剛剛打包好的 cluster 還可以用 Undo 取消動作,恢復原狀。但已經錯過 Undo 時機的 cluster,就只能打開 cluster 進入編輯模式、全選、複製、回到主工作區、貼上。

就我自己的觀點,這個問題還稱不上是問題,只不過是物件管理上的限制。

如果你有其他程式語言經驗,其實只要把函數(function)的設計原則套入,你就懂 cluster 的角色了。然而 Max/MSP 和 PureData 的自訂物件更接近 cluster 的用法,他們的物件管理就更簡單了,每個自訂物件一律就是單獨的檔案。

聰明的預設值

當打包 cluster 時,GH 會很貼心的把輸入參數值保留起來,當作該 cluster 的預設值,減少了發生警告或錯誤訊息的機會。

留言