Houdini中的VEX语言基础【第十一课】
Game艺视界原创文章原创 39251 0
实名

通过了实名认证的内容创造者

发布于 2023-7-29 01:44:51

您需要 登录 才可以下载或查看,没有账号?注册

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这个参数,他代表代码将在哪种类型的组件上运行
80aee65273f933e2f928272355911f3e.png
Group Type : 指定处理对象所属的组名Group Type : 指定处理对象所属的组类型Run Over : 该脚本处理的属性所属类


这两个区别一个是给设置好了,一个是需要我们自己写一些

7e73299ec1eb70d615923b5b6e2eb053.png

变量:浮点,整数,向量,数组






数组随机颜色
矩阵
矩阵和向量都有三种写法;矩阵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坚持与您分享最有价值“干货”内容,本期分享就到这里,我们下期见!

评分

参与人数 4元素币 +14 活跃度 +8 展开 理由
Maditer + 4 + 2 我甚至有一点平静
夏夏 + 3 + 3 就离谱
悠扬的G调... + 4 + 2 这就是大佬的世界嘛
龙哥Longer... + 3 + 1 这个要顶一下了

查看全部评分

微信公众号:Game艺视界
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表