Houdini学习笔记011
软件一段时间不用很容易忘记基础操作,特别是学习Houdini时,有些知识点需要反复巩固学习以加深印象。今天我们就来回顾下之前学的一些知识。
还是从一个基础的节点“sphere”开始,因为我们公司名字就叫SPHERE(思斐迩),哈哈。

默认的球体类型是primitive,这是Houdini中一种特殊的对象类型。可以理解为一个基元,或者一个piece。它可以是一个多边形面,一段多边形曲线(polygonal curve),或者一个元球(metaball)等。
在primitive类型的球体信息中,我们看到只有1个点的坐标信息,即球心。整个球就是一个对象基元,其参数中的“frequency”为灰色。如果需要用多边形的方式编辑球面上的点,需要将其类型改为polygon或mesh等模式。

这里我只是借用球的形状而已,所以直接用默认的primitive模式即可。接下来我想在球的内部随机分布一些点,用的是“scatter”节点,大家应该很熟悉了。但直接使用得到的点是分布在球的表面,所以需要先连接一个“isooffset”节点,然后就可以在球体积内分布点。分布点的数量(Force Total Count)可以设为100个。


然后用“copy to points”节点在每个点的位置处拷贝metaball。metaball类似于C4D中的融球,可以制作水滴融合的效果。根据整体的尺寸设置metaball的半径值,比如这里设为0.3左右。拷贝后相邻的metaball会自动发生融合。

但是我发现融球的分段数不够,因而形状不够圆滑。直接改“metaball”节点的“weight”参数只能修改每个元球的尺寸,而不是分段数。一般遇到这种情况我会先自己摸索一阵,比如这里我试着搜索“meta”,找到了一个“convert meta”节点。将其连接到metaball节点后,就可以用“Step Size”来控制其分段了。

具体连接时,节点的顺序也需要注意。先拷贝再convert才能得到我想要的结果,这应该跟对象的类型有关,“convertmata”会将metaball转为多边形对象,如果先使用“convertmata”那么每个点拷贝的都是单独的多边形球,彼此之间无法发生融合。如果先用“copy to pioints”节点,那么得到的将是融合后的metaball对象,再用“convert meta”节点转为多边形对象。
如果你拿不准对象的类型,可以在节点信息或Geometry Spreadsheet面板中看看其有哪些属性。这个例子中,“copy to points”节点继承的是“scatter”的点(points)坐标信息。“metaball”只是在每个点生成一个metaball对象,100个点就得到100个metaballs。

等到“convert meta”之后,points的数量变成了16041个,metaballs消失了,取而代之的是多边形(polygons 16082个)。现在的点坐标和之前scatter的点坐标不同,而是多边形表面的点坐标。在Geometry Spreadsheet面板中可以看到每个点详细的坐标信息,除了坐标(P)信息,还自动生成了法线(N)信息。


额外提一句,Houdini中的对象属性是可以随时随地增加或者删除的。例如这里我不需要点的法线属性,可以用“attribute delete”节点,在“point attributes”栏输入N即可。对应的在Geometry Spreadsheet面板中N的属性就没有了。

如果我需要增加属性的话,可以使用“attribute create”节点。在此之前,我先适当增加分布点的数量,如150个,让融球效果更多一点。

增加属性并不是漫无目的的,我们需要用属性来实现自己的目标。比如我希望让每个点分布的融球大小不一,那么就可以用现成的pscale来实现。具体的,在“scatter”节点后添加“attribute create”节点,属性名称设为pscale,默认是添加给points,数据类型为float(浮点型)。将“Value”值设为1则和之前没有任何区别。Geometry Spreadsheet面板中points会多出一个pscale的属性,所有值均为1.0。

现在将“Value”改为rand(@P),就可以得到随机的pscale值。之前我们用的是rand($PT),是根据点的编号(id)来作为随机种子。这里我们用的则是每个点的坐标,因为每个点的坐标都不一样,所以获得的随机值也各不相同。随机值的范围在0~1,结果如下——

如果需要自己设定随机值的范围,可以用“a*rand(@P)+b”的方式。如0.6*rand(@P)+0.6,范围就是在0.6~1.2之间。当然,也可以用fit01表达式写为“fit01(rand(@P),0.6,1.2)”。

得到如下所示的结果——

同样的,还可以添加Cd属性来获得随机颜色的效果。如果Cd属性是添加给scatter的点的,那么最终的颜色体现为每个融球色彩不同。如果是加在最后一步,那么则是每个点的颜色不同。

好了,就复习到这里吧。本次分享到此结束,感谢各位的阅读,下回见~