欢迎光临散文网 会员登陆 & 注册

[Houdini] 简易粒子消散效果

2022-04-06 18:06 作者:pandahgt  | 我要投稿

如果我们想做类似树叶飘落,蒲公英飞散这种粒子数固定,逐个激活的效果,pop network的粒子源节点并没有提供这样的功能,它更像是设计用来发射粒子。

pop network接受粒子源的数量变化,也就是如果粒子源随着时间变化,pop network里的pop source也跟着变化。

pop source有4种类型。All Points,每一次solver解算,都生成一次所有的粒子。All Geometry,每一次solever解算,都生成一次所有的几何体。Points,随机在所有点里选择点发射粒子,可以控制发射粒子的数量。Scatter on Surfaces,在几何体表面撒点发射。

我这种做法不知道算不算简单,写了几行代码。

思路就是pop source用All Points类型,每次只给pop solver一个或几个点,把所有点都给一次,不能重复,这样pop solver就逐个解算粒子源的粒子了,这样出来的效果是粒子逐渐变多,数量最终达到粒子源的数量。

关键步骤是怎么把粒子一个一个的拿出来不重复。如果粒子数量不变,粒子的@ptnum就是他的身份编号,我们用这个保证不重复。因为随着时间变化,粒子逐个出现,还要用到一个关于时间的变量,我们用@Frame。

在第一帧的时候,我们叫一号粒子出来,第二帧的时候叫二号粒子出来......代码是if(@ptnum!=@Frame-1)removepoint(0,@ptnum);这样的效果是粒子随着帧数的变化逐个出现直到帧数达到源粒子数然后不再出现。

但是这样粒子全部出现一遍的时间和粒子数量有关,我们想控制这个时间。我这里用方法是把粒子编号重映射到我们想要的时间,也就是帧数,给他一个新编号,叫fitid。代码是f@fitid = ceil(fit(@ptnum,0,@numpt,1,chf('time')/@TimeInc));

fit id


然后再提取点给solver解算。

active points

最后,我们还要把每次提取点后剩下的点合并到的解算结果里达到一个完整的效果。代码是if(@Frame>@fitid) removepoint(0,@ptnum);

other points


整个节点在下图。

完整节点图

这样粒子激活的顺序和它的粒子编号有关,我们可以用sort节点按照属性给粒子重新排序达到想要的效果。

[Houdini] 简易粒子消散效果的评论 (共 条)

分享到微博请遵守国家法律