Houdini學(xué)習(xí)筆記015

今天的學(xué)習(xí)筆記基本上是照葫蘆畫瓢,參照的是b站教程“如何沿著幾何體的表面追蹤粒子”。由于涉及到我還不熟悉的粒子和動力學(xué)部分,也就是所謂的POP和DOP節(jié)點(diǎn),不求完全整明白,目的只是為了稍加了解。
Houdini中的節(jié)點(diǎn)最基礎(chǔ)的應(yīng)該是SOP,即Surface OPerations。只有把這部分先搞懂了,才有可能更深入地學(xué)習(xí)其他模塊。比如POP,Particle OPerations(粒子編輯模組)和DOP,Dynamic Operations(動力學(xué)編輯模組)。在學(xué)習(xí)的過程中適當(dāng)看看高階教程,一來可以提醒自己學(xué)習(xí)是條漫漫長路,不可操之過急;二來能幫助加深對軟件的認(rèn)識,望而生畏大可不必,就算學(xué)不會日子還得照常過。
下面開始今日的學(xué)習(xí)。
我還是用的可愛的Bunny模型,你也可以用Houdini提供的test模型(輸入Test查找),比如經(jīng)典的豬頭(Pig Head)和橡膠玩具(Rubber Toy)。

接下來直接創(chuàng)建“POP network”節(jié)點(diǎn),雙擊進(jìn)入節(jié)點(diǎn)內(nèi)部,可以看到這是一個連接好的粒子預(yù)設(shè)。包括粒子源(POP Source)和粒子解算器(popsolver)等。在“POPSource”節(jié)點(diǎn)屬性中,將發(fā)射類型“Emission Type”改為點(diǎn)(Points)。

然后在“Birth”屬性中將出生速率(Birth Rate)改小一點(diǎn),如250,點(diǎn)擊播放按鈕可以看到模型表面不斷有粒子生成。

為了讓粒子擾動起來,這里添加了一個“popwind”節(jié)點(diǎn),在Noise噪波屬性中,增加“Amplitude”(幅度)的值為1,“Swirl Size”(旋轉(zhuǎn)尺寸)設(shè)為0.5。然后點(diǎn)擊播放,觀察粒子的隨機(jī)擾動情況。幅度和旋轉(zhuǎn)尺寸值是我隨便設(shè)置的,多嘗試不同的值就能基本明白其含義。

退回到“popnet”節(jié)點(diǎn),后面連一個“trail”節(jié)點(diǎn),只要增加“Trail Length”的值,如100,就能看到每個粒子的在不同時(shí)刻留下的離散點(diǎn)軌跡。“Trail Increment”相當(dāng)于采樣步數(shù),控制離散點(diǎn)的數(shù)量。

換個顏色給個局部特寫——

我發(fā)現(xiàn)將“Result Type”改成“Connect as Polygons”,就直接得到了線條。但原視頻中的做法是使用“add”節(jié)點(diǎn)(筆記012中講過),不知道創(chuàng)作者的用意是什么,可能后面有用吧。

因?yàn)椤皌rail”節(jié)點(diǎn)中所有的點(diǎn)都有一個“id”屬性,所以在“add”節(jié)點(diǎn)中,“Add”方式選擇按照屬性(By Attribute)添加,屬性名稱(Attribute Name)直接填“id”即可。


接下來的步驟理解起來可能稍微有點(diǎn)費(fèi)勁,目的是為了讓粒子限制在模型的表面運(yùn)動。我們先跟著做吧,進(jìn)入“popnet”節(jié)點(diǎn),在“popwind”后面添加一個“sop solver”節(jié)點(diǎn),雙擊進(jìn)入節(jié)點(diǎn)內(nèi)部。

解算用到了“ray”節(jié)點(diǎn),該節(jié)點(diǎn)有兩個輸入端口,左邊顯示需要“Ray Points or Primitives”,右邊顯示需要“Collision Primitives”,看上去是和碰撞有關(guān)。

很顯然,左側(cè)就是粒子生成的點(diǎn),右側(cè)是原來的模型。但現(xiàn)在的節(jié)點(diǎn)已經(jīng)嵌套了,怎么連接到原來的模型呢?這里使用的是“object merge”節(jié)點(diǎn),可以在“object1”欄中輸入“../../../transform1”,即可調(diào)用相應(yīng)的節(jié)點(diǎn)。

現(xiàn)在只需要將“ray”節(jié)點(diǎn)屬性中的“Method”改為“Minimum Distance”(最小距離),神奇的事情就發(fā)生了。為了看得更清楚,我把粒子點(diǎn)顯示成了玫紅色。像是很多螞蟻在身上爬,有點(diǎn)難受。

后面只需把“ray”輸出為“OUT”,原視頻中整了一大堆,又是“point vop”,又是“primitive attribute”的,似乎……都沒什么必要。
最后,用“color”節(jié)點(diǎn)添加顏色。“Color Type”選擇“Ramp from Attribute”,“Attribute”使用現(xiàn)成的id即可。由于id的數(shù)值范圍在不斷變化,0~1顯然就不適合了。怎么辦呢?

好在“Geometry Spreadsheet”窗口中我找到了一個叫做“nextid”的detail屬性,這個值也是在不斷增加的。nextid就是下一個id號的意思,顯然是比現(xiàn)有的所有id值都要大,id/nextid范圍不就是0~1了么!我真TM是個天才~

那怎么調(diào)用這個屬性呢?用的是detail函數(shù),“detail("../add1","nextid",0)”。大家可以試試自己對著函數(shù)介紹能否寫出來。detail函數(shù)的括號中有兩個字符串(string)和一個浮點(diǎn)數(shù)(float)。兩個字符串分別是節(jié)點(diǎn)名稱和屬性名稱,都要加引號;一個浮點(diǎn)數(shù)一般起保險(xiǎn)作用,如果沒有這個屬性,返回值就為0。

播放結(jié)果如下——

如果要在Houdini中直接渲染線條,使用“Attribute Create”為其添加width屬性(約定俗成的做法),通過“Value”設(shè)置線條的粗細(xì)。當(dāng)然,這個“Value”也可以利用現(xiàn)有的點(diǎn)屬性來獲得由粗到細(xì)的漸變效果(提示:用id除以nextid)。

今天的學(xué)習(xí)到此結(jié)束,感謝各位的閱讀,下回見~