はじめてのｍGearカスタムステップ

# 挨拶
どうも、GACCHIです。
普段はXやYoutubeなどでリギングをメインに発信させていただいています。

はじめてQiitaに投稿するのですが、今回はmGearのカスタムステップについて、まだ触ったことのない方向けに触れてみようかなと思います。

# mGearのカスタムステップって何？
mGearでは、ガイドを配置してビルドをすることでリグを組み立てることができるのですが、カスタムステップとは**ビルドの前後に任意の処理を追加することができる機能**です。

具体的には、ガイドのトップノードの設定画面で、カスタムステップタブからpythonファイルを登録します。

最初はUI右側のNewボタンを押し、ファイルを配置したいディレクトリを指定して、ファイル名を入力することで雛型となるpythonファイルが生成されます。
![mgear_customStep_new.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3641673/c10943b6-c503-09d8-ee78-f252d889eb0a.gif)
このうち、`def run(self):`の中に書かれた処理が実際に実行されます。

また、UIの上から順番に実行されていくので、順番を間違えないように設定する必要があります。あとから追加して間に挿入したい場合はドラッグ&ドロップで順番を変えます。

# 何で自動化するの？
リギングで発生する手作業をなるべくスクリプトで自動化することで、ビルドしたら同じものができることを保証でき、ミスがあった場合は原因を検出しやすくできるからです。
(基本的に自分の手作業を信用してないのです)

とはいえ、スクリプトを書き慣れていない方は最初から全部書き起こすのはハードルが高いと思うので、まずは優先度の高い処理から自動化していくのがいいでしょう。

**モデルのインポート**
⇩
ビルド
⇩
**スキンウェイトのインポート**

リグを組むうえでほとんどの場合モデルは必要ですし、モデルがあるならスキンウェイトも必要な場合がほとんどです。

リグを特にカスタムしないならこの二工程でリグが完成するので、ここはマストで自動化したいですね。

### モデルのインポート

ファイルのインポートは、`maya.cmds` の fileコマンド でファイルパスを指定し実行することで可能となります。

```python
import mgear.shifter.custom_step as cstp

import maya.cmds as cmds

class CustomShifterStep(cstp.customShifterMainStep):

    def setup(self):
        
        self.name = "modelImport"

    def run(self):

        cmds.file(
                "モデルのファイルパス",
                i = True,            
                type = "mayaAscii",
                options = "v=0;",
                mergeNamespacesOnClash = False
            )
        
        return
```

Mayaではパスの区切り文字が、"\\" ではなく "/" でないと読み取ってくれないので注意してください。
また、mbファイルをインポートする場合は `type = "mayaAscii"` を `type = "mayaBinary"` に書き換えてください。

mayaコマンドはほとんどが公式のドキュメントで詳細が確認できます。
`options = "v=0;",` や `mergeNamespacesOnClash = False` の意味が気になる方は覗いてみてください。
https://help.autodesk.com/cloudhelp/2024/JPN/Maya-Tech-Docs/CommandsPython/file.html

### スキンウェイトのインポート

スキンのインポートは色々な方法があるのですが、今回はmGearのスキンウェイトメニューを使用します。

まずは手作業でビルドし、モデルにスキンバインドしてウェイト調整を行います。作業が完了したら、モデルを選択して、_mGear > Skin and Weights > Export Skin_ でウェイトデータを書き出します。![mgear_exportSkin.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3641673/f3ab8ba3-6963-8827-6944-36ea2f5211a9.gif)


次に、ポストカスタムステップを新規に作成して、以下のコマンドを記述することでインポートすることが可能です。

```python
import mgear.shifter.custom_step as cstp

import mgear.core.skin as skin

class CustomShifterStep(cstp.customShifterMainStep):

    def setup(self):
        
        self.name = "skinImport"

    def run(self):

        skin.importSkin(
                "ウェイトデータのファイルパス"
            )
        
        return
```

余談ですが、これらのコマンドは、mGearのインストール先のスクリプトフォルダから直接確認できます。
_mgear/core/skin.py_ の `def importSkin(filePath=None, *args): ` が該当関数です。
お気づきの方もいるかもしれませんが、上の記述のうち `import mgear.core.skin` は _skin.py_ のパスを示しており、その中から importSkin関数 を呼び出している、という形になっています。
同じ方法で、mgearの機能を拝借することができるので、興味のある方はmgearフォルダを覗いてみてもいいかもしれませんね。
( 誤って中身を書き換えてしまわないようにだけ注意してください )

## カスタムステップを追加したガイドをビルドする

カスタムステップを追加したら、一度ガイド以外のオブジェクトを全て削除し、ガイドをビルドしてみましょう。![mgear_buildTest.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3641673/6bd49cf3-8c14-ca1f-361a-192026a639b1.gif)


エラーが発生した場合は、記述が間違っている可能性があるので、正しく記述されているか確認してみてください。
問題なくビルド出来たら、ガイドを選択し、_mGear > Shifter > Export Guide Templete_ でガイドを書き出します。![mgear_buildFile.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3641673/1669c28e-4b35-7682-46d6-1ad08789db11.gif)
新しいシーンを開いて、_mGear > Shifter > Build From Guide Templete_ から書き出したガイドを開くことで、リグがビルドされます。
これにより、クリーンで再現可能なガイドデータが出来上がりました！


## まとめ

簡単ではありますが、カスタムステップの導入を紹介してみました。

使い方に慣れてきたら、リグのカスタムも自動化していってみるのをおすすめします。
モデルをリグにペアレントしたり、アトリビュートの初期値を設定したり、補助骨を追加したり...

maya python の書き方はわかりやすい記事がたくさんありますし、今だとAIに要件を指示してスクリプト化してもらう方法などもあるので、興味のある方は是非実践してみてください。

以上となります！
より多くの方にmGearを活用していただき、リギングを便利にするきっかけになれば幸いです！