仿Kaindl玻璃吊燈造型

玻璃藝術家 Robert Kaindl 創作一系列令人驚嘆的玻璃吊燈, 上百根如爬籐觸鬚或螺旋羊角造型的玻璃觸手為其特徵。第一個範例就拿螺旋羊角造型來嘗試,我們打算用曲面當做「種植」螺旋羊角的基礎,並以曲面上等距分佈的網格點作為羊角生長的基準點,其法向量作為生長方向。

下載範例檔,內含 Rhino & GH 檔
適用版本:Rhino 4.0 SR 8+ or Rhino 5 beta, Grasshopper 0.8.0013+

在衍生形體過程中,我們一定會用到數列、等距分割來產生幾何資料,但等距太過平均、不夠自由,我們希望有多一點變化,這時候 Graph Mapper 可以快速派上用場。

1. 用 Graph Mapper 使單調的遞增數列產生變化

在兩條曲線上取得等比例分割點,連接兩條曲線之間相互對應的點成為直線,沿直線生成圓管(Surface > Freeform > Pipe),圓管半徑原本是從 0.1 到 0.6 遞增,用 Graph Mapper 重新對應數值之後變成週期性變化。此後,只要改變 Graph Mapper 的 Graph Type 就可以實驗各種不同的數值對應方法。



2. 資料配對方式(Data matching)和定義域(Domain)操作

我們需要在曲面上佈點,作為羊角的基準點。佈點的方法很多種,我們先用曲面座標系 UV 座標定網格點。

首先產生一個數列(Series)當做 X, Y 座標值,用 Point XYZ 元件(Vector > Point > Point XYZ)產生對角線上的點群,接著把 Point XYZ 的配對方式改為 Cross reference(交叉配對),將對角線點群拓展為網格點。關於資料配對觀念可以參考這篇 Scott Davidson 寫的詳盡解說


接著,計算網格點與引力點 p 之間的距離(Vector > Point > Distance),當做圓半徑的參考值。距 p 愈遠半境愈大、距 p 愈近半徑愈小。我們希望圓半徑最大不超過網格點間距的一半,也就是圓彼此不交疊。由於網格點間距是動態的,圓半徑最大值也必須隨著更動,故無法使用 Graph Mapper(其定義域和值域不能動態改變),因此改用 Domain 系列元件來做。

我們先用 Bounds 元件(Math > Domain > Bounds)取得全部距離值的來源定義域,用 0.0001 (註一)和網格點間距的一半定義圓半徑的目標定義域,再用 Remap Numbers 重新對應數值。

(註一:為何是 0.0001 呢?因為 Rhino & GH 裡無法產生半徑為 0 的圓,於是用一個很小的數值作為圓半徑最小值,避免發生錯誤。)

3. 曲面上的網格點

把上述網格點分佈到曲面上會是怎麼樣呢?

每個曲面在生成之初都有自己的 U, V 參數範圍,為了便於操作,記得要先進行「重新參數化(Reparameterize)」,讓兩個方向的參數範圍都落在 0...1 之間。以步驟 2 的佈點方法,可以用 Evaluate Surface 元件(Surface > Analysis > Evaluate Surface)取得曲面上的網格點、法向量、以及工作面。


取得曲面上的網格點後,回頭來思考如何建立一個螺旋羊角造型。

4、螺旋線

首先要產生一條螺旋線,就利用圓柱體座標系來製作(當然還有其他方法)。定義一個圓柱座標點需要三個數據:角度(Angle)、半徑(Radius)、高度(Elevation),另外還要有一個工作座標P(或工作面)定義圓柱座標系的原點和法向量,此處我們僅提供空間任意點p,意味著使用Z軸定義圓柱座標系法向量。



當圓柱座標系中一系列的點座標,其角度、半徑和高度都逐漸遞增,用 Interpolate 元件(Curve > Spline > Interpolate)連接成一條曲線,就得到一個規矩的螺旋線。調整角度、半徑、高度參數值,便可以得到不同的螺旋線。

若要讓數值變化更自由,可以採用步驟1的 Graph Mapper。例如將高度變化值進行曲線調整。


當然我們也可以把 Graph Mapper 套用到角度、半徑的變化上,這部份就交給各位自己練習了。

在這個練習中,我們用一個空間中的任意點p作為螺旋線的起點。如果要把螺旋線長滿整個曲面,我們需要在曲面上找到一些點以及相對應的法向量,然後把螺旋線「種」上去就行了。

5、螺旋羊角

有螺旋線之後,用 Perp Frames (Curve > Division > Perp Frames)等分曲線,取得一系列垂直於曲線的工作面(frames)。在工作面上產生半徑不等的圓,作為羊角的斷面,再用 Loft 串成曲面,就得到螺旋羊角了。請注意,範例當中斷面圓的半徑也用到 Graph Mapper 進行調整。


6. 曲面上長滿了螺旋羊角

前一個步驟的螺旋羊角是長在一個基準點 p 上,要如何同時長在很多個點上呢?最後一個步驟,就是把步驟3所產生的工作面 F 傳送給步驟4中圓柱座標點所需的工作面 P。


由於工作面不只一個,正確的資料配對是一個工作面配一組完整的螺旋羊角,所以每個工作面要單獨配對,記得將圓柱座標點參數P設定為 Graft 就 OK 了!以下是完成後,烘焙出來的 Rhino 模型。


你可能會馬上癱倒在地板上大喊「這不是 Kaindl 的作品!這不是 Kaindl 的作品!」好啦,這裡有稍微像一點點的:


你以為 Kaindl 這麼好模仿啊?而且一次把東西做完就剝奪大家自學的樂趣了,不是嗎?如何讓每一根羊角都不同,還能根據基礎曲面的曲度做變化,這就要靠大家的修行了。

留言