Houdini學習筆記014_兔子招誰惹誰了?

今天教大家切一只兔子,可以橫著切,可以豎著切,也可以斜著切。選擇最多的是橫切,比如山體的等高線就是這種切法,縱向表示海拔高度。

我們要做的就是得到模型切片的輪廓線,而且層數(shù)和層間距要可控。最后按照海拔的不同給切片添加不同的顏色。
切片功能使用的是其貌不揚的“Boolean”(布爾)節(jié)點。首先,用“file”節(jié)點導入一只bunny.obj模型,由于Houdini默認單位是米,這尊兔子導進來有100多米高,為了讓其看上去和其他模型大小差不多,用一個“transform”節(jié)點將尺寸(“Unifrom Scale”)設置為0.025。當然,你可以視自己導入的模型大小而定。

創(chuàng)建一個“grid”(平面)對象,用“boolean”節(jié)點進行布爾運算。平面要和兔子有交叉。

將布爾的操作模式“Operation”改為“Seam”(接縫的意思),并取消勾選后面的“Only Use Open Curves”選項,得到封閉的面。有些情況下,得到的面法線方向是有問題的,可以暫且不管。需要注意的是,兔子必須是封閉模型,否則切割得不到想要的結果。

一個平面切割只能得到一個切面,要想獲得多層切面,只需要用多個平面切割就行了。所以在grid后面添加“copy and transform”節(jié)點對其進行復制,gird的“Rows”和“Columns”分段均可設為2。copy從地平面(P.y=0)開始,“Translate.y”設為0.05(即層間距),總共拷貝(“Total Number”)80層,涵蓋整只兔子即可。

但現(xiàn)在切片的法線方向是有問題的,即使添加“normal”節(jié)點,可以看到法線的方向仍然不一致。有些朝上,有些朝下,所以顯示的光影效果不同。

解決的辦法很簡單,只需要用“group”節(jié)點將法線朝上或者朝下的面選出來,然后翻轉即可。在“group”節(jié)點中啟用“Keep by Normals”,方向“Direction”設置為(0,1,0),即豎直向上。“Spread Angle”是指法線方向與設定方向成一定夾角范圍內的面都可以被選中。由于這里的法線方向不是向上就是向下,所以“Spread Angle”小于180度即可。最終group1中只有法線朝上的面。

添加“reverse”節(jié)點,“Source Group”選擇group1,可以看到所有面的法線方向已經(jīng)一致。

用“resample”節(jié)點對切片的輪廓點進行重新采樣分布,然后用“polyextrude”節(jié)點擠出。擠出時勾選“Output Back”,得到封閉的背面。

最后再整體添加“normal”節(jié)點,讓法線一致。

剩下的就是根據(jù)切片的高度不同添加不同的顏色了,可以用“Attribute Create”節(jié)點給切片添加一個高度屬性。屬性的名稱“Name”可輸入“height”,“Class”選擇Primitive,表示是添加給面(切片)的,“Type”為Float(浮點數(shù)據(jù))?!癡alue”設為@P.y,即y軸坐標(高度)。設置完后可以在“Geometry Spreadsheet”窗口查看Primitive屬性,是否多出height屬性列表。

然后在最下方添加“color”節(jié)點,“Class”同樣選擇Primitive,“Color Type”選擇“Ramp from Attribute”,即根據(jù)屬性來著色?!癆ttribute”自然選擇前面設置的height。

默認的Ramp范圍是0~1,即在height為0~1的范圍內按照黑白漸變著色。但現(xiàn)在的兔子高度不止為1,近似可以用切片的間距乘以層數(shù)來表示。參數(shù)關聯(lián)可寫作“ch("../copy1/ncy")*ch("../copy1/ty")”,漸變色可選擇預設的Black Body,點右側的齒輪可以選擇。

今天的筆記到此結束,屬性的創(chuàng)建和利用仍需時刻練習。另外,“group”節(jié)點中的按法線方向設置選集(“keep by normal”)的功能還是不錯的。感謝各位的閱讀,咱們下回見~