首先祝大家国庆快乐!
笔者加入太极图形正好三个月了,工作的事情先按下不表。最近一个有意思的项目是 Taichi Houdini 。整个项目是Eydcao (Yadi Cao) 在实习期间单枪匹马搞出来的。
这个项目完成的工作是让Houdini用户使用taichi做模拟。具体使用了 taichi-dev/taichi_elements: High-performance multi-material continuum physics engine in Taichi (github.com). 后者是一个基于Taichi的多材质MPM物理引擎,支持水,弹性体,雪,沙子,泥土等材质。
例如



使用方法
1.1 安装
详见项目README
- 项目依赖taichi element, 因此clone项目是需要初始化和拉取submodule
- 给houdini安装taichi,要求py3的版本。对linux建议自建一个virtualenv,而对于windows直接对houdini python pip install就可。
- 把package.json放进houdini用户目录,并修改路径
1.2 用法
安装后,打开Examples/mpm_element_sphere.hipnc,可以看到一个字母掉落的场景。实际上htoti目前只提供三个节点:
1.2.1 makeMaterial
输入一个几何体,提供四种材质预设:水,弹性,雪,沙子

1.2.2 makeAnalyticalCollision
生成碰撞体,可以设置表面物理属性,目前只支持平面与球体

1.2.3 MPMSolver

输入物质和碰撞,进行解算具体来说它就是一个python sop节点在做计算伪代码是
1 2 3 |
copy data from houdini geometry to mpm solver step mpm solver copy data from mpm solver to houdini geometry |
所以实际上节点图大都长这样:

局限/未来工作
限于taichi本身的性质和houdini的一些设计,这个项目的限制有:
- taichi虽然目前有标准化的CHI IR,但是用cpp来写还是比较麻烦的,目是最好使用python3
- taichi设计上的考虑,JIT编译比较方便,而目前对提前AOT编译的方式支持不太好
- taichi只能在一个线程创建和使用
- 希望用Solver SOP来做模拟,而不是DOP
- houdini的python shell和python sop看上去有可能不在一个线程,导致只能哪里执行哪里init
- solver sop节点里,每帧的输入只能是上一帧的geometry数据,以及定义在python module中的全局对象
因此在实现上有一些缺点:
- 必须用py3的houdini,而不是用HDK写cpp
- taichi solver是在python module中定义的全局对象,不能是python sop中初始化的,因此如何重新初始化是个问题
- 每帧需要在houdini geometry和taichi solver中互相拷贝数据
这就导致目前的几个问题
- 目前只有cpu模式。不过应该可以通过全局context变量的方式做solver的重初始化gpu模式
- houdini geometry与solver拷数据的overhead相当大,某个case里,甚至overhead占到了单步总时间的60%
- 另外限于时间原因,一些taichi elements中的feature还没有实现
而以上原因可能导致目前生产中不太方便使用,希望未来taichi的feature可以更容易地让用户使用
总结
作为一个实验性的项目,它还有很多不足,不过展示了一些探索的方向,希望未来社区可以和我们一起完善这个项目。
最后,与这个项目没有一点关系,插播一条招聘广告:寻程序化艺术家。
基本要求:
- 良好的审美和美术功底
- 游戏影视背景优先
- 学历背景不限
并且以下要求至少满足任意一项即可:
- 或熟练掌握Houdini等程序化特效/建模软件
- 或熟练掌握WorldMachine/WorldCreator/Gaea等程序化地形软件
- 或熟练掌握Substance Designer等程序化贴图软件
地点在北京或者上海,上海办公室将在10月份正式启用。
实习生同样欢迎!
请附带作品集发至yidong.ma@taichi.graphics,或直接私聊我:)
最后最后: 本文以笔者个人观点发布,不代表雇主任何立场,如需转载请征求笔者意见。
再次祝大家国庆快乐!Have Fun!
