What & How & Why

VEX Concepts & Refs

VEX 的相关概念、基础知识、语法等


Basics

Intro

VEX 是一种 类 C / C++ 的编译型语言,主要用于写 shader 和自定义节点。其主要的灵感来自于 C、C++ 和 RSL。详细的来说,在 Houdini 中,VEX 的主要用于以下几个方面:

  • Rendering:Mantra 实际上使用 VEX 进行 shading 的计算,包括灯光,surface, 置换 和 fog。
  • Compositing:使用 VEX GeneratorVEX filter 可以自定义 COPS。
  • Particles:使用 VEX 基本可以做到 POPS 中的任何事情。VEX 可以将许多 POPS 中的操作整合到一起,因此通常也较普通的 POP 网络快。
  • Modeling:VEX SOP 可以方便的操控 point attributes,包括移动点、修改速度、修改颜色等等。VEX 也支持对点的编组。
  • CHOPS:VEX CHOP 可以自定义 CHOPS。
  • Fur:程序化毛发是用 VEX 实现的。
Contexts

通过上面的介绍可知,VEX 实际上是为指定的 Contexts (也就是 SOP / DOP 等等)服务的。根据不同的使用场景(contexts),可供 VEX 调用的函数 / 全局变量 / 语句 等等也会有不同。

SideFX 提供了关于 Context 的参考:VEX contexts

Functions

导入外部自定义函数

Houdini 中,自定义 VEX 函数存储到外部的 .h 文件中,然后在需要使用的时候导入并调用就可以。该过程分两部:

首先需要指定 .h 文件的位置。 Houdini 有一个专门的环境变量:HOUDINI_VEX_PATH 来指定该地址,只需要在 houdini.env 中添加一行即可:

HOUDINI_VEX_PATH = ”your address of .h file“
接下来在 Wrangle 节点中,包含对应的头文件即可。写法与 C 一致:
#include "target.h"
Houdini 的 env 文件位置:
%HOME%/houdiniX.X/houdini.env. #Windows
~/Library/Preferences/houdini/X.X/houdini.env. #Mac
~/houdiniX.X/houdini.env. #Linux