按住空格,在编辑模式下旋转,缩放和平移
revolve :车削操作,相当于旋转凸台
convert : 转化节点,将一种类型的几何体转化为另一种几何体,如primitive-》polygon
bend/twist/ : 弯曲/扭曲/锥化等节点
add :创建点
scatter :在模型表面撒点 (grid/box/primitive+scatter) curve也可以创建点 可以根据某个属性生成,与timeshift/attributecopy结合
point :对每个点执行一遍vex操作
primitive :对每个面执行操作
点属性可以包含法线/颜色/顶点/缩放/uv/速度等等
$PT 模型点序号 rand($PT) 生成随机数
camera视角调节,点中视图右侧的锁,可以修改摄像机视角,在取消选择锁
copy and stamp :传入点控制复制物体的位置,方向,缩放等
stamp 在两个分支之间,其中一个分支要使用另一个分支的数据,可以使用stamp函数传递
stamp("../copy1", "sides", 5)
bbox函数 查找最值
mountain 节点:技巧:mountain叠加:第一做大的形体变形塑造,第二个做细节上的修改
switch节点 传入多个节点,根据case的值选择生效的节点
divide节点 将模型细分
subdivide 细分节点
facet 计算法线,使模型点分离
measure :测量节点,可测量面积体积等等
timeshift :获取某一时间/帧的属性
attributecopy:复制某一节点属性给另一节点,与timeshift结合使用,可以获得模型变化情况下的常量
trail :拖尾
resample :曲线重采样,加点
remesh :高模转低模
isooffset :将模型转化为实体,可以配合scatter在模型内部撒点
rest position : 存储模型位置信息
carve :剪切节点 线从起点终点消失
polywire :曲线变成多边形
clip :裁切节点
C :创建选盘
X : 吸附功能
常见属性:
@Cd :点的颜色(vector3)
@P :点的位置(vector3)
@N :点的法线(vector3)
@ptnum :点的序号 int
@numpt :点的总数 int 注意类型转化,int/int得到int,容易出现的==0的情况
ch函数,既可以引用其他节点的数值 : ch("../pos/px");
也可以在当前vex节点下创建一个通道。
如ch("scale");将在当前节点下创建一个scale滑条。
chv 同ch,不过是创建一个vector3的通道
三角函数:
使用弧度制。
在Vex中使用和创建属性非常简单
直接@Value即可,如果不存在该属性则houdini会自动创建该属性并赋值
length(@P) 测量一个点到原点的距离
distance(p1,p2) 测量两点的距离 float d = distance(@P, {1,0,3} );
fit() 映射函数 如 @Cd = fit(sin(d),-1,1,0,1);
clamp() 钳制@P.y = clamp(d,0,3); P.y取值在0-3
chramp() 自定义映射曲线 d = chramp(‘my_stepped_ramp‘, d);
trunc() 取整函数
在片元primitive中调用@P,获得的是当前片元的中心点
在houdini中创建VOP可以查看点,面Vetex的各种可用内置属性
minpos(0,@P) :获取输入2网格中与输入1当前遍历点相交的最近位置,(注意不是模型上的点),前面一个参数代表与那个输入的网格相交,这里是二
nearpoint(1,@P) :获取输入2中与输入1最接近的点并返回它的@ptnum
nearpoints int pt = nearpoint(1,@P);
point函数:获取输入的某个ptnum的属性值 @Cd = point(1,‘Cd‘,pt);实际上可以用opinput1_Cd代替。其他同理
噪声
noise,curlnoise,pnoise(vector4 xyzt, int px, int py, int pz, int pt);
点积 dot(@P,@N)
叉积 cross()
normalize()归一化函数
relpointbbox()将最左下角归为0,最右上角归为1
vex支持三目运算符
数组
float myfloatarray[] = {1,2,3,4,5};
vector myvectorarray[] = {{1,2,3},{4,5,6},{7,8,9}};
简易写法并赋值给属性:
f[]@a = {1,2,3,4,5};
v[]@vecs = {{1,2,3},{4,5,6},{7,8,9}};
v@a = {10,12,100};
i[]@a = pts;//int类型数组
houdini的foreach循环
foreach( element; array) {
// do things to element
}
for(int i=0; i<len(pts); i++) {
}
#创建几何体
addpoint(index,@P) 返回一个ptnum,index表示在第几个几何体中创建
int pt = addpoint(0,{0,3,0});
addprim(0,‘polyline‘, @ptnum, pt);
#删除几何体
removepoint(0,@ptnum);
removeprim(0,@primnum,1)//保留点
removeprim(0,@primnum,0)//删除点
@pscale 统一缩放属性
@scale 非统一缩放{x,y,z}
注意数组的初始化方式:@scale = {1, d, @Cd.g}; // nope
@scale = set(1, d, @Cd.g); // better
copy节点的方向应用:@N确定模型的y轴朝向,@up确定模型的z轴朝向
v@up = set(sin(t),0,cos(t));
@P.y += sin(t*2)*0.5;
四元数旋转:
quaternion(angle,axis(v))
如:
float angle = ch(‘angle‘);
axis = chv(‘axis‘);
axis = normalize(axis);
@orient = quaternion(angle, axis);
orient属性会在copy节点使用作为旋转量
setprimintrinsic函数给内部属性写入值
matrix3 m = ident();//ident返回该类型的单位矩阵
setprimintrinsic(0, ‘transform‘, 0, m);
//旋转缩放矩阵
@orient = quaternion({0,1,0}*@Time);
v@scale = {1,0.5,1.5};
matrix3 m = ident();
scale(m, @scale);
m *= qconvert(@orient);
setprimintrinsic(0,‘transform‘,@ptnum,m);
4*4旋转缩放位移矩阵
matrix pft = primintrinsic(0,‘packedfulltransform‘,@ptnum);
4@a = pft;
转化为3*3矩阵时,将会丢弃位移矢量:
matrix3 rotandscale = matrix3(pft);
3@b = rotandscale;
#获取几何体上的信息
primuv 获取几何体对应uv上的信息
vector uv = chv(‘uv‘);
@P = primuv(1,‘P‘,0,uv);
@N = primuv(1,‘N‘,0,uv);
点云
pcopen 获取近点云
pcfilter 对点云取均值
可以是位置,可以是颜色,可以是法线,任意属性!
int mypc = pcopen (1 , ‘P‘ , @ P , ch (‘d‘ ), chi (‘amnt‘ ));
@ P = pcfilter ( mypc , ‘P‘ );
@ N = pcfilter ( mypc , ‘N‘ );
@ N =normalize(@ N ) * 2 ; //以使其更易于查看!
原文:https://www.cnblogs.com/Afuness/p/11631815.html