【Houdini】のためのスタンドアローンなツールを作ろう。TALK【Houdini】のためのスタンドアローンなツールを作ろう。【Houdini】のためのスタンドアローンなツールを作ろう。develop,Houdini,hython,PySide,python初めまして。僕の出番がやってきました。FX室から移籍したTDのタカノリ[@auratus](岸川貴紀)です。TD的な感じの話でも始めて、それから話を広げて行こうかと。Toolから、Hythonを実行してみる。GUI上からアクションを起こしてみる。実用的なものを作ってみる。Toolを使わないでhouモジュールを使用する。Creation)ツールです。基本、ノードで何でも出来ます。モデリングやレンダリング、コンポジットまでなんでもです。この「何でも出来る」を実現するためにあるノードの種類は多岐に渡り、細分化すると、数学的な計算まで出来る細かいノードまであります。本来Houdiniのために何かしら特別なことをせずとも、プログラム言語をしらずとも複雑なモノでも何でも作れる!というのは大きな利点です。大きなワークフロー、大きなパイプライン、大人数の中で自由を極めたHoudiniを使用する事は、時に大きな混乱とコストを要します。狙わずとも、そうなってしまいます。下手をすれば、MayaやMaxを使うよりも格段コストがかかるワークフローになりかねないです。そこであらかじめ決められた仕様にそってワークフローのためのツール開発を行っていくのですが、アーティストの作業効率を突き詰めていくと、「そもそもDCCツール自体を起動しない。」という結論にも行き着きます。そっちの方が速く、誰でも出来て、確実な場合が多いのです。前置きはここまでにして、早速Houdiniのためにスタンドアローンツールを作るにはどうすればいいか。作例とともに学んでいきましょう。「HoudiniはPythonでコントロール出来る。」という事を確認しましょう。Shellを追加します。コレを入力してEnterキーを押してみましょう。hou.node("/obj").createNode("geo").createNode("testgeometry_rubber")すると、Boxジオメトリが一個生成され、ネットワークパネルを見ても、hou.「/obj階層(ノード)に」.「geoノードが一個」.「作成したgeoノードの中にtestgeometry_rubberノードが一個」という感じで作成されているのが分かります。モジュールオブジェクトです。Houdiniでは、この「hou」モジュールを使って、ノードの作成が出来ます。パラメーターの変更も出来ます。それはつまり、Houdiniはノードベースで、すべてノードでオペレーションを行いますから...そう、「hou」モジュールでなんでも出来てしまうんですね。Toolから、Hythonを実行してみる。!それでは、早速、この「hou」を、Houdiniを起動せずに使用してみます。「テストジオメトリを作成して、保存する。」といったことをやってみます。Toolというものを使います。Houdiniのインストール先/bin/hcmd.exeを起動そして、「hython」と入力し、Hythonを起動します。Hythonを使って入力していきます。/obj/geo1/testgeometry_rubbertoy1>hou.hipFile.save(file_name="保存先ディレクトリ/test.hip")すると、指定したディレクトリに「test.hip」といった感じに保存されます。HoudiniでこのHIPファイルを開いてみましょう。こんな感じになります。▲GUI上からアクションを起こしてみる。それでは、いよいよスタンドアローンツールらしく、GUIを使用してHythonにアクセスしていきましょう。Geo』ボタンを押せば、テストジオメトリ入りのHIPファイルが作成される。」といったものを作ってみます。ロードする用の.uiファイルをQtDesignerで作成します。いう感じに作成してください。(上記GIF画像の様な感じです。)もしくは、サンプルファイルからgui.uiファイルをコピペ配置して下さい。ここでは、QLineEditを「hipPathLineEdit」、QPushButtonを「pushButton」と名前を付けてます。Pythonファイルを作成します。ハイライト部は「hou」モジュールを使用したところです。main(sys.argv[1:])続いて、上記Pythonスクリプトと同じディレクトリに、実行用のコマンドファイルを書いていきます。HYTHONDIRにHoudiniがインストールされているディレクトリの「bin」ディレクトリを、SCRIPTDIRにcreateTestGeo.pyファイルが置いてあるディレクトリを記入します。%SCRIPTDIR%\createTestGeo.pypauseそれでは、実行ファイルを使用して、GUIを起動してみてください。Geo」ボタンをクリックすると「test.hip」ファイルが指定のディレクトリに作成されたと思います。その「test.hip」を開いてみると、先ほどと同じくテストジオメトリが作成されていると思います。実用的なものを作ってみる。いくつか試してきたので、そろそろ一個くらいは実用出来るもの欲しいですよね?では、「インポート系ノードの配色をHoudiniを開かずにやってくれるツール」でも作ってみましょう。Houdiniで巨大なショットワークを処理したことがある人、そんなHIPファイルを他の人から受け継いだことがある人はご存知かもしれませんが、とにかくカオスです。サンプルビジュアルを載っけてみると...こんなかんじ。これは、とあるプロジェクトでの実際のショットワーク用ファイルです。表示しているのは氷山の一角だったりします。試行錯誤でやられてるので、なかなかにカオスですね。この作成者は自分が分かりやすい様に独自の配色を採用してます。はい、分かり辛いです。社内でルールに沿った配色スクリプトなどを配置してないと、こんな感じにカオスになります。外部ファイルにアクセスしているノードだけでも分かれば...。ツールを作って行きましょう。使いやすいように、ウインドウにHIPファイルをドラッグ&ドロップでパスを入力してくれる機能も追加します。先ほどの「createTestHip.py」を複製して、「colorNodes.py」にリネームします。中身を開いて書き換えます。ハイライト部が追記・編集したところ。HIP内のすべてのノードを取得。"_colored"を追加リネームして保存。main(sys.argv[1:])そんでもって、Batchファイルも複製・リネームして編集。Color」ボタンをクリックしてみましょう。元のHIPファイルの場所に「_colored」がファイル名に追加されて保存されているのが分かります。開いてみると...、この通り!スケールアウトしても、どこで外部ファイルのインポートが行われているかが一目で分かる様になりましたね。Toolを使わないでhouモジュールを使用する。Toolやhython.exeは、最初からHythonとして使用するために必要なモジュールをimportしてきているので、取り扱いがとても楽です。Shellを使用するといった場合も考えられます。Shellで管理したほうが良いため、それを使用する場合が多いです。そこで、「hou」モジュールをPythonスクリプト側で読み込む処理を追加する必要が出てきます。設定していない場合、HFS(Houdiniがインストールされている場所)環境変数を登録する必要がある事。DLLのロードのため、さらに、PATH環境変数に$HFS\binを追加しておく必要があります。%SCRIPTDIR%\importHou.py「hou」モジュールのインポート設定に関して、SideFXの公式ドキュメントでは、こんな感じに記されてます。こいつをスクリプトの先頭で読めばいいわけですね。中間コメントアウトを省いて引用するとこんな感じ。▲ライセンスに関して。この「hou」モジュールは、Houdini内で出来る事そのままが出来ます。いうことは、そこにはライセンスが発生してくるわけです。Shellがimportした時にライセンスを読みに行きます。Houdiniのライセンスは、アクティブになっているマシン1台につき1ライセンスを使用する仕様ですので、同じマシンでHoudiniを起動しつつスタンドアローンのツールを起動する事は1ライセンスで出来ますが、Houdiniを立ち上げていなくても、スタンドアローンのツールを立ち上げると1ライセンス使用します。この点に注意して使用して下さい。ちなみに、例えば、「GUIは常駐させておきたいので立ち上げておくが、ずっとライセンスを保持しておくとまずい。」といった節約志向がある場合、「機能の実行のたびにライセンスを使用し、その後手放す。」といった感じになるかと思います。その場合、ライセンスを手放す場合には以下のスクリプトを機能終了後の処理に差し込めば良いです。▲まとめいかがでしたでしょうか。しょっぱなからこのボリュームっていうのも、なんだかな~とか言う感じもありますが。公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。自己責任でご使用ください。(※必須):Website:Comment:コメントは承認制ですので、即時に反映されません。上に表示された文字を入力してください。月別アーカイブ2018年5月2017年1月2月3月4月6月10月11月2016年1月2月3月4月5月6月7月8月10月11月12月2015年1月2月3月4月5月6月7月8月9月10月11月12月2014年1月2月3月4月5月6月7月8月9月10月11月12月2013年1月2月3月4月5月6月7月8月9月10月11月12月2012年2月3月4月5月6月7月8月9月10月11月12月2011年1月2月3月4月5月6月7月8月9月10月11月12月2010年12月Footer。