東南アジア放浪記11 バンコク東南アジア放浪記12 プーケット

April 03, 2015

マンガじゃない Houdini チュートリアル ーーカスタムめ二ューーー

皆さんはHoudiniでKeyをベイクしたいと思ったことはありませんか?

その答えは「やってはいけない!」だ! なぜならHoudiniはプロシージャルなワークフローを構築する為のソフトであってキーフレーミングとは非プロシージャンルな邪道なワークフローだからだ!!!

とは理想を言ってみても、現実的にはそう言う分けにも行かない事もあるわけで
今回はキーベイクのスクリプトをメニューのカスタマイズにより
パラメータ上で右クリックでその操作を行えるようにしてみましょう。 
keuBake01



詳しくはヘルプのほうに載ってます。日本語バージョンもあります。

いろいろなメニューカスタマイズの方法が載っていますが、
その中で今回必要なのは PARMmenu.xml ファイルになります。

PARMmenu.xmlはHoudiniのインストール先にもありますがそっちを弄るのは自分を始め素人には
危険なのでお勧めできない。
なのでユーザーの作業ディレクトリ(大抵はユーザーフォルダ、ウィンドウズだとユーザー>ドキュメント)に新規テキストとかでPARMmenu.xmlと言うファイルを新たに作りましょう。
keuBake02

ファイルの内容はヘルプのフォーマットに従って以下のように書きます。 
<?xml version="1.0" encoding="UTF-8"?>
<menuDocument>
<menu>
<separatorItem></separatorItem>
<scriptItem id="key_baker">
<label>Key Baker</label>
<scriptPath>$HOME/houdini14.0/scripts/key_baker.py</scriptPath>
</scriptItem>
</menu>
</menuDocument>

<separatorItem></separatorItem>
はメニュー内にラインを挿入します。別に無くてもよい。

<scriptItem id="key_baker"> </scriptItem> 
こいつが作るメニューの本体です。この中に実行するラベルやスクリプトの設定をします。
idは適当で良いが他とかぶらない様に。

<label>Key Baker</label>
メニューに表示されるラベル名です。 

<scriptPath>$HOME/houdini14.0/scripts/key_baker.py</scriptPath>
スクリプトの参照先です。 参照先にスクリプトファイルを置いてそれを実行することになります。

<scriptCode> <![CDATA[ ]]> </scriptCode>
これのCDATA[ ]内に直接スクリプトコードを書く方法もあるが
スクリプトを書き帰る度にイチイチHoudiniを立ち上げなおさないといけないので推奨しない。

とりあえずこれだけでメニューは作れます。パラメータを右クリックすると
一番下にKey Bakerがあるはずです。但し参照先にファイルが無いと選んでもエラー 。



とりあえず参照先の$HOME/houdini14.0/scripts/key_baker.pyを作りましょう。
$HOMEは多分ユーザーディレクトリ。

この中にスクリプトを書くわけですが、そのときにそのスクリプトが何処のパラメータ
から実行されたか知る必要があり、それがkwargs["parms"]になります。
 
とりあえずkey_baker.py内にprint kwargs["parms"]と書いて
適当なパラメータからニューを実行してみましょう。
(<hou.Parm tx in /obj/geo1>,)のような感じでpython shellとかに返されると思います。
keuBake03
ベクターパラメータなどの上で実行すると
(<hou.Parm tx in /obj/geo1>,<hou.Parm ty in /obj/geo1>,<hou.Parm tz in /obj/geo1>,)
と帰ってきます。パラメータが一つだろうが複数だろうがリストで帰ってくるのでループの実行がしやすいです。
parm = kwargs["parms"]
parm[0].set(123) 
とかやるとパラメータの数値が123になるようなメニュースクリプトになります。 

なので僕が以前書いたシェルフツールのキーベイク用スクリプトがあるのですが 
それを改造して 
parm = kwargs["parms"]
framerange = range(int(hou.expandString('$RFSTART')), int(hou.expandString('$RFEND')) + 1 )

for i in parm:
if i.isTimeDependent() == 1:
keyVals = {}
for kf in framerange:
keyVals[kf] = i.evalAtFrame(kf)

i.deleteAllKeyframes()

for kf in framerange:
setKey = hou.Keyframe()
setKey.setFrame(kf)
setKey.setValue( keyVals[kf] )

i.setKeyframe(setKey)
と書きます。パラメータを選ぶFromListを開かなくて良い分スッキリする。


これで適当なエクスプレッションカーブやキーフレームに実行するとキーをベイクする事が出来ます。
keuBake04



fujitarium at 13:26│Comments(0)TrackBack(0)│ │Houdiniチュートリアル | CG

トラックバックURL

コメントする

名前
 
  絵文字
 
 
東南アジア放浪記11 バンコク東南アジア放浪記12 プーケット

ライブドアブログでは広告のパーソナライズや効果測定のためクッキー(cookie)を使用しています。
このバナーを閉じるか閲覧を継続することでクッキーの使用を承認いただいたものとさせていただきます。
また、お客様は当社パートナー企業における所定の手続きにより、クッキーの使用を管理することもできます。
詳細はライブドア利用規約をご確認ください。