Houdini的Truchet(特鲁谢)花纹制作

今天来做一个Truchet(特鲁谢)花纹,这种图案最早是1704年由Truchet描述的,是一种非旋转对称图案装饰的方形tiles(瓷砖)。这里我们要创建的是比较经典的一种,如下图所示。
创建思路并不复杂,就是先拷贝基本图案生成网格阵列,然后每个单元按照特定角度(90°、180°、270°)随机旋转即可。
关键步骤其实就是怎么添加随机属性,每个人可能都有自己习惯的做法,但基本原理都是相通的。下面是我的操作步骤。
首先用“circle”节点创建一段四分之一圆弧,“Primitive Type”选择NURBS Curve,“Arc Type”选择Open Arc(开口)。“Arc Angles”设置为0~90度,所在的平面“Orientation”改为ZX Plane。
将“circle”节点的中心“Center”改为(-1,0,1),然后用“mirror”节点做对称操作,对称方向“Direction”为(1,0,-1)。得到如下所示的对称线条。
然后创建一个网格作为拷贝的目标点,设置网格的单元大小为单位1(和圆弧半径匹配)。采用的是参数关联的方式(参考笔记004),将“Rows”的参数关联到“Columns”,以及“Size”。注意“Size”的数值为“(ch("rows")-1)*2.0”。
现在直接用“copy to points”节点拷贝的话,弧线的方向并不是我们想要的。默认的结果是将弧线单元的z方向朝向了平面的法线方向(这里为竖直向上,注意此处虽然没有N属性,但拷贝时默认垂直于平面向上)。
需要让弧线平躺也很简单,只需要设置法线方向为(0,0,1)或(1,0,0)即可。这里我用的是“attribute create”节点,创建的属性名称“Name”为N,“Type”选择Vector(矢量),“Value”设为(0,0,1),即z方向。
接下来就是怎么让法线的角度随机旋转。旋转是在XZ平面内的,或者说绕着(0,1,0)轴的方向旋转。且旋转的角度只能是0、90、180或270度。由于还没有学习到VEX,我们还是先用“point VOP”节点来解决。双击进入“point VOP”节点内部,将N属性乘以一个“rotate”旋转矩阵,旋转的“Axis”设为(0,1,0),输入“Angle”的值即可让法线角度发生旋转。例如输入“$PI*0.25”,即旋转45度。
如果不知道发生了什么可以退回上级节点(按【U】),显示点法线观察。
那怎么让法线旋转角度随机呢?在“point VOP”中,我输入了“rand”,找到一个叫“random sobol”的节点,用点坐标P作为种子“seed”,生成0~1的随机数。注意这里的“Signature”选择“3D Vector Input, 1D Output”,因为输入的坐标是三维矢量,输出的是一维的浮点数。“Offset”相当于偏移值,可以改变随机数的数值,可以参照笔记012作为外部参数来调节。
获得0~1的随机数后,乘以4扩大到0~4,然后用“floor”节点向下取整。比如随机数值为1.652,向下取整就是1。这样将0~4的随机数转化为0、1、2、3四个整数,且每个数的取值概率都是一样的(25%)。
然后再乘以“$PI*0.5”(90度),得到0、90、180、270四个角度输入到“rotate”节点的“angle”端口中。
现在就可以看到拷贝后随机旋转的结果了。调节“point VOP”节点的“offset”值可以得到不同的随机花纹。
接下来是对线条进行重新采样(resample)、融合点(fuse)、生成柱状(polywire)、细分平滑(subdivide),没什么难度。
最后我又给每个点添加了随机颜色属性,用的是“attribute randomize”节点,属性名称为Cd,设置颜色RGB的Min Value和Max Value即可。