Pixie是一个有名的开源RenderMan渲染器实现,支持运动模糊、Photon Mapping、Irradiance Cahce等流行特性。SideFX Houdini也是历史悠久的特效工具,早已经运用到电影特效的制作中,特别是在日本动画大师大友克洋的带领下,日本CG业界对Houdini的运用更是已经相当成熟。本人总结了一下如何将Pixie在Houdini流程下运用的过程与注意事项,包括SOHO,希望对大家有所帮助。
Mantra
先提一下Mantra。它的最大特色就是,很好很强大,不黄不暴力。它既有传统的基于Micropolygon方式的渲染方式,也有Physically Based渲染方式,更有Micropolygon Physical Based渲染方式,基本上等同于一个加上pbrt的RenderMan。但是Mantra是要授权的,不是只要买了Houdini就奉送的,如果是Apprentice则一堆乱七八糟的BUG不说,不允许应用于商业,而且分辨率也有限制。Mantra的开发也是日新月异,内部是天天新版本,所以对于Mantra我们可以暂时先放一放,等真正需要的时候再翻出来救火。
Pixie
Pixie是个十足的好东西,曾经运用过UC Berkeley一篇CFD论文的演示动画绘制,叫《A Semi-Lagrangian Contouring Method for Fluid Simulation》。最新的版本是2.2.4,支持特色姑且不讨论,目前存在的BUG主要有,Win32平台上使用Catmull-Clark Subdivide Mesh当启用了InterpolateBoundary这个Tag后会发生内存飙升现象,一下子从1G开始渲染,据报道其他平台上无此问题。还有Ambient Occlusion的计算结果依旧没有PrMan 13.5平滑。根据去年我与作者交流的结果,目前的新版本编译器应该已经支持PIXAR Slim生成的Shader。而Aqsis也过渡到了1.4版本,加入了类似于PIXAR It的显示服务器用于管理结果,类似于Entropy和NVIDIA Gelato的那种GUI,不过依旧很简陋就是了。
Houdini
从H9+开始提供了SOHO这样的一组Python API负责操作软件内部的节点导出数据到目标渲染器,逐渐用Python取代C++完成这项工作。虽然Python有优势,可是我对其依旧持60%的肯定态度,因为至今也没有关于Python在操作海量数据方面的测试报道,设想假如导出10G的场景忘记了释放内存导致程序崩溃那该如何是好。H9+内置了对AIR 3.0/4.0、PrMan 12.5/13.5等RenderMan渲染器的支持,Output Driver名称为/driver/rib。我们就以此为基础一步一步的拓展支持。用HDK当然也可以做,重新写个ROP节点,不过很麻烦,没有这种方法便利,不推荐。H9+中用于生成RIB的内置是OTLOPlibShopRIB.otl。我们可以用hotl编辑OTL文件,也可以在Houdini内生成一个新的副本。不过需要注意的是手工用16进制编辑器如Ultraedit、WinHex修改会造成OTL无法识别,原因是OTL的索引头也需要改动。
- 在out中新建一个RenderMan节点
- 在节点上点右键选择Operator Type Manager,点Copy
- 在弹出的对话框中修改名称和保存路径
- 于是在当前的HIP中就可以使用这个新的ROP了
需要注意的是此时调用的依旧是Houdini内置的导出功能。为了实现跟Pixie的特性完全匹配需要手动写针对Pixie特性的脚本,否则导出的RIB将无法渲染。而渲染控制界面都是由OTL中的Tcl\Tk脚本即时生成的。这个ROP调用的是RIB.py,位于$HOME/houdini9.1/soho/下(我使用的是9.1 Apprentice版)。渲染器名称作为参数传入RIBSettings.py,查找是否有符合渲染器的Python脚本,如果找不到则输出prman12.5的RIB,并且会在RIB开头加入WARNING的注释。
theTarget = target
targetfile = "RIB" + target[0] + ".py"
file = findPyFile(targetfile)
所以我们需要将现有Pixie的ROP节点中的选项进行裁剪,只留下针对于Pixie的选项。然后手工编写编写对应于指定版本特性的脚本。通过这个思路我们可以随心所欲的将Houdini打造为支持任意渲染器的场景描述生成器,比如像Indigo for Houdini等。经过我的测试发现Houdini导出的Inline Archieve Pixie无法识别,而且Pixie支持的Subdivide Surface也有限。Houdini会自动在RIB中加入Shadow Map的Pass,不过需要先将灯光的Shadow Type设置为Depth Shadow Maps。不过要注意的是Houdini内没有设置bias的地方,这样的话渲染结果是有错误的。为了增加特性需要手工Hack Houdini那些脚本的代码,虽然说这个是不允许的,但是却不得不这样做。
RenderFarm
如果在财力允许的话可以考虑Frantic Film Deadline,或者手工编写类似于PIXAR Alfred那样的工具用于内部流程。