Houdini学习笔记009
自学Houdini的路上很关键的一点是能否找到合适的教程,由于难度跨越比较大,找不对路很容易放弃。能咬牙坚持下来的都有其过人之处。对于一个复杂的效果,光用文字肯定是无法说清楚的,所以刚开始我还能每个节点告诉你有哪些参数,应该怎么使用。但越往后可能就不会详细到这种程度,更多会讲解效果制作的思路。等到文字描述无力时,应该也就会尝试录视频讲解了。
今天来制作一个模拟枝晶生长的效果,用到的是solver解算器节点。基本的思路是在一个球表面散布点,每个点的位置生成一个小球。然后作为一个整体在表面重新散布点,新的点的位置再次生成小球,如此循环往复。
这是一个非常简单的迭代思路,如果是自己摸索的话我们应该会想到用scatter节点和copy to points节点。球可以选择polygon类型,我先散布5个点试试。至于球的大小可以自己设定。

第一次做完后,下面就是重复上面的步骤,这也是本案例的关键。创建一个solver节点,将散布点和拷贝球的相关节点复制到solver节点内部(双击或按快捷键【I】)。如下图所示,该节点内有一个Dop Import节点和多个Object Merge节点,前者就是每次迭代后的值。

将Dop Import和scatter节点相连,即每次重新输入的对象表面重新散布点,这里散布的点的数目可以有变化,我暂时仍固定为5个。按【U】键回到上一个层级,将solver节点与第一步的copy to points结果相连接。

这个时候滑动时间帧应该就可以看到小球不断往外扩张了,如果要播放的话记住启用Real Time Toggle,才会按正常帧速率播放。

这里我们要让每次迭代的结果都保留显示,所以要在solver节点内部加一个merge节点。每次迭代的结果都和之前的一起显示。

现在迭代就可以看到枝晶生长的效果了。

如果将后续迭代循环中散布点的数量增加至20,可以得到更多的分支。播放200帧后如下图所示——

那如果枝晶是从一个平面上长出来的,我只希望它往上方生长,该怎么实现呢?对于这种要求,考验的就是操作者的思路,实现的办法可能有数十种。不同的方法得到的最终效果肯定也有差异。比如我是这样考虑的,每次迭代散布点的时候,只在点坐标y>0的表面散布。
有了思路后,在每次scatter前加一个clip节点,切除y<0的部分,效果立竿见影。可以看到枝晶只会朝上方和水平侧向生长。

也可以用delete节点,用按照表达式的方式(Delete by Expression)来删除面(primitive),这里的表达式写“@P.y<0”,即点坐标y<0。可得到和上面一样的效果。

如果想让枝晶生长有更明显的朝上的趋势,还可以根据当前形状的大小只在上半部分散布点。只需要将删除的表达式改为“$BBY<0.5”即可,$BBY意思是元素在对象边界框范围内的y方向相对位置,$BBY<0.5就表示下面的一半。这样每次新的点只会散布在上半部分,如下图所示,你也可以将0.5改为0.6或0.4,得到不同的生长效果。

比如我将删除表达式改为“$BBY<0.8”,然后每次散布10个点,得到如下图所示的造型——

最后可以用三个vdb相关节点将一堆小球转为一体化的网格对象,可参考上一篇笔记,这里不做过多的详细介绍。

简单渲染如下——

今天就分享这么多内容,感谢各位的阅读,下回再见!