您需要 登录 才可以下载或查看,没有账号?注册
x
VEX是一种高性能的表达语言,在Houdini中很多地方都有使用,比如编写着色器
VEX评估通常非常高效,其性能接近已编译的 C/C++ 代码。VEX 不是脚本的替代品 ,而是一种更小、更高效的通用语言,用于编写着色器和自定义节点VEX是Houdini原生的,因此它的契合度最好,底层也经过优化
VEX 大致基于 C 语言,但借鉴了 C++ 以及 RenderMan 着色语言的思想
VEX 在 Houdini 的多个地方使用:
渲染 – Mantra 使用 VEX 进行所有着色计算。这包括光、表面、位移和雾着色器合成– VEX 生成器和VEX 过滤器COP 允许您在 VEX 中编写复杂的自定义 COP这些表达式的计算速度非常接近 C/C++ 速度,并且运行速度比 Pixel Expression COP 快 1000 倍粒子– POP VOP几乎可以让您做 POP 本身可以做的任何事情。可以编写一个单独的 VEX 函数来执行许多 POP 的任务。由于 VEX 代码仅限于一个运营商,因此 VEX 代码通常比 POP 网络运行得更快建模– VEX SOP允许您编写操作点属性的自定义表面节点。这可以移动点、调整速度、改变颜色。此外,您还可以对点进行分组或执行许多其他有用的任务。VEX SOP 的运行速度通常比点 SOP 快 10 倍或更多CHOP – VEX CHOP允许您自定义 CHOP。CHOP 函数可以操纵任意数量的输入通道并以任意方式处理通道数据。在某些情况下,VEX 代码的运行速度比编译后的 C++ 代码更快毛皮– 程序毛皮行为是通过 VEX 实现的
Attribute Wrangle【快捷键:TAB-->A-->W】Run Over这个参数,他代表代码将在哪种类型的组件上运行
Group Type : 指定处理对象所属的组名Group Type : 指定处理对象所属的组类型Run Over : 该脚本处理的属性所属类
这两个区别一个是给设置好了,一个是需要我们自己写一些
变量:浮点,整数,向量,数组
数组随机颜色
矩阵
矩阵和向量都有三种写法;矩阵3X3和4X4使用较多
属性创建;VEX中表示
#Vex创建组
if(@P.y>0) @group_zu = 1; //if判断 p高度 y轴大于0放在一个组内
多行代码写法(不能再第一行后面继续跟着写)
我们给在一个组内点颜色,创建属性继续判断
if(inpointgroup(0,"zu",@ptnum)) //if判断 inpointgroup判断某些点是否在组里面如果在返回1{ //输入端0号;名称;点序号@ptnum @Cd = set(0,1,0); //@Cd 判断成功四个点给一个颜色}
if(@ptnum==2 || @ptnum==3) || 或者,点等于3也会给红色 { @Cd = set(1,0,0); //颜色设置红色 }
并且:&&(先满足前面条件,然后做比较)
if((@ptnum==0 || @ptnum==2) && @P.y > 0) //点序号等于0或者2,并且y轴大于0 { @Cd = set(1,0,0); //颜色等于红色}
非:!
if((@ptnum==0 || @ptnum==2) && @P.y > 0){@Cd = set(1,0,0); }
else if(@ptnum!=5) //上面执行完毕,本段意思除了5号点其它都给绿色{ @Cd = set(0,1,0); //颜色设置绿色}
#循环语句
for循环
for(int a=0;a < 30;a++) //变量循环初始值; 循环次数; 循环后自加; { @P.y +=0.2; //循环过程中执行任务}
#while循环
int a=0; //定义初始值while(a<15) //括号内条件满足就向下执行{@P.y += 0.3; a++; //初始值是0每循环一次后+1}
#do while 循环
int a=0; //定义初始值do{@P.y += 0.5; a++;}while(a<20);
主要都是在y轴移动位置
#break
for(int a=0;a < 30;a++) //变量循环初始值; 循环次数; 循环后自加; { @P.y +=0.2; //循环过程中执行任务 if(a==15) //执行到15 break; //停止 }
#continue
for(int a=0;a < 30;a++) //变量循环初始值; 循环次数; 循环后自加; { @P.y +=0.2; //循环过程中执行任务if(a==15) //执行到15 continue; //跳过15继续执行 }
#VEX创建点线面
无需输入任何模型;也可以使用add节点添加点和坐标即可
addpoint(0,set(0,0,0));
vector pos = set(0,1,0); //也可以先定义坐标
int a = addpoint(0,set(0,0,0)); //变量接收点int b = addpoint(0,pos); //接受变量posint c = addpoint(0,set(1,0,0));
#创建线:prim
vector pos = set(0,1,0); //也可以先定义坐标
int a = addpoint(0,set(0,0,0)); //变量接收点int b = addpoint(0,pos); //接受变量posint c = addpoint(0,set(1,0,0));
int aa = addprim(0,"polyline",a,b);int bb = addprim(0,"polyline",a,c);int cc = addprim(0,"polyline",c,b);
#创建面:poly
addprim(0,"poly",a,b,c);
#常用函数
int a = 4;int b = 6;int c = max(a,b); //最大值int d = min(a,b); //最小值float f = 3.4;int aa = int(f); //整数int bb = ceil(f); //向上取整int cc = floor(f); //向下取整int ff = rint(f); //四舍五入int gg = pow(a,3); //指数
cout(gg); //打印
#自定义函数
int add(int a;int b){int c = a * b;return(c);}cout(add(5,8));
更多深入内容还需大家看更多视频学习,VEX在houdini中也是很重要一部分
官方文档
https://www.sidefx.com/docs/houdini/vex/index.html
推荐B站基础教程:
https://www.bilibili.com/video/BV1Mu41117Fa?t=5.4&p=10
本期笔记分享就到这里,我们下期见!
虚幻引擎5 BluePrint(蓝图)
UE5.2预览版PCG工具系列
Houdini基础入门系列 | Houdini大世界制作#更多详细文章分类https://docs.qq.com/sheet/DYkdBWklaZVRZYUta坚持与您分享最有价值“干货”内容,本期分享就到这里,我们下期见!
|