迫りくる30代という現実に目を背けるため、金髪にしました。
クリーク・アンド・リバー社 COYOTE 3DCG STUDIO テクニカルチーム 川合です。
私はリガーとしてのキャリアが浅く、今まで深く考えずにバインドポーズを使用してきました。
今回はセットアップ時のエラーやツール作成を通じて、バインドポーズについて得た知見を共有できればと思います。
バインドポーズとは
Mayaではジオメトリをジョイントでバインドするとバインドポーズが作成されます。
アニメーション等で動いたジョイントを、バインド時の姿勢に戻すことができます。
テストとして簡単なチューブのモデルを、3個のジョイントでバインドしてみました。
バインドポーズのノードが作成されています。
アトリビュートについて
ジョイントの BindPose, Message というアトリビュートがバインドポーズへ接続されています。
Messageアトリビュートは値を持たないアトリビュートで、接続しているだけのため今回はBindPoseアトリビュートに注目してみます。
どんなアトリビュートなのか、getAttrコマンドで取得してみます。
import maya.cmds as cmds
attr = cmds.getAttr(“joint2.bindPose”)
print(attr)
たくさん数字がプリントされました。
これはマトリックスというもので、トランスフォームノードの移動/回転/拡縮などを合わせたものになります。
バインドポーズにはジョイントからなにかしらのマトリックスが接続によって受け渡されていることがわかりました。
では実際に別のノードへ接続することで、どんなトランスフォーム情報が入っているのか見てみます。
Sphereを作成して、マトリックスを分解してコネクションを行います。
Sphereがjoint2の位置へ移動しました。
バインドポーズはジョイントのバインド時の姿勢をマトリックスで保持していることがわかりました。
dagPoseについて
バインドポーズは dagPose というノードによって保存されています。
bindPose という専用のノードが存在するわけではなく、実際には dagPose ノードがバインドポーズの姿勢を保存しています。
この dagPose にバインドポーズと同様の形で姿勢を保存することで、
シーン上に複数のポーズを保存できるかもしれません。
先ほどシーンに簡単なFKのリグを作成してみました。
リグを操作してポーズを作ってみます。
このポーズをdagPoseノードで保存します。コントローラーを選択した状態で以下のスクリプトを実行すると bend と名付けたdagPoseノードが作成されています。
import maya.cmds as cmds
controllers = cmds.ls(sl=True)
cmds.dagPose(controllers, save=True, name=bend)
別のポーズに変更します。
そして以下のスクリプトを実行すると、先ほど登録したbendポーズの姿勢にコントローラーが移動しています。
cmds.dagPose(“bend”, restore=True)
まとめ
バインドポーズはジョイントの姿勢をマトリックスで保持していることがわかりました。
またバインドはdagPoseノードを使用して姿勢を保存していて、バインドポーズだけではなく、コントローラーの姿勢を保持することも可能でした。
うまく運用すればリグのポーズをいくつも保存しておくことで、アニメーションの作業の補助に繋がるかもしれません。
地味な内容でしたが、どなたかの参考になっていれば嬉しいです。
最後までお読みいただき、ありがとうございました。











