On this page |
Houdiniアセット上に露出されたアセットパラメータは、houdiniAsset
ノード上ではMayaノードアトリビュートとして表現されます。
それらのパラメータは、 Mayaのアトリビュートエディタ から制御することができます。
また、アセットパラメータはいつものノードアトリビュートのため、それらのアセットパラメータには組み込みのMayaツールを使用することができます。
例えば、Mayaのアニメーションカーブを使ってそのアセットパラメータを駆動させたり、MELのgetAttr
やsetAttr
からそのアセットパラメータにアクセスすることができます。
Note
InvisibleとしてマークされたパラメータはhoudiniAsset
ノード上では表現されません。
そのため、そのようなパラメータはMaya内部からアクセス不可です。
Houdiniアセットは、幅広いパラメータタイプとその設定に対応しています。 しかし、これらのパラメータタイプとその設定すべてがプラグイン側で対応しているとは限りません。
Disable When
やHide When
などの動的オプションは対応していません。
Basic ¶
Float、Integer、Stringタイプのパラメータが対応しています。 タプルも対応しています。 FloatタイプとIntegerタイプのパラメータでは、範囲とその範囲ロックにも対応しています。
Note
指数値を持つFloatおよびIntegerパラメータは、通常のFloatおよびIntegerパラメータとして扱われます。 そのため、そのパラメータのUIスライダは指数用ではなく線形になります。
Colorパラメータに対応しており、標準のMayaカラーウィジェットがアトリビュートエディタに表示されます。 しかし、ColorおよびAlphaパラメータにはカラーウィジェットはなく、4タプルの浮動小数点として表示されます。
Toggleパラメータが対応しています。
Stringパラメータでは、Edit
ボタンをクリックすると個別のダイアログが表示され、そこで文字列を編集することができます。
このボタンを使用することで、複数行の文字列を入力することができます。
パラメータにsidefx::maya_component_selection_type
タグを追加すると、そこで指定されたタイプのコンポーネント選択を受け入れるようMayaに指示することができます。
対応しているタイプは、 vertex, edge, face, uv です。
この場合、 Edit ボタンは Use Selected ボタンに置き換わります。
Ramp ¶
Float RampとColor Rampのパラメータが対応しています。
Operator Path ¶
Button ¶
FolderとMultiparm ¶
Folderパラメータが対応しています。 FolderパラメータはCompound(複合)型アトリビュートとして表現され、そのFolderパラメータ内の子パラメータがそのCompound(複合)型アトリビュートの子アトリビュートとして表現されています。
アトリビュートエディタでは、Folderパラメータは折り畳み可能なフレームとして表示されます。
Collapsible
、Simple
、Tabs
のタイプのフォルダは、どれも同じように表示されます。
Radio Buttons
タイプのフォルダは対応していません。
折り畳み可能なフレームは、デフォルトでは展開されます。 このフレームはアトリビュートエディタ内で折り畳むことはできますが、その折り畳まれた状態は記憶されないため、アトリビュートエディタを更新すると、すべてのフレームが再び展開されてしまいます。
Multiparm ¶
Multiparm
タイプのフォルダが対応しています。
このフォルダはCompound(複合)型マルチパラメータアトリビュートとして表現されます。
アトリビュートエディタでは、マルチパラメータインスタンスを追加/削除することができるカスタムUIと一緒に表示されます。
別のマルチパラメータ内に入れ子化されたマルチパラメータは、現時点では対応していません。
マルチパラメータを使用するにあたり注意点が1つあります。 マルチパラメータのデフォルトのサイズが0の場合、アセットノードが最初にロードされた時、子パラメータはまだMaya側で認識されていません。 つまり、最初のマルチパラメータインスタンスが追加された時、ノードのアトリビュートが同期されるまでは、子パラメータは表示されません。 同様に、マルチパラメータのサイズがゼロに達し、ノードのアトリビュートが同期されると、マルチパラメータの子パラメータはMaya側で認識されなくなります。
Menu ¶
コールバックスクリプト ¶
パラメータの変更時にHoudiniでコールバックを実行する ¶
コールバックスクリプトはパラメータ上で設定することができます。
しかし、Mayaがアセットノードを評価するまで、コールバックスクリプトは発動されないことに注意してください。
スクリプトを介してボタンがクリックされた場合、アセットノードを強制的に評価するようにしておくと良いでしょう。
これは、dgeval
を介して行なうことができます。
例えば、以下のMELコマンドを使用すると、ボタンパラメータがクリックされ、コールバックスクリプトが発動されます:
setAttr foo1.houdiniAssetParm_parm__button 1; dgeval foo1.output;
パラメータのコールバックが他のパラメータを変更する場合、組み込みのsidefx::maya_parm_affects_others
タグを付けることをお勧めします。
これにより、このパラメータが変更された時に各アトリビュートを同期する必要があることがMayaに通知されます。
アセット全体の同期が必要な場合は、パラメータに組み込みのsidefx::maya_parm_syncs_asset
タグを付けてください。
パラメータの変更時、Mayaでコールバックを実行する ¶
パラメータが変更されたときにMayaスクリプトをトリガーするには、そのパラメータに組み込みのsidefx::maya_parm_callback_func
タグを定義する必要があります。これにより、パラメータが変更されたときと、呼び出す必要のある関数がMayaに通知されます。MELとPython関数の両方がサポートされていますが、MELがデフォルトです。Python関数を呼び出したい場合は、パラメータに追加で組み込みのsidefx::maya_parm_callback_func_language
タグを含めて、値をpython
に設定する必要があります。
どちらの言語でも、コールバック関数は単一引数を受け取る必要があります。この引数は、コールバックのソースを保持します。例えば、Houdiniアセットfoo1
のparm
パラメータが変更されると、sidefx::maya_parm_callback_func
によって指定されたコールバック関数に“foo1.houdiniAssetParm_parm__button”が渡されます。したがって、コールバック関数は以下のように定義する必要があります。
// MEL global proc myCallback(string $plug) { print("Caught message from " + $plug + "!\n"); } # Python def myCallback(plug): print('Caught message from ' + plug + '!')
この場合、sidefx::maya_parm_callback_func
はmyCallback
として定義され、sidefx::maya_parm_callback_func_language
はPython
または(オプションで)MEL
のいずれかとして定義されます。
アニメーションとエクスプレッション ¶
Houdiniアセットのパラメータは、Mayaのアニメーションカーブとエクスプレッションによって制御することができます。 ほとんどの場合、アセットはアニメーションとエクスプレッションに従って正確にクックされます。 しかし、より高度な使用では、以下の理由によって結果が正しくない場合があります。
Houdini Engineは、アセットをクックするときにPushの仕組みを使用します。 アセットがクックされる前、現行時間のパラメータ値がアセットにPushされます。 言い換えると、アセットのクック時、アセットが使用できるのは現行時間のパラメータ値のみです。 実際、アセットの観点からすると、パラメータはまったくアニメーションされていません。 アセットは単にすべてのパラメータ値のスナップショットを取得してクックしただけです。 そのため、アセットが単一の時間サンプルを正確にクックするために、複数の時間サンプルからパラメータ値を必要とする場合は、現在のところHoudini Engineではアセットを適切にクックすることができません。
Houdiniエクスプレッション ¶
文字列パラメータでは、文字列値は実際はHoudiniエクスプレッションとして評価されます。 このため、HoudiniエクスプレッションをMayaのアトリビュートエディタに直接入力することが可能です。 数値パラメータの場合、Mayaのアトリビュートエディタは数値ウィジェットを表示するため、Houdiniエクスプレッションを直接入力することはできません。 数値のHoudiniエクスプレッションが必要な場合、アセットレベルで文字列パラメータを作成して、アセット内の数値コンテキストで文字列パラメータを参照するという方法が考えられます。 これにより、エクスプレッションの結果が数値に変換されます。 ただし、文字列パラメータでは、Mayaのアトリビュートエディタは数値ウィジェットを表示しません。