当我需要使用Expression Functions来写表达式的时候,比如stamp函数,我试图想通过一种通用的理念站在编程的角度来表述如何使用它,而不是依靠惯性记忆来使用它。阅读设定它们的源代码应该是一种万变不离其宗的理念,但是很遗憾,HScript的命令以及表达式函数都是通过C 编译成底层的二进制文件存放在Houdini安装目录下,查看源代码有点不切实际,现在唯一寄希望于帮助文档或者HScript命令exhelp来获取表达式的说明与案例了。
有人可能觉得笔者在钻牛角尖,其实不然,笔者理解的牛角尖是当我不理解一件事件的时候,我会去从根本上去学习它的规则是怎么玩的,而不会纠结它的规则为什么这样制定,钻牛角尖是一件浪费时间才能有所收获的事情(除非你有时间)。比如我们一年级就知道的加法口诀和乘法口诀,我们只要知道怎么把这些口诀运用到实际生活中就行,真心没必要去纠结1 1为什么等于2,一切都是遵循一套规则,这是很多人前赴后继得来的规律与经验,有人就喜欢打破这种规则形成另一种规则,比如制定计算机二进制数,1 1就等于10,而我们没必要去破坏这种规则,如果你是想开发一个跟Houdini一样的软件可以去思考思考,如果只是使用Houdini就理解到它的规则就行了。
虽然表达式函数的设定就像一个只有说明书的黑盒子一样,但如果有一点点编程基础,知道函数是如何定义的,传参与返回值这些基础知识的话,或许也是一条通用的理念,我们只需要知道这个黑盒子需要什么类型的参数才能正确运作,以及黑盒子返回的值我可以用在什么地方就足够,知道了这些,陌生的表达式函数稍加研究应该就可以很好的用起来。
为了直观地描述这一点,我们自己来定义一些表达式函数,即自己设定一些源代码,这个自定义的黑盒子对于我们来说已经不是秘密,演示表达式函数运转的原理足够了。
按图示选择菜单Edit>Aliases and Variables,点击Expressions选项,输入一个求矢量元素最小值的函数,Apply Changes就会将这个表达式函数存储到当前的hip文件中,在参数面板按规则调用就没有问题。
我们可以通过几个HScript命令来编辑和删除我们的自定义的表达式函数
excat 获取表达式函数源代码
exedit 打开文本编辑器编写表达式函数
exhelp 查看表达式函数帮助
exls 查看所有当前自定义的表达式函数
exread 从文件中加载表达式函数
exrm 删除自定义表达式函数
这里的自定义表达式函数有个很大的缺点,不能写完在所有Houdini环境中使用,换个hip文件就不起作用,官方在很多表达式函数的使用上都使用了Python语言来替代,所以不建议自己来写HScript表达式函数,写Python就足够用,比如stamp(“../copy1”, “sides”, 5)可以用Python语言写法node(“../copy1”).stampValue(“sides”, 5)来替代,扩展全局的Python表达式也相对简单一些。
如果非要像官方那样扩展写一些表达式函数的话,需要用到HDK来扩展,语法和案例开发文档上都有明确的规定。