【MEL】Mayaでリグの形を入れ替える方法【parent -r -s】
フリーリグを落としてきてアニメーションを付けてるが、リグの形が気に入らない...
カーブを編集するのも面倒だよなぁ...
簡単にリグの形を変える方法はないのかな...
このような悩みを解決します。
mayaでアニメーションしていて、「リグの形を変えたいなー」って時がありませんか? 私はあります。 てかリグを作ってる段階から、別の形に置き換えたいー ってことは頻繁に発生します。
今回はそういった、 『リグの形を簡単に変えられるMELスクリプト』を作ってみました。
■リグの形を入れ替えるMELコマンド parent -r -s
結論は以上です。 この『parent』コマンドを使うことで、リグを入れ替えることができます。 詳しく解説していきます。
【MEL】parentコマンドを使ってリグを入れ替えるやり方
形を変えたいリグ…oldRig
新しいリグ…newRig
四角い形を丸の形に変えたいと思います。
手順①シェイプノードを選択できるようにする
『ウィンドウ>アウトライナ>ディスプレイ>シェイプ』のチェックを入れる。 これでリグのシェイプノードが選択できるようになりました。
手順②各ノードを選択
1番目に『newRig』のシェイプノードを選択 2番目に『oldRig』のトランスフォームノードを選択
選択する順番が大事なので、間違えないようにしてください!
手順③MELを書いて実行
ウィンドウ>一般エディタ>スクリプトエディタでスクリプトエディタを開く
スクリプトエディタのMEL画面で、『parent -r -s』と入力し、MELを実行
oldRigのトランスフォームノードの下に、newRigのシェイプノードが来たら成功です。
最後にいらなくなった『oldRig』のシェイプノード、『newRig』のトランスフォームノードを削除すれば、リグの入れ替えは完了です。 簡単ですね!
【MELの解説】parentコマンドとは
■parentコマンド parentコマンドとは、ノードに親子関係を付けるMELです。 『編集>ペアレント』で実行されるアレです。 普段は何気なくPキーでやっちゃってますね。
このペアレントって操作に機能を追加したのが、『parent -r -s』ってことです。
【relativeとshape】フラグの説明
-r,-relativeフラグ…オブジェクトと相対キョリを保つ
-s,-shapeフラグ…シェイプノードをペアレント化できる
-rとは『relative』の略で、日本語に訳すと『相対的』です。 このフラグを立てることで、シェイプノードをペアレント化した時、親と同じ場所(相対キョリが0)に来てくれます。 relativeフラグを立てないとワールド空間でペアレント化されちゃうので、シェイプノードが親の場所に来てくれません。 シェイプノードを親と同じ場所に持ってきたかったら、relativeのフラグを立てましょう。
-sとは『shape』の略で、シェイプノードをペアレント化したいときは、このフラグを立てないとペアレント化できません。
つまり、 新しいリグ(シェイプノード)と古いリグを、同じ場所で入れ替えたい ってなると、 parentコマンドにshapeとrelativeのフラグを立てて実行すればよい ってことになります。
それをMELで書くと、、、 『parent -r -s』 ってことです。
面倒なのでMELを作った【ソース公開中】
上のやり方でリグを入れ替えることは出来ますが、入れ替えたいリグがたくさんある場合だと、かなり手間です。 面倒なことはスクリプトにまかせましょう。 ※使用は自己責任でお願いします。
mayaでシェイプを入れ替えるMEL
//シェイプを入れ替えるMEL
proc KK_ChangeShape(){
$selObj = `ls -sl`;
$selShp = `listRelatives -f -typ nurbsCurve`;//シェイプノードを取得
parent -r -s $selShp[0] $selObj[1];
//---不要なトランスフォームノードとシェイプノードを削除--//
delete $selObj[0];
delete $selShp[1];
}
KK_ChangeShape()シェイプ入れ替えツールの使用方法
■シェイプ入れ替えツールの使い方
使いたいシェイプノードを選択
入れ替えたいオブジェクトのトランスフォームノードを選択
MELスクリプトを実行
シェイプが入れ替わります。
シェイプ入れ替えツールの注意点
リグを入れ替えても、シェイプノードの名前は変わらないので注意してください。 現場によってはシェイプノードの名前にも、命名規則があったりするので、気になる人は各々でリネームしてください。 まぁ、最初からリネーム機能も実装しとけよって話ですが... この辺の機能は随時追加予定です...
まとめ:【parent -r -s】でシェイプを入れ替えよう
parent -r -s
このMELコマンドさえ覚えてたら、上記のスクリプトが無くてもシェイプを統合することは可能です。 汎用性の高いMELコマンドなので、覚えておいて損はないと思います。 ぜひ活用してください!