見出し画像

MAYAロケータ解説(剣と鞘)

はじめに

今回の解説はある程度アニメーションの学習をされている方へ向けた内容となっております。
質問等ありましたらXのDMへいつでも送ってください!

https://twitter.com/3DCGmatsu77


使用キャラクターと作業環境

今回の解説では、株式会社アプリボットが提供しているフリーリグである「スイレン」を用いています。(別キャラでも可能)
作業環境は、MAYA2024を使用しています。(別バージョンでも可能)

無料で使用できるかつ良質なリグですのでぜひDLをおすすめします。

RIGの名称などで説明する部分もありますので、こちらのRIGを使用していただいたほうが、わかりやすいかと思います。

仕様

上記のように、刀を鞘に固定しつつ両手首の角度を調整できる組み方になります。

組み方01(鞘と左手)

まずロケータ作成の前に、ポーズの作成を行います。
今回はロケータの解説ですので、抜刀できそうなポーズであれば何でも大丈夫です。

抜刀できそうなポーズの例

ポーズの作成ができたら、まずロケータを一つ作ります。
わかりやすいように、スケール5にしておきましょう。
鞘のRIGである「Rig_C_SwordBSaya_001」(黄色の四角いやつ)を先に選択し、その後にロケータを選択。
その後に、下記画像のようにコンストレイント→ペアレントオプションのオフセットの保持のチェックを外し、適用させます。

うまく行けば鞘の部分にこのようにロケータが生成されていると思います。
少し左手の中心の方にずらしておきます。

ここまでできたら、そのロケータをctrl+Dで2つ複製します。(合計3つ)
ここでロケータの階層構造を下記のようにして名前を変更しましょう。
一番上を L_Hand01
 真ん中を L_Hand_CTRL
  一番下を L_Hand02

その後に、「Rig_C_SwordBSaya_001」を選択→「L_Hand01」を選択。そして、先ほど設定したコンストレイント→ペアレントオプションのオフセットの保持のチェックを再度ONに設定。その後にコンスト。
「L_Hand02」→「Rig_L_Hand_IK」(左手のIKのRIG)を選択肢コンスト。
これで、真ん中の「L_Hand_CTRL」を動かすと左手が動くはずです。
もちろん鞘を動かしても左手はついてきます。

個人的に応用が効いて、かなり使えるロケータの必須テクニックなのでぜひ覚えてください。

mel紹介(小休憩)

正直、ロケータを作ってリグの位置にコンストしてそのコンストを削除するってかなり手間ですよね…。
そこで普段自分もよく使用している自作melを紹介します。

//ロケータ作成MEL 制作者:まちゃ

// 現在選択中のオブジェクトを取得(最初の選択オブジェクトをRIGとして使用)
string $selectedObjects[] = `ls -sl`;
if (size($selectedObjects) == 0) {
    error("RIGを選択してね~^^。");
}
string $rigName = $selectedObjects[0];

// ロケーターを作成して名前を取得
string $locatorArray[] = `spaceLocator -p 0 0 0`;
string $locator = $locatorArray[0];

// ロケーターのスケール設定
setAttr ($locator + ".localScaleZ") 5;
setAttr ($locator + ".localScaleX") 5;
setAttr ($locator + ".localScaleY") 5;

// RIGとロケーターを選択して親制約を作成
select -r $rigName;
select -add $locator;
doCreateParentConstraintArgList 1 { "0","0","0","0","0","0","0","0","1","","1" };
parentConstraint -weight 1;

// ロケーターを選択してシミュレーションをベイク
select -r $locator;
doBakeSimulationArgList 10 { "1","0","10","1","0","0","1","1","0","1","animationList","0","0","0","0","0","1","0","1","1","3","1" };
bakeResults -simulation true -t "0:1" -sampleBy 1 -oversamplingRate 1 -disableImplicitControl true -preserveOutsideKeys true -sparseAnimCurveBake false -removeBakedAttributeFromLayer false -removeBakedAnimFromLayer false -bakeOnOverrideLayer false -minimizeRotation true -controlPoints false -shape true {$locator};

// 親制約を削除
select -r ($locator + "_parentConstraint1");
delete;

このmelを登録してシェルフ登録をすれば、このあとの作業もスムーズになるので登録してみてください。(バグがあれば教えて下さい)
使い方は簡単で、RIGを選択したあとにこのmelを使用するだけです。

ちなみにシェルフ登録のやり方ですが、上記のmel文をスクリプトエディタのMELにコピー&ペースト。
ctrl+Aで全選択の後、マウスの中ボタン押し込みでシェルフ登録欄にドラッグ&ドロップでシェルフ登録完了です。
自分はカスタム欄によく使うmelを登録してあります。

組み方02(鞘と刀の接続)

上記のmelを登録していただいたら、もう作業は簡単です。
「Rig_C_SwordBRoot_001」(刀の持ち手RIG)を選択し、先程のmelを使用。
画像のように生成されたと思うので、つばの位置にロケータを移動。

生成直後
ずらしたあと

再度ctrl+Dで2つ複製し、下記のように階層構造と名前を変更しておきましょう。
一番上を Sword01
 真ん中を Sword_CTRL
  一番下を Sword02

「Rig_C_SwordBSaya_001」(鞘のRIG)を選択→「Sword01」を選択の後コンスト。
「Sword02」を選択→「Rig_C_SwordBRoot_001」(刀の持ち手RIG)選択の後コンスト。

これで「Rig_C_SwordBSaya_001」(鞘のRIG)を動かすと、刀がついてくるようになります。そして、「Sword_CTRL」を動かすと刀単体が鞘にコンストされたまま動かせるようになります。

組み方03(刀と右手の接続)

もうやることは同じです。
「Rig_C_SwordBRoot_001」(刀の持ち手RIG)を選択し、先程のmelを使用。
右手の中心部分にロケータを移動し、ctrl+Dで複製。下記のような階層構造にして名前を変更します。
一番上を R_hand01
 真ん中を R_hand_CTRL
  一番下を R_hand02

「Sword02」を選択→「R_hand01」を選択の後にコンスト。
「R_hand02」→「Rig_R_Hand_IK」(右手のIKのRIG)を選択の後にコンスト。

これで完成です!!

まとめ

この制御の一番の親は、鞘である「Rig_C_SwordBSaya_001」です。このRIGを動かせば、両手と刀が追従するはずです。
動かしていいのは、この親のRIGと語尾に_CTRLがついているロケータです。
気を抜くと普通にRIGを選択して動かすことがあるので気をつけてください。

さいごに

ご覧いただきありがとうございました!
今後も色々研究したものをまとめていこうと思います。
X(Twitter)によく生息しているので良ければフォローお願いします~
https://x.com/3DCGmatsu77


この記事が気に入ったらサポートをしてみませんか?