2018年4月16日 星期一

Grasshopper教學15 - voronoi surface(2D) - voronoi皮層(2D)

                                                    本篇針對voronoi皮層進行說明



       voronoi diagram是一種常見的表現紋理,尤其是對於想學習參數紋理設計的人來說,相當容易在網路上見到這種看來有機、宛如細胞組織的紋理表現範例,實際上,這也是一種真實存在於自然界中的紋路,然而,大家在學著如何展現這樣紋裡的同時對於他背後的原理及來由可能卻不盡了解,在這邊我們簡單說明一下其意涵

         voronoi 」這個字彙其實是一位俄國數學家的名字,他的全名為格奧爾吉·沃羅諾伊(俄語:ео́ргий Феодо́сьевич Вороно́й)(1868年-1908年),逝世已經超過了一世紀的時間,最廣為人知的貢獻就是他建立起以他名字為名的沃羅諾伊圖的計算邏輯,這是一種可以用來畫分領域範圍,表達出點與點之間,各自最近範圍邊界的圖騰,搭配下圖來解釋可能更為清楚一些




        這是一張如同細胞推擠於方形區域中的分割圖片,我們可以將每一個黑點視為一個核心點,在方框之中隨機散佈的核心點如同細胞的細胞核一般,將彼此的細胞壁相互推擠填滿整個方形的邊界範圍,形成一種看起來相當有機的紋理分佈




       voronoi diagram就是在尋找及定義這兩個細胞核心之間,存在有一條到兩核心點距離均等邊界線的過程,這樣的解釋也許有些抽象,我們可以將視覺焦點放置在畫面中的這兩個完整單元細胞上來進一步了解



                  畫面中的藍色與紅色細胞單元,這兩個單元間的邊界線是如何生成的呢?




        首先,我們可以把點A與點B兩個核心點用直線相連接,並試著找尋這條線的中點位置




        畫面中的綠點就是連線的中點位置,可以看到中點將連線分成了紅線與藍線兩個部分,而紅線與藍線的長度是相同的,換句話說,即為綠點到點A與點B的距離相同



        如果我們畫一條通過綠色點,垂直於AB連線的線條,就會得到畫面中的綠線



       這條綠線上的任一點到點A與點B的距離,因為直角三角形且對稱的幾何特性,我們可以確定一定也是相同的長度(圖中由黃點到AB兩點的橘色連線),換言之,畫面中的綠線即為點A與點B之間,距離相同的一條邊界線




       重複這個基本概念,施加在不同的兩個點上,我們可以得到另一條邊界線,不停的將所有相鄰的兩點施與相同概念的操作之後,我們就可以得到一個透過等距邊界線所拼湊而成,一個類似於細胞彼此間相互推擠的圖騰了


       這樣的領域分割紋理在自然界中也有所存在,比方說以下的圖片





地表龜裂






長頸鹿身上斑紋






肥皂泡泡的堆疊






蜻蜓翅膀網格





        這些乍聽風馬牛不相干的主題,在將圖片放置在一起後是否變得像是同一脈絡的產物? 儘管相較起人為繪製的圖騰,這些真實存在非人工的紋理可能不盡然"精準",但不可否認的,這些紋路的共同概念,就是隱含在其中的voronoi diagram,自然界中這類的邏輯紋理,也成為設計師學習參數設計過程中可以參考依循的對象




       我們回到這次的範例教學部分,在grasshopper的介面中,已經有貼心的把voronoi圖騰的原理簡化成一個好用的單元,使用者只要在指定的範圍中,隨機佈上想要分佈的核心點,voronoi元件就會自動的依造其分佈位置與距離關係,調節運算出各核心點間的邊界線並佈滿整個指定範圍,當然這樣方便的生成有其好處,但相對的生成出來的線條就顯得比較生硬呆板而沒有變化,因此,如何從單線構成的框架線轉變成有肉厚有曲面的實體模型,就成為這個範立的重點,以下開始過程步驟。

步驟一: 設定一方框做為散佈核心點的範圍


        這個方框的範圍並不會是最終的呈現範圍,我們僅只是取其"方形"的幾何類型做為邊界,之後會將方框內的紋理套用轉貼於自己創造的自由曲面上


步驟二: 在方框中隨機產生點位做為紋理生成的核心點


         這些點位的產生可以是完全的隨機生成,也可以是有意為之按照特定邏輯佈置的點位,當然不同的位置所產生出來的最終結果其效果也不一樣,這邊我們先採用隨機均佈的方式,在方形範圍內佈下200個隨機點位


步驟三: 透過voronoi原件將核心點產生出各自的邊界線


     到這一步為止,我們已經可以看到很明顯的voronoi pattern,實際上也不需要我們自己辛苦的去編寫其邏輯,電腦可以方便的幫我們製作出邊線框架,然而,後續增厚的步驟才是這個範例所需要學習的重點


步驟四: 將每個voronoi單元的中心找出


找出單元中心的原因是,我們可以針對每個單元提供一個可供操作的定位點


步驟五: 將每個voronoi單元的邊界以中心為定位點,縮小0.85倍


這個步驟的目的,在於透過縮小單元與單元的過程,產生出樹枝狀的空白,這樣的空白將在後續的步驟進一步變為有厚度的枝幹


步驟六: 將縮小的voronoi單元上移1.4單位(群組A)




步驟七: 將原本的voronoi單元上移3.6單位(群組B)


步驟八: 將群組A與群組B進行loft產生出相對的枝幹皮層



到這一步為止,我們可以完成了局部的枝幹皮層,之所以稱之為局部,其原因是目前的枝幹還沒有被包覆成為一個完整的管狀,而是一組開口朝下的皮層組合


步驟九: 將群組A的框架線進行loft產生出相對的枝幹皮層


到這一步可以完成枝幹皮層的第二部分,枝幹管狀空間的中段


步驟十: 將原始的voronoi單元與縮小過後的單元彼此loft起來



這個皮層是枝幹皮層的第三部分,完全的平面可以將枝幹的管狀封底



步驟十一: 將三組枝幹皮層的單元組織起來,完成封閉的枝幹實體



步驟十二: 將皮層轉換成mesh面,並將整組mesh向下鏡射出對稱的枝幹空間


將surface轉換成mesh



將mesh群組鏡射,完成有厚度的管狀枝幹


步驟十三: 創建一個想要呈現的目標皮層,把前步驟所產生的方形範圍枝狀空間轉貼於皮層上


創造一個想要形塑的自由形體皮層



將前一步驟產生的網格套用到新皮層上(透過surface morph)




利用weaverbird原件將mesh表面網格細分柔化,形塑成光滑曲面,至此,完成這個範例的voronoi 骨架皮層







有興趣的人可以從這邊下載檔案嘗試調整參數觀看變化

 

Grasshopper教學15 - voronoi皮層(2D)







  


如果對內容有任何需求或疑問,歡迎隨時來信與我聯繫~
王先生  gh7386@gmail.com
本人長期進行grasshopper教學服務, 如有教學需求請來電0910782918




連結:   <教學簡介頁面>