在自动化流程中,通常都是从外部命令行启动 Houdini,而不是在软件里进行烘培和输出。完全体是通过类似 Jenkins 等自动化工具来启动 Houdini 自动生成流程。
我使用的 Houdini 版本为 19.5.640,对应的 Python 版本为 3.9 。
Houdini 支持使用 Python,从外部调用 Houdini 的功能。当然,我们需要使用 Houdini 的 Python 环境,而不能用我们自己的(存在版本问题),所以还需要配置 Python 环境。在 Visual Studio 中配置方法如下:
打开 解决方案资源管理器,右键 Python 环境,选择 添加环境;
在窗口中选择 现有环境,然后再文件夹中找到 Houdini 的 Python3.9 的文件夹路径;
之后点击添加,然后在 解决方案资源管理器 中右键刚才添加的环境,选择 激活环境 即可:
我主要参考的以下教程:
学习在外部Python脚本中运行Houdini的Python接口(hou模块)_YakSue的博客-CSDN博客学习在外部Python脚本(而非Houdini编辑器内部)使用 hou 。主要参考Houdini官方文档 Command-Line Scripting 中的【Accessing hou from a Regular Python Shell】部分。我将要点记录在下:https://blog.csdn.net/u013412391/article/details/131609298 如果你的电脑上直接运行很顺利,那么恭喜。如果失败了,以下是我踩过的一些坑,可以参考:
DLL load failed while importing _hou: 找不到指定的模块。
我试了很多方案,各种改环境变量都不行,最后还是代码强行加入才起效果(注意路径要改成自己电脑上的路径,注意使用正斜杠):
def InitHoudiniNode():
mIsHasAttr = hasattr(os,"add_dll_directory");
if(mIsHasAttr):
os.add_dll_directory("D:/Program Files/Side Effects Software/Houdini 19.5.640/bin");
sys.path.append("D:/Program Files/Side Effects Software/Houdini 19.5.640/houdini/python3.9libs");
import hou;
初始化 Houdini 的时候遇到报错:No module named 'tractor'
这个 tractor 不是公用库里的那个 tractor 而是皮克斯出的一个叫 RenderMan 的软件里面的 Python库,可以联动 Houdini ,可以看这个作为简介:
皮克斯发布了牛叉的RenderMan 24,已支持主流软件 - 哔哩哔哩最近,著名的皮克斯工作室Pixar发布了产品级渲染器RenderMan的新版本,RenderMan 24渲染器,现在这渲染器的免费非商业版现已推出了,在皮克斯官网上已经可以下载了(renderman.pixar.com/intro)。非商业版和商业版的区别就是有些许功能不能用而已,其他功能没啥区别。最新非商用版的RenderMan 24与以前版本的非商业RenderMan一样,可用于个人项目、研究和工具开发,包括商业插件和资产的开发。非商用版输出是没有水印的,但皮克斯非常推荐用户自行在作品中添加https://www.bilibili.com/read/cv12064984/ Houdini 看来是默认使用了这个 RenderMan,那么解决方案有2个,一种是我们可以自己下载安装 RenderMan 并引用他的库,正如 Houdini 的代码里所写:
RenderMan 的官方网站(下载需要注册,注册需要科学上网):
RenderMan 25 DocumentationElemental © Disney/Pixarhttps://rmanwiki.pixar.com/display/REN25 但是这个确实太麻烦了,而且我的需求只是外部启动 Houdini ,并直接运行其中的节点,并不需要使用 RenderMan,本来就不需要渲染出东西。所以采用了更暴力的方法:
我把这个导入 tractor 的地方直接注释了,然后大家就当无事发生过,导入 hou 就完全正常了。经测试注释之后也没有什么问题,Houdini 也能正常使用。
当然我们做 Python 应用程序还需要导入其他库,可能 Houdini 内部的 Python39 并不完全包含,这个时候就需要我们自己安装。可以通过命令行,或者其他什么方式管理 Python 的各种包,但是不得不说,确实容易翻车。作为宇宙第一 IDE Vitrual Studio ,有一个简便的方法:
首先我们要先建立一个测试工程,我这里建立了一个简单的 Terrain 场景工程,里面的结构也很简单,就是一个高度场加一个噪声。
之后我们将此文件进行保存,保存为 TerrainTest.hip (如果你保存的后缀名不是 hip 结尾,而是 hipnc 这种,说明你没有充值,使用的个人版。hipnc 是否能读取成功没有试过,不过建议充值或者偷偷破解)。
之后我们将路径填好(我用的绝对路径),调用 Houdini 的方法进行节点获取和读取:
def OpenHipFile(filePath : str):
import hou;
hou.hipFile.load(filePath);
print("加载到工程文件:"+hou.hipFile.basename());
node=hou.node("/obj/BaseTerrain");
#这里只把子节点全部打印出来
print("\n定位到节点:"+ str( node));
print("打印子节点:");
for subNode in node.children():
print(subNode);
print("子节点打印完成!\n");
执行结果如下:
与原工程对比,执行结果正确。
本文档附带的学习工程:魔术师Dix / Houdini自动化研究 · GitCode
官方文档:
Command-Line Scriptinghttps://www.sidefx.com/docs/houdini/hom/commandline.html 一些网络教程:
外部python调用houdini python_python 获取houdini程序_不是小黄书的本子的博客-CSDN博客前言:作为自动化项目的一部分,需要外部python调用houdini python的hou模块。在测试这部分时,总是遇到 _hou 模块缺失的问题。下面附上解决方案。(win10,houdini19.0.427,VS Code,Python3.7.8(houdini自带的是3.7.4,暂不确定别的版本是否可行))1.添加环境:path:C:\Program Files\Side Effects Software\Houdini 19.0.427\binpath:C:\Program Fi_python 获取houdini程序https://blog.csdn.net/kraka/article/details/121459947python执行cmd命令行_【houdini】命令行cmd执行houdini的两种方式(hscript/hython)_weixin_39543647的博客-CSDN博客环境变量需要提前设置好更方便,这里使用的是houdni18cmd执行的方式:hscriptmread D:/Houdini_project/cmd_python/cmd_python.hiprender-V/out/mantra1#hscript下想运行python命令的话:#python -c "hou.node('/obj/sphere_object1/sphere1').par..._pdg python houdinihttps://blog.csdn.net/weixin_39543647/article/details/111294793