[Houdini] 簡易粒子消散效果
如果我們想做類似樹葉飄落,蒲公英飛散這種粒子數(shù)固定,逐個激活的效果,pop network的粒子源節(jié)點并沒有提供這樣的功能,它更像是設(shè)計用來發(fā)射粒子。
pop network接受粒子源的數(shù)量變化,也就是如果粒子源隨著時間變化,pop network里的pop source也跟著變化。
pop source有4種類型。All Points,每一次solver解算,都生成一次所有的粒子。All Geometry,每一次solever解算,都生成一次所有的幾何體。Points,隨機在所有點里選擇點發(fā)射粒子,可以控制發(fā)射粒子的數(shù)量。Scatter on Surfaces,在幾何體表面撒點發(fā)射。
我這種做法不知道算不算簡單,寫了幾行代碼。
思路就是pop source用All Points類型,每次只給pop solver一個或幾個點,把所有點都給一次,不能重復(fù),這樣pop solver就逐個解算粒子源的粒子了,這樣出來的效果是粒子逐漸變多,數(shù)量最終達到粒子源的數(shù)量。
關(guān)鍵步驟是怎么把粒子一個一個的拿出來不重復(fù)。如果粒子數(shù)量不變,粒子的@ptnum就是他的身份編號,我們用這個保證不重復(fù)。因為隨著時間變化,粒子逐個出現(xiàn),還要用到一個關(guān)于時間的變量,我們用@Frame。
在第一幀的時候,我們叫一號粒子出來,第二幀的時候叫二號粒子出來......代碼是if(@ptnum!=@Frame-1)removepoint(0,@ptnum);這樣的效果是粒子隨著幀數(shù)的變化逐個出現(xiàn)直到幀數(shù)達到源粒子數(shù)然后不再出現(xiàn)。
但是這樣粒子全部出現(xiàn)一遍的時間和粒子數(shù)量有關(guān),我們想控制這個時間。我這里用方法是把粒子編號重映射到我們想要的時間,也就是幀數(shù),給他一個新編號,叫fitid。代碼是f@fitid = ceil(fit(@ptnum,0,@numpt,1,chf('time')/@TimeInc));

然后再提取點給solver解算。

最后,我們還要把每次提取點后剩下的點合并到的解算結(jié)果里達到一個完整的效果。代碼是if(@Frame>@fitid) removepoint(0,@ptnum);

整個節(jié)點在下圖。

這樣粒子激活的順序和它的粒子編號有關(guān),我們可以用sort節(jié)點按照屬性給粒子重新排序達到想要的效果。