Houdini学习笔记025_Trihexagonal编织
最近貌似和编织杠上了,哈哈……今天我们来编个猪头。和前面不同的是,这次我们换一种编织方式,如下图所示——

这种编织图案叫做Trihexagonal Tiling,是由六边形和三角形组成的。制作过程部分参考了岛国小哥Horikawa的教程(b站网址点这里),获得基本型的过程我进行了简化。

首先,我们需要有一个三角面构成的网格模型。直接用Houdini中的猪头pighead节点,类型选择easy,取消勾选Add Shader。然后用remesh节点进行三角化,Target Size默认为0.2。

接着添加divide节点,勾选Compute Dual选项,得到多边形面。

下一步我直接用了一个polybevel节点,将Stop Loops改为Individually。只要倒角的Distance足够大,就可以直接获得Trihexagonal结构。岛国小哥这里直接就上VEX了,技术可赞,精神可嘉。

到这里之后,我们怎么获得编织结构呢?其实只需要对于每个三角形,将一条边上的两个点一个往上移,一个往下移,得到新的线就可以了。算法就是这么简单直白。当然,这里的上和下指的是法线方向。

在使用VEX之前,我们还要对模型进行一些处理。先用fuse节点焊接所有的点,然后用delete节点删除多边形面。删除的方式选择Delete by Range,这个范围就是倒角之前的面(primitive)的数量。我们可以预先定义一个detail属性将其储存起来。

比如用Attribute Create节点在divide后创建一个detail属性,名称取为number,Value设为@numprim。数值类型为Integer。

之后删除时用detail函数获取范围值即可,写法为:
detail("../number/", "number", 0) - 1

下面终于到了今天的VEX时刻——
由于是对每个面上的点进行操作,使用的是Primitive Wrangle节点,即Run Over方式改为Primitives。每个primitive其实就是一个三角形,用primpoints函数获取一个点编号的数组,写法如下:
i[ ]@pts = primpoints(0, @primnum);
i[ ]表示整数型数组,pts是属性名称,这里创建属性只是为了方便在Geometry Spreadsheet窗口中查看。比如0号面的pts为[2,1,0]。

有了每个面的点编号之后,就可以获取其坐标和法线了。是不是很熟悉?和前面两篇笔记是相同的套路。虽然每个面上只有三个点,但还是可以用for循环语句。一共循环三次,i的值分别为0、1、2。每次循环我们要获取当前点和下一个点的信息,所以得知道这两个点的编号。
注意每个primitive中三个点的编号是不一样的,需要用pts[i]的方式来获取。比如当i=0时,获取pts[1]和pts[2]的点编号。而当i=2时,则要获取pts[2]和pts[0]的点编号。这里分别定义两个变量pt1和pt2,分别赋值为pts[i]和pts[(i+1)%3]。%是求余符号,如(2+1)%3结果就是0。还有就是访问属性前面不要忘了加@。

两个点的坐标用point函数获取:
vector pos1 = point(0, "P", pt1);
vector pos2 = point(0, "P", pt2);
然后是法线的获取,记得前面先用normal节点添加点法线。对点坐标进行偏移之后(定义offset变量用于调节偏移高度),用addpoint函数创建点。

最后用addprim函数创建线,写法为:
addprim(0, "polyline", npt1, npt2);
npt1和npt2分别为添加新的点时的返回值。
循环结束后用 removeprim(0, @primnum, 1); 语句删除原来的网格模型。

后面的过程比较简单,依次用fuse、polypath、resample、polywire节点得到编织的线条。resample节点的Treat Polygon As选择Interpolating Curves可得到平滑的曲线。

下面讲一下根据编织结构线条凹凸进行着色的设置。可以用setpointattrib函数给往内外移动的两组点分别添加不同的属性,如col,分别赋值为1和-1。

添加color节点,Color Type选择Ramp from Attribute,使用col属性进行着色。让向外凸起的点为白色,向内凹陷的点为黑色。

resample之后,会看到点属性的Cd值在0~1之间分布。

这时如果再添加color节点,用Cd属性来设置渐变色(范围为0~1),即可得到如下图所示的结果。

最初的输入端可以用null节点添加控制参数,这里我设置了remesh size、height和radius三个参数,分别调节三角化的尺寸、编织偏移的高度和最后线条的粗细。

输入其他模型后,调节这几个参数可以得到不同的效果。


这篇笔记就写到这里,感谢大家的阅读,下回见~