houdini中不得不掌握的技术集锦(11)粒子制作树木生长
—— 微资讯 · 微课程 ——
利用零碎时间,走上超神之路!
原文地址http://www.tokeru.com/cgwiki/index.php?title=HoudiniDops
由CG猎人独家翻译,转载请注明
使用粒子制作植物生长
反过来看感觉挺简单的,但是需要一些尝试和一些知识参考来完成这个效果,特别是在oddforce中的文章。
replicate pop节点有自身的说明文档,但是我没有想明白如何让它递归的生长。比如,我可以让它粒子分裂一次,但是我不能对分裂的粒子再次分裂。所有的发射器都有一个stream参数,在dops中类似于一个组的概念。默认下stream的名字是$OS也就是每个发射器自己的名字。要获得递归性的分裂,需要确保replicate分裂出来的粒子和emitter发射器发射出来的粒子共享相同的stream名字。在这里我吧这些粒子当做 leaders,所以我吧stream的名字修改为leaders
下一步就是控制什么时候有多少粒子分裂。replicate 节点可以使用一个point属性来控制splits分裂,所有我创建一个@split属性,这个属性由粒子的年龄比控制(@nage),当这个值超过一个阈值,@split设置为1,这个可以让replicate sop开始分裂。
最后,还需要一个replicate节点,但是大部分的选项都关闭,用来在leader后面生成一些拖尾。
还有很多细节需要关注。
我觉得你通过使用各种pop的节点工具来控制生长的想法很不错,碰撞,力,wrangle节点和被流体控制等等。加上这些小的测试,看到生长效果相当平滑。如果你需要在较短的时间制作一颗树,但是现在,感觉非常有趣。
这个同样对于pop粒子顺序展示的一个很好的场景,把东西翻转可以生成很不一样的结果,还有很多方法控制生长的纹理。我使用了interact pop节点,所以leader粒子可以相互躲避同时避开已经存在的粒子,还有一个wind节点,用来添加一些常用的noise。但是即使是控制分支粒子基础的速度变化对于最终效果也有很大的影响。
同样,在这个案例中还有一些努力用于制作一些合理的几何体;我通过sweep生成每个分支模型,然后转化为VDB,最后转化为密封的mesh。结果通常会带有isosurface中让人不爽的边,这个是基于世界空间对齐的,但是,它修复了接缝,并且不需要我额外的工作。
整体流程控制
在popnet中完成基本的粒子形态
popnet后面都是怎么处理mesh的部分
popnet中的基本粒子形态控制
poplocation发射一个点,速度方向向上→wrangle节点基于nage数值与自定义threhold阈值判定,设置属性@split来定义什么时候发生→使用popreplicate节点基于属性分裂→使用popkill基于粒子id控制分支的数量→通过interactive 和wind效果控制粒子的运动→使用replicate pop基于leaders组的粒子生成粒子,类似于solver中记录每一帧的效果
01poplocation 定点发射 参数设置:只在第一帧发射一颗粒子,并且设置生命长度为1;
设置速度为y轴为1,关闭其他速度方向
修改stream的命名,默认为$OS,修改为leaders(这个随意,能方便读取就好)因为后面 replicate中也要使用到相同的名字
02使用popwrangle定义属性@split什么时候开和关闭:这里使用到nage这个属性,这个是0-1的范围,是age/life的比例,threadhold设置值是0.7,只有大于这个比例值才会让@split值为1(类似于一个开关)
第一个replicate pop节点,用于粒子分裂发射,使用上面定义的@split属性进行控制什么时候分裂
分裂的发射形态从sphere 修改为point,否则就存在一个发射范围
attributes中不继承任何属性,然后设置速度0.5,这个值改变会影响最终粒子形态,激活add ID attributes(保证这里的ID和之前的不一样)
在stream中同样设置名字为leader,这样才能实现递归分裂的效果
这样子粒子会无线分裂下去,那么要判定什么时候可以停止分支,可以依据id来删除更多的多余的分支
03 popkill节点
设定branch_limit分支限定值,只要id的值比这个大,设置dead死亡为1;
04后面两个控制运动的节点
pop interact节点,可以控制粒子相互排斥,不会穿插:设置position force位置力强度为0.2,core radius检测半径为0.2,falloff radius衰减值为3.
popwind节点 使用vex控制wind强度随着年龄变大y轴的力变小,慢慢变成负值
设置amplitude强度和swirl size旋涡大小
05 使用replicate对每个点进行复制,类似于solver
这时候不需要任何属性驱动分裂复制,把生命之长度调整为100
发射器还是要point形态
id使用继承之前粒子id,并且设置速度都为0
stream名字为trail,其实无所谓,总之不要用回leaders就好
结果
popnet外面,把粒子生成模型
01 add 节点把点连成线,基于属性id
02wrangle节点通过age年龄设置@pscale值,底部age越大,pscale值越大
03color随机颜色控制
timeshift锁定某一帧
polyframe计算出法线N
使用sweep节点生成模型
制作封闭的cap面
使用divide获得cap的面
使用divide获得cap的面
使用fuse节点和vdb转化
—— CG猎人——
微信号:Hunter_CG
QQ-540710114
为您提供最具前景的咨询与最适合的分类技术与学习教程