Houdni Vex 概要及实例,一(@,channel,common function)
发布网友
发布时间:2024-10-01 17:20
我来回答
共1个回答
热心网友
时间:2024-10-17 17:58
Wrangle中文翻译为“纠缠”,而Vex是Wrangle中主要使用的语言,它能够方便地对输入的顶点、图元进行各种自定义化操作。在Vex中,类似@Cd = @N的写法非常简洁,其他语言需要创建@Cd分配内存并且遍历所有顶点,但Vex却已经在后台为您完成了这些,运行效率极高。
原文:tokeru.com/cgwiki/index...
本文对作者的教程进行了总结筛选,还加入了一些自己的理解以及搜集的资料,方便以后用到的时候快速查找常用属性和简单案例。
基础属性包括:@P(点位置信息)、@N(法线)、@Cd(颜色)、@ptnum(点ID)、@numpt(点总数)、@Time(时间变量),还可以通过创建attrib vop查看其他变量。
另外,还可以创建自己的点属性,例如f@rot = 1.;在后续的wrangle中调用。其中f是变量类型,rot是变量的名字。
变量类型有:f(浮点)、s(字符)、v(矢量)、marix(矩阵)、f[]、i[]、v[](数组)。
提示:1、@Cd = @N.y;自动填充三个通道;2、@Cd = float(@ptnum)/@numpt; 颜色是float3,int需要转换float才能通过除法得到float;3、modulo:% 除模,返回剩下的余数,也适用于float,例如@Time%0.7。
自定义UI变量(Channels)包括:ch('scale')(滑块浮点变量)、chv('vector')(滑块矢量变量)、chramp('ramp', a)(曲线编辑,给定一个输入范围[0,1]按照编辑的曲线输出)。
提示:1、别重名,即使它们的变量类型不同;2、如果声明了一个ch(),直接修改成chv(),界面UI是不会即时更新的,最快的方法是点设置选择delete spare parameters,然后re create它们。
常用函数有:length()(到原点的距离)、distance()(点到点的距离)、fit()(把输入输出映射在自定义区域内)、clamp()(限制)、trunc()(取整)、normalize()(归一化)、len()(返回对象的元素个数)、minpos()(返回第一个模型上距离第二个模型最近的点)、point()(获取输入顶点的属性值)、nearpoint()(搜索输入2中距离输入1的最近顶点)。
例1:(使用的节点在系列示例的第一个gif当中,其中scatter是在grid上随机地散布一定数量的顶点,color的作用是对顶点随机上色,然后在wrangle中,计算与grid最近的顶点,并且把颜色附加到原grid的顶点上。)
例2:
例3:
nearpoints():储存最近点的数组,nearpoints(geometry, pt, maxdist, maxpts)maxdist是最大搜索距离,maxpts是最大点数。(后面会结合其他函数共同说明)。
noise()(噪声):1、@Cd = noise(@P*ch('scale'));以ID随机颜色,noise可以控制其大小;2、@Cd = noise(@P*chv('fancyscale'));获得一个非线性noise;3:@Cd = noise(@P+chv('offset')); @Cd = noise(@P+@Time);的移动。
curlnoise()(卷曲噪波):例:
还有很多诸如此类的其他噪波,pnosie()等等。
dot()(点乘):使用形式如:@Cd = dot(@N, {0,1,0});,@Cd = dot(@N, chv('angle'));
例:(使用的节点在系列示例的第一个gif当中)用add添加顶点,0为顶点ID,点击左边的坐标图标可以移动 pos = normalize(pos);然后进行简单的漫反射计算:@Cd = dot(@N, pos);
cross()(叉乘):例:
relpointbbox()(返回顶点相对几何中心的边界框相对位置):e.g. relpointbbox(0,@P).y,可以获得一个自下而上的0到1的采样。
简单对模型处理@P = normalize(@P);会获得类似球面化的效果:如果使用relpointbbox(),可以根据z轴位置控制效果影响的大小。
例:
Vex 函数列表:sidefx.com/docs/houdini... (收藏,等熟悉的时候会经常使用) 交流群:672571935