リグログ!

【Maya】スキンをデタッチせずジョイントの位置・回転・スケール変更できるモードを作ろう!

よくバインドした後にスケルトンの位置・回転を調整したい時はありますよね。
Mayaの場合は基本的にはデタッチしてからスケルトン調整して再バインドとなります。

この場合に問題となるのは作ったスキンウェイトはどうすればいいの?ということです。

  • スキンウェイトを保存
  • 保存したスキンウェイトから復旧する

これらがないとスケルトンのレイアウトやウェイト付作業の速度は急激に落ちます。

2018.6.17追記
調べたところMaya2017以降ではExport/Import Deformer Weightsより書き込み/読み出しができるようになっていました。 Rigging Dojo : Exporting skin weights in Maya

もちろん、MayaにはExport/Import Skin Weight Mapというコマンドが存在します。
但し、これはマップなんですよね。UV展開が綺麗に行われていない限り上手くいかないということです。
また画像に落とし込まれるのでせっかくのdouble型のウェイト情報が削られます。

という前提条件があるので、
ウェイトのエクスポート/インポートツールがない場合は、
バインドしたままジョイントを動かせるようにしてしまえばいいのです。

ジョイントを動かすツールというのはもともと用意はされています。
スキンされたジョイントの移動ツール(Move Skinned Joints Tool)
これは移動+オリエント自動補完かつ親子が拘束されてしまうという制限があります。
特に回転でのレイアウトができないのでかなり痛いです。
X軸のみに数値が入ったジョイントレイアウトをする場合、この機能の信頼性は低いです。
また、自動で回転補完が入る一軸回転を意識しているところで使ってしまうと危険です。

では、自由にレイアウトしたい場合にどうやるか?
それを紹介してみようと思います。

動画での例

ジョイントが赤くなっている時は、ジョイントのエディットが可能となっている。と思って下さい。
通常の色になったらデフォーム状態という切り替えです。

ノード構成

名前が適当で申し訳ないですが…
pCylinder1を作成し、joint1〜joint4までを使ってバインドしたシンプルな構成です。

skinClusterのbindPreMatrixの利用

skinClusterノードにはbindPreMatrixというアトリビュートを持っています。
これはバインドした時のインフルエンスの逆行列の情報が入っています。

matrixアトリビュートには行列の情報が入っています。
bindPreMatrix * matrix = identityMatrix
これを維持すればバインドされているメッシュは動かなくなります。

skinCluster.binPreMatrixに逆行列を繋げば完成!

あとは繋ぐだけです。
動画では、編集モードとデフォームモードをシェルフで切り替えていました。

注意! : ゲームエンジン前提でつかう場合

自己責任でお願いします。
特にゲーム開発の場合は、この手法はもしかしたら実機にエクスポートされない場合があります。

注意! : バインドポーズも更新必要あり!

ジョイント位置を変更したらdagPoseも更新する必要があります。
更新しないままにすると、Go To BindPoseで変更前の位置に戻ります。

注意!から考える最善策

結局は、ウェイトのエクスポート/インポートツールがあると安心です。
アンバインドとバインドで全ての情報が綺麗にできるんですよね。
これさえあれば、ゲーム開発や映像も気にせず使えます。

まとめ

Mayaはウェイト周りは不親切なので機能追加して下さい〜

それでは!


ティール組織――マネジメントの常識を覆す次世代型組織の出現
フレデリック・ラルー
英治出版 (2018-01-24)
売り上げランキング: 120

関連記事

コメントをお待ちしております

HTMLタグはご利用いただけません。

HelloWorld!

// サイトについて
主に3DCGのテクニカル関係の
ネタを取り扱うサイトです。

情報提供随時お待ちしております。


//管理人経歴

CADデザイナー

DTPデザイナー

3DCGインストラクター

UI/UXデザイナー

3Dジェネラリスト

アートディレクター

テクニカルアーティスト

リギングスーパーバイザー

テクニカルアーティスト

免責事項

本サイト内で公開している
全ての情報に関しては、安全性等、
いかなる保証もされません。

これらの情報を利用したことにより
生ずるいかなる損害に対しても
当方は一切責任を負いません。

使用する場合、
自己責任でご使用ください。

アーカイブ

カテゴリー