Maya expression内でMELを使うときの注意

2010/08/21
(この記事の文字数: 1217)

Mayaではexpression内でMEL文を利用することは奨励されていませんが、使うことは可能です。
少し複雑なモーション(特にパーティクルモーションの制御)をexpressionで作ろうとすれば、expression内でMELを使わないと結構厳しいです。

以下に私が思うexpression内でMELを使うときの注意や覚えておくべきことを記します。

1. 名前の変更はMELで書いた部分には反映されないため、MELを使う場合は名前の変更はできない。

2. expressionが評価されるタイミングはフレームが変わったときと、入力コネクションに変化があったとき。

3. MELでアトリビュートをセットしたとき、そのアトリビュートにexpression内で何か値を代入していると、代入された値が優先され正常に動作しないことがあるため、同アトリビュートに対してMELと式での代入の混在は避けるべき。
例えば、以下のようなexpressionを記述するのは危険。


particleShape1.radiusPP = 0;

particle -e -at radiusPP -id 0 -fv 2.0 particleShape1;
 

4. expressionは生成された順番に評価されるため、expression同士が干渉している場合は注意。コネクションが繋がっていれば後のexpressionで変化があれば前のexpressionにも反映されるが、MELを使っている場合は反映されないため、expressionの生成順序で結果が異なる。

5. expressionにコネクションが作られたPP(Per Particle)アトリビュートは配列の0番目からパーティクル数番目まで順番に評価される。MELではparticleコマンドやgetParticleAttrコマンドなどで配列の好きな要素に自由にアクセスできるため、MELを混在する場合、評価される順番を考慮する必要がある。

6. expression内でMELを使って生成した新しいexpressionは次のフレームから評価される。



他にも留意すべき点はあるかもしれませんが、私が思いつくのはこのくらいです。

しかし、あまり複雑であれば、expressionノードに頼らず、APIで作る方がよっぽど賢いと思います。

私は何百個のexpressionでモーションを制御しようとしたことがありますが、シーンを保存するとexpressionの中身が書き代えられてしまうというMayaのバグに対策を立てることができずに、結局APIでカスタムノードを作り、expressionの中身の式をそっくりそのままカスタムノード内で計算させ対応しました。

実際、expressionで制御するのとカスタムノードで制御するとでは処理速度もかなり違いますし、うまく作ればバグも出ないので、ある程度複雑になったらAPIで作る方がコストはかからなくて済むので良いと思います。


  このエントリーをはてなブックマークに追加  

<<「デジタルコンテンツ制作」の記事一覧に戻る

コメント(0 件)


関連記事