2013年4月21日日曜日

ウェイト移行ツール

キャラクターセットアップをやっていますと
ローポリモデルでアニメーション用セットアップ
後にハイポリモデルをレンダリング用に同じジョイントでセットアップ
なんてことがよくあります.

大きなプロダクションではラップデフォーマをカスタマイズしたもので
ハイポリモデルを変形させることがありますが
直接バインドして、ローポリモデルやハイを間引きしたモデルから
ウェイトをコピーする手法もまだ多く使われています.

しかし、ハイポリモデルはディテール追加のため
同じジョイントにバインドされている部品が多くなることが多く
ウェイトコピーコマンドが一対一でしか機能しないので
メンドクサイことこのうえない作業になります.

そこでまとめてやってしまおうと書いたのがこのMELです.
ハイモデルを選択(複数可)し最後に元になるモデルを選択して実行すると
同じジョイントにバインドした上でウェイトコピーを実行します.
これが全文、細かく説明しますと
まず選択したオブジェクトの一覧をリストに取得
最後のオブジェクトがソースなので、リストのサイズから最後の一つを
ソースオブジェクトとして取得後、forループのためにリストからソースオブジェクトを削除
ターゲットオブジェクトのリストとします.
次にソースオブジェクトのシェイプノードを取得
そこからスキンクラスタノードを取得、さらにバインドされているジョイントのリストを取得します.
for-inループでターゲットオブジェクトに対して、まずは取得したジョイントでバインド.
ソースオブジェクトからコピーウェイト、を繰り返します.
ループ処理が終わったら、戻り値としてスキンクラスタ名を戻します.
stringを戻す場合、string配列の一要素でオッケー?
と思っていたら戻した先で「これ配列じゃね?」とエラーが出てしまったので
一旦stringに代入してからreturnしております.

元はshelfに登録していてコマンド形式にはしていなかったのですが
他のツールで使う必要が出てきて書き直した次第で、戻り値もそのためです.

ysBindAndCopyWeights.mel

初歩的な(これまでのも似たようなもん?)内容ですが
このブログの目的が、防備録的なものだけではなく
これまで自分がネット検索でお世話になったのでその恩返しというような面もあります.
まあ、始めたばかりで方向性が定まらずに迷走中というのが一番正しいのかも.

0 件のコメント:

コメントを投稿