【转载】Houdini 图文笔记:VEX 知识点小结(一)

824 阅读2分钟

原文链接:Houdini 图文笔记:VEX 知识点小结(一) | 开发游戏的老王

正文

对于码农出身的老王,找到 VEX 就如同在 Houdini 中找到了组织。

什么是 VEX、VOP 和 Python

Houdini 有三种编程语言:

  • VEX 即 Vector Expression Language ,Houdini 内置的脚本语言
  • VOP 即 Vector Operation Language,Houdini 提供的可视化编程语言
  • Python 即 Python,通过 Houdini 提供的接口使用 Python 编程

VEX 是 Houdini 原生的,因此它的契合度最好,底层也经过优化,所以是三种语言中速度最快的,应该作为 Houdini 开发的首选语言。

VEX 的编写

VEX 代码的编写一般在 Attribute Wrangle 节点(按 Tab-A-W 可以快速检索到该节点)中进行

  • Group : 指定处理对象所属的组名
  • Group Type : 指定处理对象所属的组类型
  • Run Over : 该脚本处理的属性所属类型

VEX 的变量、属性及通道

VEX 的形式很像 C 语言

局部变量声明和初始化(Local Variable)

int x = 10;
float y = 100.0;
vector z = set(1,0,1);

创建属性(Attribute)

int @box_id = 1;              //创建 Integer 属性
vector @offset = (1,2,3);     //创建 Vector 属性
string @p_name = "hello_vex"; //创建 String 属性

或者

i@point_id = 1;             //创建 Integer 属性
v@offset = (1,2,3);         //创建 Vector 属性
s@p_name = "hello_vex";     //创建 String 属性

创建通道(Channel)

int seed = chi("seed");          //chi 表示创建或引用 integer 类型通道
float vertical = chf("vertical");//chf 表示创建或引用 float 类型通道,同理还有 chv 等

如果已经存在了名为 seedChannel 则直接引用过来,如果没有则创建一个

VEX 的函数

vector move_to(vector pos; float offset){
    pos.x += offset;
    pos.x += offset;
    pos.x += offset;
    return pos;
}

v@P = move_to(v@P,1);

为了便于阅读,函数定义前面可以加上 function 关键字

function vector move_to(vector pos; float offset){
    pos.x += offset;
    pos.x += offset;
    pos.x += offset;
    return pos;
}

v@P = move_to(v@P,1);

注意: 和 C 语言不同的是,参数之间需要用 ; 隔开,如果是相同类型的参数可以简写为如下所示

vector move_to(vector pos; float offsetx, offsety, offsetz){
    pos.x += offsetx;
    pos.x += offsety;
    pos.x += offsetz;
    return pos;
}

v@P = move_to(v@P, 1, 2, 3);