【houdini】CG猎人第014期houdini完全基础入门学习-vex基础

——  微资讯 · 微课程  ——

利用零碎时间,走上超神之路!


断更了一段时间的houdini完全入门系列又开始了,不过也快到结尾了。今天带来的是vex快速入门教程,使用2个简单小案例把vex中最常用的属性和函数都介绍了。对于入门的学习还是非常不错。小编把重点内容也做了解释和标识。同时附上houdini16的制作文件,希望对大家学习有所帮助。

一什么是vex

在houdini中,之前是用于编写材质,但是在最近的版本中vex功能得到扩展,从控制点面和粒子等各种地方的拓展,几乎在任何地方都可以用vex。

二为什么学习vex和局部变量的关系

在houdini14之前,没有直接节点通道中输入vex的方法,只能使用局部变量$PT之类。但是后来版本直接在节点通道中支持输入vex,非常方便,并且运行效率更高。

三 简单案例一

给sphere添加法线

旧版方案 使用point节点在法线通道添加$NX,$NY,$NZ使用局部变量进行法线设置

新版方法,直接使用attributewrangle节点直接设置 代码 @N=@N;

vex的基本格式

@变量符号+变量名字,查找变量名字最便捷的方法直接添加vop节点进入内部,可以查看最常用的vex的变量的名字。

在wrangle中输入表达式需要以;号结尾

对于矢量元素的单个元素访问,使用点格式

比如 @N.x,@Cd.r(其实写成@Cd.x也是可以的)

把小球整体上移一个单位

point节点在position的y轴上@P.y+1

wrangle节点,使用set函数,或者单独某个通道进行叠加,下面两种写法都可以

@P+=set(0,1,0);

@P.y+=1;

@v=@N;把法线赋予给速度,vex中可以进行属性值传递

对于局部变量中的$BBX,$BBY和$BBZ的边界框的值

在wrangle中获取使用函数  relbbox()函数,返回的是是一个矢量,一般对与这类函数,至少有一个值,第一个值一般都是wrangle的输入端,0-3一个四个输入端口。

要访问参数,使用函数ch()进行访问,也可以使用wrangle的快捷方式快速创建一个自定义的参数(右边小+号)

案例二 制作随机挤出控制

point节点中设置

$PT/($NPT-1) 基于点序号进行0-1的渐变控制,用vex的写法就是 @ptnum/(@numput-1)

但是在wrangle中写法有点不一样。如果直接是@ptnum/(@numput-1)这种写法,那么返回的值是0,因为数据类型是整数计算,结果也是整数,所以所有小数都强制转化为0。那么要正确的写法,可以先把某个变量转化为浮点形式即可。

方法一 简洁转化

@Cd=0;

f@b=@ptnum;//这一步就是定义了浮点b用于继承@ptnum的值,实际上就是转化为浮点的过程。

@Cd.r=@b/(@numpt-1);

方法二 数学转化

@Cd.r=@ptnum*1.0/(@numpt-1) //这种通过整形*浮点的形式得出结果也是浮点,当然,也可以让@numpt*1.0

方法三,使用函数形式

@Cd.r=float(@ptnum)/(@numpt-1)//通过float()函数把整型转化为浮点形式;

制作随机挤出动画

wrangle节点,需要注意的是我们是对面挤出,所以要切换到面层级;

@Cd=noise(@P/2+@Time);//noise函数,叠加了时间@Time,会生产紊乱动画

f@b=chramp("m",@Cd.r);//获得渐变spline的快速写法,chramp()函数

f@zscale=@b*rand(@ptnum);//定义了zscale属性,并且对点进行随机采样

添加polyextrude节点,要使用上面变量@zscale的值控制polyextrude的中的

local局部变量。divide into 挤出模式为 individual element单独的元素。

至于是否是zscale这个名字无所谓,只要上下保持一致就行。

案例三 使用区域控制点变形

新建猪头作为初始化物体

新建rubber玩具作为目标物体

新建box做为控制范围

对猪头和玩具模型进行scatter撒点并且sort按y轴排列(scatter是为了保证变形点是一一对应,sort是保证顺序是从上往下序号排列,这样点是依据需要进行一一映射变形)

分别连接到input0,1,2中

@Cd=relbbox(2,@P);//获得第三个输入端中box的编辑框范围,转化为颜色

@Cd.g=clamp(@Cd.g,0,1); //使用颜色中的g也就是y周,但是由于编辑框取值可以超过0-1,所以需要限制

@P=lerp(@P,@opinput1_P,@Cd.g); //lerp函数基于@Cd.g做mix的切换,@opinput1_P是反问第二个接口属性P的快捷写法,一般可以使用point(1,"Cd",@ptnum)函数进行获取。

获得教程的方法:

(0)

相关推荐