2016年8月13日 星期六

Houdini 彩色山脈

先上圖。原始教學出自於Houdini動態圖形設計案例解析,武海峰編著

核心技術
point sop 改變法線方向、改變顏色
popnet沿著法線方向發射粒子
使用add sop連接particle
使用creep讓粒子沿著地形爬行
Point Vop 製作地形

流程概觀:
線上取點,並給予normal,用來發射particle(normal長短影響速度),並使用creep讓粒子沿著地形運動,用Add將粒子串成線,再用polywire轉成實體。

細部製作流程:

建立一個Line,設定參數如下。一開始可以先設100個點就好
 ↓
這時候上面的點是沒有normal的,我們加入一個point sop,在Keep Normal處改成Add Normal,並在X的欄位輸入fit(rand($PT),0,5,1,10)。這個函數的意思,就是rand($PT)讓每個點會得出一個亂數,再使用fit函數,將原始範圍設定成新範圍:0→1,5→10。這樣就會得到不同長短的Normal了。
 ↓
接著再加入point sop,使用Add Color,以表達式chramp("cd",rand($PT),0)取得下方我們加入的ramp的值,後面的0,1,2對應R,G,B。下方的ramp就自行加入顏色。
 ↓
要加入ramp,就使用point sop參數欄位右上方的齒輪,選擇Edit Parameter Interface。左方欄位找到ramp(color),拖曳到中間欄位的root下方,就會出現在最尾端。右方欄位則是設定參數的細部。將名稱改為cd,這要做為chramp指定attribute的名字;label改為color。
 ↓
有了顏色和法線,就可以用來發射彩色的粒子。加入一個popnet_old,建立source node。在source標籤頁下設定Emission Type為point(ordered)照規律發射,Geometry Source為使用第一個input的Geometry。
 ↓
第二頁把Const Activation關掉,Impulse Birth Rate設定為$NPT,也就是發射源有多少點,就發射多少particle。因為沒有要粒子消失,所以Life維持不變。
 ↓
在Attribute標籤頁,Initial Velocity 維持預設的Use inherited velocity,設定inherit velocity為0.5。
 ↓
按照書中,這時會先接上Add sop,把點連接成線,並且接上polywire sop 來產生實體線段。不過上面的顏色會是很奇怪的平面感。這是因為normal都指向點的normal方向。因此要加入這個point sop,設定為no normal來把normal關閉。
 ↓
此時呈現的效果如下。
接著就要製作地面了。由於這只是要拿來當作爬行的標的,因此不需要厚度。建立一個Grid,類行為Nurbs,比較平滑。size 10,分段數設定為100。 
 ↓
在下面接入一個Point vop,點擊進入。這裡的概念就是,使用input端的geometry的P(position)點位置,進行turbulence noise運算後,重新fit到設定的範圍內,再將結果傳遞到displacement node,最後連到output,從而讓模型真的變形。這裡的值沒有固定,可以先串接好之後再慢慢調整。按照書中的數值調整會很怪,所以還是自己來吧。
注意在H15.5中製作的時候,displacement 要選的是 Displace Along Normal 這個node。
而Houdini 中的Vex 連接介面中,每個端口的顏色都有用意。比如說global的 P 這種綠色,表示的是向量,因為有x,y,z三個數值;比較墨綠一點的是浮點類型。
在連接的時候不同顏色是沒辦法連接的,要經過轉換。
 ↓
設定好之後,接一個Transform sop,設定Uniform Scale為10,整體放大10倍。
 ↓
目前的長相
 ↓
再來建立一個Creep節點,修改ScaleX, ScaleY為0.1。input1連入砍掉normal的point sop,input2連入要爬的對象。
 ↓
目前效果。
 ↓
接下來就是加入Add sop,把這些particle連接成線。由於發射時使用的NPT,是照順序發射,也就是第一個點發射編號0的粒子,在下一frame發射的粒子,編號就是元編號+NPT這個數字。為了修改上的方便,我們可以直接把popnet中source的impulse rate的值複製,關聯貼上到這裡的N。Add模式是Skip every Nth point。
 ↓
在points標籤頁中勾選Delete Geometry But Keep the points。應該是會把Particle給刪掉,但是生成的curve的點會留著...。
 ↓
如果放大看,會發現每個點的分布不太均勻,所以先把這產生的curve轉成nurbs變比較平滑。
 ↓
再使用resample sop,設定length0.1來重新細分curve。
 ↓
再把處理完的curve轉成polygon。
 ↓
再加上Polywire,搞定!
 ↓
為了要render圖出來,建立平行光與cam,並把光源的影子關閉。
 ↓
在/out 建立一個mantra node,把Output Picture設定好位置與檔名(需含附檔名),並設定Output Device類型。
 ↓
修改取樣值為12,Min Ray Samples改為3。
 ↓
使用PBR物理引擎運算,Diffuse Limit改為3。

完成!建議有設定mantra的話,可以直接點擊Render to Disk,或是Render to Disk in BG,免得MPlay出錯,圖就沒了~~。






沒有留言:

張貼留言