学习和使用VEX有一年多的时间了,近日翻到了2015年的一部VEX教程《VEX in Houdini》。曾经因为刚入门Houdini,还不适合学习这部教比较进阶甚至高级的教程。而现在又翻到它简直如获珍宝。它将很多paper中的算法在Houdini中用VEX来实现。这是读paper、学习算法以及落地实现的极佳机会。所以决定记录一下完整的学习笔记和心得。
什么是VEX
仅可以在Houdini中使用的类C编程语言。但又不像C或C++那么底层,读写硬盘上的内容是有限制的,读取点云这种特殊形式的文件是可行并且速度很快的。一开始是作为Houdini的着色器编程语言开发出来的,后来也渐渐广泛应用于几何处理。VEX编写的小程序很像计算着色器,但是是在CPU上并行处理的。VEX也有可视化编程的方式——VOP,其中的逻辑会最终编译成VEX。
VEX的语境
编辑几何数据一般在SOP环境下进行——surface operation。常用的数据是P, N, ptnum, Npt, Cd等。但更底层的几何数据则需要在CVEX语境下读写,也只能在此语境下创造新的几何体。
变量及类型
基础的变量类型: float, int, string。没有double类型,并且精度也被限制在32-bit。
线性代数类型:vector和matrix。
扩展类型:array和struct。
双向散射分布函数:bsdf。
没有指针,不能直接访问内存,所以不会导致houdini崩溃。
流程控制
分支:if, else if, else。
循环:while, for, foreach。
函数
与C语言类似: int foo(float a, b; int c){ // body returning an int }
函数重载:
int square_me(int a) { return a a; }
float square_me(float a) { return a a; }
一般情况下不做递归运算。