原视频:https://www.youtube.com/playlist?list=PLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI
Bili:Houdini最强VEX算法教程 - VEX for Algorithmic Design_哔哩哔哩_bilibili
Houdini版本:19.5
一、参数类型
1、什么是参数
例如创建一个多边形小球Sphere,它的默认参数有半径Radius、中心Center、旋转Rotate、大小UniformScale、轴向Orientation、频率Frequency……等
2、编辑/创建参数
在Geo创建NULL节点并命名为<Params_Type>,如图点击即可打开参数面板
拖拽左边参数到中间,点击Apply即可创建参数
此处请注意参数描述的<Name>和<Label>,<Name>相当于ID,在VEX代码中需通过该名字才可访问它的值,<Label>是参数面板中的名字(自定义参数也可以在<参数描述窗口>的<Type>选择参数类型)。
3、更多参数类型:
3.1、其中的<Menu>参数,如上图所示可在<参数描述>窗口的<Menu>编辑;
3.2、其中的<toggle value>参数:勾选值为1,不勾选值为0;
3.3、其中的<float ramp value>参数可以点击下箭头,可将图形最大化(X轴Y轴大小范围均为0~1):(重映射参数)
点击小箭头后变成:
二、参数引用
1、参数的复制与引用
基本上,节点参数都可以直接右键<复制参数CopyParameter>,在另一(节点)参数,,<粘贴相对引用PasteRelativeReference>
eg.使用上面的<Params_Type>节点<float value>参数控制小球Sphere的大小UniformScale:
按图操作后,滑动float value,即可控制小球大小。(左键+中间可恢复默认值)
2、Menu、String参数类型引用
eg.以Menu Value为例,在<Params_Type>节点的<Menu Value>处右键复制参数CopyParameter:
在创建的font节点文本处<粘贴相对引用PasteRelativeReference>,结果如下:
3、可多多尝试其它参数类型,感受其变化。
三、使用VEX访问参数
更多通道用法可查看官方文档functions的NODES,截图仅显示部分:
1、通道参数—channel
除了使用上面拖拽的方法新建参数外,也可以使用VEX方法创建通道channel,
string stringValue = chs('string_value');
float floatValue =chf('float_value');
int intValue = chi('int_value');
float rampValue = chramp('ramp_value',floatValue);
写好代码,点击右边按钮生成,也可以理解为访问通道channel参数,操作及运行结果如下:
2、访问channel参数示例
以控制小球Y轴移动示例,
继续使用前面的<Params_type>节点,再创建一个多边形小球及<attributeWrangle>节点。复制<Params_type>节点的float参数,在<attributeWrangle>节点粘贴相对引用
@P.y = @P.y +`chs("../Params_Type/float_value")`;
// chs返回一个字符串,外面的反引号 `` 将其转换成数值
// ../指在当前整个网络节点内
// Params_Type指需要访问的节点
// float_value指访问的具体参数
按下图完成操作后,即可在<Params_type>节点的<float value>处控制小球Y轴移动。
代码也可以改成
//@P.y = @P.y +`chs("../Params_Type/float_value")`;
@P.y = @P.y + ch("../Params_Type/float_value");
//ch直接将其转换成数值(ch常用且强大,可以转换成任何种数据类型)
//所以该行代码也可以写成 @P.y = @P.y + chf("../Params_Type/float_value");
3、把<粘贴相对引用>作为<变量>
观察上方代码,因为粘贴的<粘贴相对引用PasteRelativeReference>实际是一个值的名字,若名字/float value发生改动,则需要手动进行相应修改;
对上面<2>进行修改操作如下:
给<attributeWrangle>节点编辑参数-->拖拽一个float类型通道channel,ID及名称命名为<fval>(也可以写完代码后点击右边按钮,直接生成一个float类型通道channel)
按图操作后,即可在Params_type节点的float value处控制小球Y轴移动。
四、VEX与渐变参数Ramp
1、float ramp类型参数——重新映射值
创建一个多边形小球<Sphere>和一个命名为<float ramp>的<attributeWrangle>节点,
f@val = chf('scaleVal');
@P *= chramp('ramp',f@val);
//chramp根据f@val值返回一个映射的Y轴,不懂往下看
按图操作后,滑动<Scaleval>即可控制小球大小。
编辑<Ramp>参数,首先打开<+>号下面的<下箭头>,使曲线图最大化:
对曲线进行编辑如下图所示,所有点均选择为<Bezier>,使曲线更平滑;<Scaleval>参数类型默认0~1,<Ramp>参数横竖值范围都是0~1;
按图操作后,滑动<Scaleval>值就可以控制小球<Sphere>从【大->小->大】变化。
<Scaleval>值相当于<Ramp>参数的<X>轴,是一对映射值,<Ramp>返回相对于<Y>轴值。
2、color ramp类型参数
与<float ramp>类型参数类似。
创建一个多边形小球<Sphere>;添加一个命名为<color ramp>的<attributeWrangle>节点,
@Cd = chramp('ramp', chf('val'));
编写代码后,点击右边按钮生成通道channel,点击右上方按钮将<Ramp>的<RampType>换成<Colror>,
按图操作后,滑动<Val>即可控制小球颜色从蓝色到青色进行拜变化。
3、当然,不同节点间的<Ramp>类型通道channel也可以进行<复制>和<粘贴引用>。
五、参数表达式
1、全局变量与函数表达式(官方文档介绍)
一些常见全局变量:起始帧$FSTART、结束帧$FEND、$F当前帧……
截图仅截部分,更多可查看官方文档。
创建一个多边形小球<Sphere>;添加一个命名为<golbal_variable>的<attributeWrangle>节点
按图操作后,点击播放按钮,小球逐渐变大。
2、局部变量
继续上述操作,添加一个<Transform>节点,并添加局部变量<$SIZEY>,然后再乘以0.5
按图操作后,点击播放按钮,小球逐渐变大的同时,向上移动(在球的Y轴二分之一处变大):