起動中のHoudiniに別のPythonからスクリプトを実行する
環境
Windows 10
Houdini Apprentice 17.5
Python 2.7.14
https://www.sidefx.com/docs/houdini/hom/rpc.html の手順通りやるだけです。
手順
1. Houdini上で以下のPyhtonスクリプトを実行する
import hrpyc
hrpyc.start_server()
2. 別起動しているPythonにパスを通す
add_path_for_hrpyc.py
# coding: utf-8
import sys
# 各自Houdiniのインストールパスに合わせて書き換えてください。
sys.path += [
"C:/Program Files/Side Effects Software/Houdini 17.5.293/houdini/python2.7libs",
"C:/Program Files/Side Effects Software/Houdini 17.5.293/python27/lib/site-packages",
]
# どうでもいいはなし
#
# 今回の方法は以下の2つのライブラリを利用する必要があります。
#
# hrpyc: Houdiniのrpycのラッパーライブラリ
# Houdiniは C:\Program Files\Side Effects Software\Houdini 17.5.293\houdini\python2.7libs にパスを通して利用しています。
#
# rpyc: rpcを利用してPython Procedureを呼び出すライブラリ…らしい
# Houdiniは C:\Program Files\Side Effects Software\Houdini 17.5.293\python27\lib\site-packages にパスを通して利用しています。
#
# 正しくはpipとかでrpycライブラリをインストールするべきですが、
# 面倒なので、今回はHoudiniで利用しているライブラリをそのまま使いました。
# 本番では熟慮しようね!
3. 別起動しているPythonで手順1で起動したサーバーと接続する。
import hrpyc
connection, hou = hrpyc.import_remote_module()
# どうでもいいはなし
# connection.close() でHoudiniとの接続を切ることもできるが、
# 公式ドキュメントを読む限り、connectionが削除した際や、
# ガベージコレクタにconnectionが破棄された際に自動的に接続を切るとのこと。
4. 別起動しているPythonでhouモジュールを操作する
geo = hou.node('/obj/').createNode('geo', 'geo_test1')
geo.moveToGoodPosition()
終わりに
Mayaからの移民なのでHoudiniではメチャクチャ簡単にできることに戦慄していますね。
(Mayaのcmds.commandPortと同じく、パット見使えそうだけど、
いざ利用してみるとなんか違う…みたいなものかもしれませんが。)
あと、今回出てきたrpycライブラリは可能性を感じるので、
もう少しここらへんを掘りさげると面白いことができそうだな~と悪巧みしています。
最後になりますが、正直Houdiniはあまり詳しくないので、
概念や用語やしきたりなど間違いがあればご指摘いただけると助かります!
ではでは。
参考