Houdini有三种内置语言:表达式expression、vex、python。这三种语言虽然有一定的功能重复,但大多数情况还是各司其职的,它们有各自应用的领域,无所谓孰好孰坏。然而每每看到很多初学者面对三种语言不知所措时,觉得还是有必要拿出来说说。*
节点的参数控制可以完全由表达式进行设置,这是使用表达式的主要场合。利用表达式,我们还可以实现跨模块控制。比如,可以根据sop中点颜色数据来控制刚体的主被动状态,可以直接读取chop中动画曲线来控制各种解算对象,可以根据物体的运动速度去控制渲染器的超采样精度…在某些模块或节点中,表达式也有着固定用法,比如pdg中的属性值通常是用表达式来设置,obj下的instance实例替换也是必须用表达式来获取点编号的,copy节点的变量值必须用表达式函数进行引用,foreach循环变量也必须用表达式函数来获取从而完成对节点参数的控制,Lsys系统也只允许表达式插入到文法中控制规则…表达式还可以简化我们的操作,因为他提供了非常方便且丰富的变量可供用户直接使用,例如我们可以非常方便的获得输入对象的中心($CEX
…)或组中心($GCX
…)或物体最低点($YMIN
)…总之,表达式的使用非常普遍,一般应该作为初学者首要学习的内容,这个阶段应该以锻炼逻辑思维为中心,至于方法的性能问题可以暂不考虑。而且,表达式和vex的函数很多都是一致的,表达式学好了,vex不用学基本也能了解个大概了,有表达式的基础,vex的确可以事半功倍。
vex是Houdini的核心,它可以使用更加丰富且更加底层的方法对属性、组、模型、以及材质进行操控。属性和组是Houdini的两大精髓所在,而vex恰恰可以对二者进行灵活的控制,它比表达式提供的函数多得多,而且,vex的执行速度是最快的,比表达式和python要快一个数量级以上,非常适用于密集型计算环境,当一个效果有很多实现方案时,应该首选vex。如果Houdini某个模块没有我们想要的功能,只要能力够强,我们也可以使用vex进行扩展,比如,可以用vex在cop里写自定义调色节点、在chop里写自定义动画曲线,在mat里写自定义材质球,甚至可以在solver里写自定义解算器…可以毫不夸张的说,vex使用的好坏直接决定着Houdini的应用水平,从重要性来说,位于三大内置语言首位。
python的主要作用是编写脚本,来提高工作效率,来疏通流程,来控制pdg工作项,来实现Houdini以外功能的…虽然它能做大部分表达式与vex(除了材质)的事情,但是由于它是三大内置语言中最慢的,所以尽量不要用它来做表达式或vex的工作,尽管它有很多著名的加速库,即便如此,也只能确保它快于表达式,但离vex的速度还是相去甚远,所以我们还是应该乖乖的让python做好本职工作。总之,凡是碰到表达式或vex做不了的事情,比如:做个自定义窗口、导出个数据、写个加密、抓取些网络数据、做个任务分发、来个深度学习…那好,就把它们交给python吧,遇到任何稀奇古怪的想法都会有python为你兜底。