Houdini学习笔记023_VEX平面编织
今天分享一个简单平面编织结构的VEX画法。主要步骤是画交错的折线。

直接上VEX脚本(Attribute Wrangle节点中,Run Over方式为Detail (only once))——

这里我定义了几个变量:period是周期长度,height是高度,均为浮点型。

float period = chf('period_length');
float height = chf('height');
还有就是编织的行列数,分别用rows和columns表示,类型为整型。
int row = chi('rows');
int column = chi('columns');
ch是通道channel的意思,后面加的字母表示数据类型,如f-浮点型、i整型等。点击右侧箭头所指的图标即可创建出参数通道。

首先,从一条波浪折线开始画起,使用的是addpoint和addprim函数。前者只需要点坐标,后者还需要返回的点编号。这里可以用一个空数组来接收addpoint返回的编号。resize函数可以让数组的长度和rows或columns一致。
int ptr [ ];
resize(ptr, row);
用for循环语句来循环创建点,变量ptid用来接收addpoint函数的返回值,然后将其添加到ptr数组中。第i个点对应的编号为i。set函数用于设置每个点的坐标,对于一条波浪折线而言,x方向上第i个点的坐标为i*period/2,y方向上第i个点的坐标为height*(1+pow(-1,i+1))/2。pow是幂函数,-1的i+1次幂为-1或1,最终计算结果为0或height。

VEX表达式窗口不够大时,可按快捷键【Alt+E】弹出编辑窗口进行书写。如下图所示。for循环之后用addprim函数创建线条,创建类型为'polyline'。确认书写无误后点击Apply按钮。

现在调节参数就可以生成波浪折线了。

然后将上述过程进行重复,得到多组波浪线。使用for循环嵌套。写法如下。set函数中的点坐标为:
set(period*i/2.0, height*(1+pow(-1,i+1))/2.0, period*j/2.0);

现在有个小问题是,相邻的波浪线起伏的位置应该是互相交错的。解决的办法也很简单,将pow函数中的i+1改为i+j即可。

另一个方向的线条也是同样的生成方法。只需要将坐标调换即可。还有就是要定义一个新的数组,长度为column。其余均不变。

为了让纵横两组波浪线交错编织,pow函数中的幂次可由i+j变为i+j+1。

后面的步骤就比较简单了,先用resample节点重新采样,再用smooth节点平滑。

然后用sweep节点扫描得到截面,截面可以用circle节点创建(polygon类型)。扫描的End Cap Type选择Grid。如果法线不对,可以用reverse节点翻转。

最后,如果不想要最边缘的4根波浪线,可以在循环时从1循环到row-1或column-1。


就写到这里吧,感谢阅读,下回再见~