Interacting with Houdini Engine in Python | 使用Python与Houdini Engine交互

Houdini Engine是Houdini的一个无图形界面简化版,可以通过houdini engine与houdini内核交互,完成houdini fx中的操作。官方有For Maya, For Max, For Unity, For Unreal四个插件,可以在这四个host程序中调用houdini engine。这是极好的,意味着开发的HDA资源可以直接应用在host程序中。

不过笔者并不满足于此,是否可以不用host环境直接调用houdini engine?当然可以,官方提供了一套C API . 只不过笔者看着它就头疼,主要两个问题

  • 面向过程,不面向对象
  • 语法繁琐

这也是笔者开发pyhapi的初衷,希望面向对象,简化语法。

文档请见 https://pyhapi.readthedocs.io

如何安装

已经发布到PyPI,安装直接使用pip即可

要求

  • py>3.6, 因为用了asyncio异步库
  • numpy>1.15
  • Houdini17.5测试没问题,需要commercial license. Houdini18尚未测试

当然要注意的是,请确保houdini dll路径在PATH中

使用

目前支持的功能:

  • 实例化节点,HDA
  • 节点连接操作
  • 节点参数设置
  • 节点异步cook
  • 传入/出 曲线,模型

还不支持的:

  • 传入/出 体素
  • PDG

举例来说,如果想实例化一个HDA,传入参数,cook,可以这样:

执行完以后就可以输出spaceship.obj模型啦

对比一下C API的官方案例Parameters.c两百多行其实就干了一件事:实例化一个HDA,打印出它所有参数

用pyhapi的话十行以内

当然我们还可以把一个模型/曲线,传入/取出houdini engine,比如mesh_marshall_input.py这个例子,传进去一个方块,然后做了细分

内部实现

Python可以和C很好地实现交互。类似其他几个平台:Unity 用的c#,dllimport就行;Unreal就是cpp,include进来就行

Python用ctypes就能加载dll

这就直接可以调用libHAPIL的方法了

源码里hapi.py里全部是对libHAPIL的封装,hdata.py里全是houdini engine的struct

除此以外,hsession封装session对象,hnode封装node对象,hgeo封装geo对象,hasset封装HDA对象。总共就这六个文件

可以干什么

为了Houdini Pipeline咯

可以做:

  • 资产自动化处理
  • HDA自动化测试
  • HDA管理
  • etc…

最后, 祝读者春节快乐,百病不侵!

参考资料

Houdini Engine API Documentation

pyhapi on Github

pyhapi on PyPI

pyhapi Documentation

Houdini Engine API入門 日本人jyouryuusui写的,作者介绍了下API用法,写了个Qt UI调用Houdini Engine C API

Intro to Houdini Engine Scripting API 官网上2014年的教程,有点老,当时还是Houdini13

欢迎关注微信公众号:码工图形

发表评论

电子邮件地址不会被公开。 必填项已用*标注