16.3K Views
October 21, 22
スライド概要
2015年10月31日に行われた3DCGMeetup第8回で公開された資料です。
mGearというリグシステムを紹介しています。当時のバージョンは1.1のようです。2022年10月現在のバージョンは4.0となっており、古い資料ということがわかります。
システムの根幹部分の説明などは今でも変わらない部分が多いので参考になるのではないかと思います。
MGEAR Maya rigging framework モジュラーリギングシステムの 仕組みを紐解く 2015 / 10 / 31 3DCG Meetup #8 イベント資料
私は、フリーランスの テクニカルアーティスト です。 上原 達也 Twitter: ue_ta http://ueta.hateblo.jp/ 2015年1月からフリーランスをはじめました。フリーになってから PS4/XBoxOne タイトル3作品ほどお手伝いさせていただきました。
mGearってなに? 無償で配布されている Maya用の リグシステムです。
リグってなんだろう アニメーション作業を便利にするモノです。 昔昔、Play Station1のさらに初期の頃は、 リグなし(FK)でアニメーションを 作っていたそうな・・・。 会社員時代の先輩談
リグってなんだろう アニメーション 作業 リグ作り
リグってなんだろう mGearで 楽をしよう リグ作り
今日やること mGearについて 3つ のステップで解説。 1 簡単に使う 2 使いこなす 3 仕組みを知る
簡単に使う 簡単に使う 1-1 1-2 1-3 1-4 1-5 インストール セットアップしてみる ワークフローのおさらい アニメーション作業時の細かい話 まとめ
1-1 インストール 環境 ・Windows, Maya 2016, mGear 1.1 取得 ・http://www.miquel-campos.com/ へアクセス。 ・[mGear1.1]のページからダウンロードページへ。 ・販売サイトに跳ぶが、0円決済可能。アカウント登録不要。 ※ダウンロードリンク取得のためにメールアドレスの入力が必要。 資料 配置 ・マイドキュメントのmaya\2016の中に、modulesフォルダを作成する。 (このmodulesフォルダは標準では存在しないが、 あれば、Mayaが勝手に認識してくれる(Pathはすでに通っている)) ・ダウンロードした圧縮ファイルを展開し、mGear_1.1\WIN\mGear_2016 フォルダを任意の場所に置く。ためしにmodulesに入れてみましょう。 ・フォルダの中にある“mgear.mod”ファイルをmodulesの直下に移動。 ・mgear.modをテキストエディタで書き換える。 変更前 + mGear 1.0 C:\your\path\to\mGear_folder 変更後 + mGear 1.0 mGear_2016
1-1 インストール 確認 ・Mayaを起動し、メニューを確認。 ・もし確認できない場合、ロードされていないかもしれません。 そんなときは、「プラグインマネージャ」を確認し、 ロードにチェックを入れます。 資料
簡単に使う 簡単に使う 1-1 1-2 1-3 1-4 1-5 インストール セットアップしてみる ワークフローのおさらい アニメーション作業時の細かい話 まとめ
1-2 セットアップしてみる モデルデータ モデルデータは、株式会社マウスコンピューター 様 のG-Tuneのマスコットキャラクター「Gちゃん」を 使用しています。 配布先:http://www.g-tune.jp/campaign/10th/mmd/ モデリング:銀獅 様 実演
1-2 セットアップしてみる ・補足 UI表示 ガイド読み込み リグと骨 生成
1-2 セットアップしてみる ・補足 ガイドを左右反対方向に複製 ガイドを複製 FK/IK切り替え 部位ごとに設定項目がある
簡単に使う 簡単に使う 1-1 1-2 1-3 1-4 1-5 インストール セットアップしてみる ワークフローのおさらい アニメーション作業時の細かい話 まとめ
1-3 ワークフローのおさらい ・よくあるリギングワークフロー モデリング 骨入れ スキニング (バインド) リギング アニメーション
1-3 ワークフローのおさらい ・mGearのリギングワークフロー モデリング ガイド調整 リギング スキニング アニメーション (バインド) 骨も自動生成 順序が逆になってる 骨の代わりにガイド
簡単に使う 簡単に使う 1-1 1-2 1-3 1-4 1-5 インストール セットアップしてみる ワークフローのおさらい アニメーション作業時の細かい話 まとめ
1-4 アニメーション作業時の細かい話 実演補足 FK mode IK mode リグのセレクター表示 Mirror Pose FKとIKをアトリビュートのBlend 値で切り替えるとポーズが代わっ てしまうが・・・ FK mode IK mode 選択したコントローラのポーズが反対側にミ ラーされる Flip Pose 選択したコントローラのポーズが反転 セレクターに用意されている IK/FK切り替えスイッチを使うと ポーズを維持したまま切り替えら れる。
簡単に使う 簡単に使う 1-1 1-2 1-3 1-4 1-5 インストール セットアップしてみる ワークフローのおさらい アニメーション作業時の細かい話 まとめ
1-5 まとめ とにかく簡単に使えて便利! しかし、リグ生成後にスキニングするワークフローのため、 既にスキニングされたモデルを利用する場合、スキニングをやり直す必要が あるという問題がある。 また、骨が階層化されていないので、ゲームモーションデータ として利用するのは難しい。 階層化されていない骨
使いこなす 使いこなす 2-1 ガイドの追加とプロパティ 2-2 UIホスト 2-3 コントローラの形状 2-4 2-5 2-6 2-7 リグモジュール追加 ガイド生成部分のカスタマイズ リグ生成部分のカスタマイズ まとめ
2-1 ガイドの追加とプロパティ ロングコートの丈の部分に リグを追加するには? 実演
2-1 ガイドの追加とプロパティ 補足 親にしたいガイドを選択してから追加する リグの初期設定情報は青いボタンから
2-1 ガイドの追加とプロパティ プロパティの例 リグモジュール:chain_02 全モジュール共通 ・名前。(左右に依存しない名前) ・左右の情報。 ・連番。複数ある場合に数値を指定する。 ・※後述 ・リグ生成後のパラメータの集約先。※後述 Ikrefarray : IKの親空間をスイッチングできる機能 各ガイドのRootを指定する。複数指定する場合は、 , (コンマ)で区切る。 例:body_C0_root, foot_L0_root 補足:名前に“_”(アンダーバー)は使用不可です。
使いこなす 使いこなす 2-1 ガイドの追加とプロパティ 2-2 UIホスト 2-3 コントローラの形状 2-4 2-5 2-6 2-7 リグモジュール追加 ガイド生成部分のカスタマイズ リグ生成部分のカスタマイズ まとめ
2-2 UIホスト リグ生成後、 各リグモジュールの調整パラメータは1箇所集約されるが・・・ UI Host UIホストを使うと ユーザーの使いやすいように分散させられる。 UI Host
2-2 UIホスト 設定方法 ダミー(control_01など)のガイドを適当な場所に配置 armUI_L0_root プロパティで UI Host として指定する
使いこなす 使いこなす 2-1 ガイドの追加とプロパティ 2-2 UIホスト 2-3 コントローラの形状 2-4 2-5 2-6 2-7 リグモジュール追加 ガイド生成部分のカスタマイズ リグ生成部分のカスタマイズ まとめ
2-3 コントローラの形状 様々な形状の コントローラが自動生成されるように見えますが・・・
2-3 コントローラの形状 これがデフォ
2-3 コントローラの形状 人型テンプレートの場合 実は、 controllers_org の中に準備されていた。 リグ生成 コントローラ コントローラ 調整 保存 リグ削除 リグ生成 2度目から 作らなくてOK コントローラを選択してから[ Extr.Ctl ]で保存できる。 (controllers_orgへ自動コピー)
使いこなす 使いこなす 2-1 ガイドの追加とプロパティ 2-2 UIホスト 2-3 コントローラの形状 2-4 2-5 2-6 2-7 リグモジュール追加 ガイド生成部分のカスタマイズ リグ生成部分のカスタマイズ まとめ
2-4 リグモジュールの追加 リグモジュールは、それぞれPythonモジュールになっています。 ¥mGear_2016¥scripts¥mgear¥maya¥rig¥component リグの生成処理 ガイドの生成処理 とりあえず、 コピペして動くのでは?
2-4 リグモジュールの追加 eye_01モジュールの機能拡張版を作る 1.eye_01 をコピペして eye_02 を作ります。 2.eye_02¥guide.py の以下の部分を書き換えます。 3.ガイドのUIを一度閉じて開きなおすと追加されます。 追加されない場合は、メニューの[mGear]-[Utilities]-[reload]を試してみてください。
使いこなす 使いこなす 2-1 ガイドの追加とプロパティ 2-2 UIホスト 2-3 コントローラの形状 2-4 2-5 2-6 2-7 リグモジュール追加 ガイド生成部分のカスタマイズ リグ生成部分のカスタマイズ まとめ
2-5 ガイド生成部分のカスタマイズ 新しいパラメータを追加してみます 1.(あまり深く考えず) eye_02¥guide.py に以下の部分を追加します。 2.コードを書き換えたらメニューの[mGear]-[Utilities]-[reload] してください。 3.ガイドを作成し、プロパティを確認。 追加された
使いこなす 使いこなす 2-1 ガイドの追加とプロパティ 2-2 UIホスト 2-3 コントローラの形状 2-4 2-5 2-6 2-7 リグモジュール追加 ガイド生成部分のカスタマイズ リグ生成部分のカスタマイズ まとめ
2-6 リグ生成部分のカスタマイズ パラメータの値で処理を分岐 1. eye_02¥__init__.py に以下の部分を追加します。 2.ガイドの部分で追加したパラメータを使って処理を分岐させます。 self.settingsでパラメータの値を取得できてしまう!簡単! self.settings[”パラメータ”] この例では、角度制限を設定しています。 3. 動作確認。 Limit : OFF Limit : ON
2-7 まとめ ちょっとした機能拡張なら、 数行のコードを追加するだけで 別のモジュールが作れてしまう!(しかも汎用的) でも、実はそんなうまい話は無くて、 もうちょっと中の仕組みを理解しておかないと 「よくわからん」ということになります。
仕組みを知る 仕組みを知る 3-1 mGearの全体像 3-2 インポート周りの実装 3-3 テンプレートメソッド 3-4 まとめ
3-1 MGEARの全体像 なんのシステムもフレームワークも使わず リグを組むとき、どうやって作るでしょうか。 IK Handle 追加して、 コントローラにコンストレイントして、 肘のアップベクターコントローラ作って、 極ベクトルにコントローラ割り当てて・・・ 「よし、意図した動きができるようになった」 といったように、ある程度 部位ごとに完成させながら作る と思います。
3-1 MGEARの全体像 ビルに例えると 普通にリグを作るときは、 ビルを1棟ずつ作っていくイメージ。 mGearは、 すべてのビルを 少しずつ作っていくイメージ。
3-1 MGEARの全体像 リグの生成を行うと、いくつかのステップが実行される Step 00 : Objects コントローラ、補助ノードの生成 Step 01 : Properties パラメータの追加 Step 02 : Oparators コンストレイント、エクスプレッションの追加 Step 03 : Connect 他のリグモジュールとの関連づけ
3-1 MGEARの全体像 例:リグモジュールA、B、Cの処理順 Step 03 : Connect Step 02 : Oparators Step 01 : Properties A B C Step 00 : Objects
3-1 MGEARの全体像 リグ生成の設定でステップを選べる リグを生成するとき どのステップまで実行するか を選べるので 確認しながら作れる。 不具合があったときのデバッグにも役立つ。
仕組みを知る 仕組みを知る 3-1 mGearの全体像 3-2 インポート周りの実装 3-3 テンプレートメソッド 3-4 まとめ
3-2 インポート周りの実装 リグモジュールは動的にインポートされている。 Pythonでモジュールをインポートする場合は以下のように書けると思います。 import chain_02.guide しかし、リグモジュールの名前はユーザーが独自に決められるので モジュールがあるフォルダをチェックして、一つずつインポートする処理 が必要となります。 import “chain_02.guide” こんな文字列で指定したい
3-2 インポート周りの実装 リグモジュールは動的にインポートされている。 組み込み関数の__import__()を使うと文字列を指定してインポートできる。 module = __import__(“mgear.maya.rig.componet.chain_02.guide”, … 戻り値で得られた module は、通常の import で得られるモジュールと同じ。 ComponentGuide = getattr(module , “Guide”) 以下でも同様 ComponentGuide = module.Guide
3-2 インポート周りの実装 モジュールのリロードも動的に。 インポートと同様に、リロードも組み込み関数の__import__()が利用されている。 # guide.py の場合 module = __import__(“mgear.maya.rig.componet.chain_02.guide”, … #__init__.py の場合 module = __import__(“mgear.maya.rig.componet.chain_02”, … reload(module)
仕組みを知る 仕組みを知る 3-1 mGearの全体像 3-2 インポート周りの実装 3-3 テンプレートメソッド 3-4 まとめ
3-3 テンプレートメソッド モジュールの中身。 リグの生成処理 ガイドの生成処理 2つのPythonファイルの中には、それぞれ、クラスが定義されています。 ここでは、リグ生成の方を例にして説明したいと思います。 class Component(MainComponent): __init__.py の中では、Componentクラスが定義されていますが、上記の ような記述になっており、これは、MainComponentを継承していること を意味します。 親クラス MainComponent 子クラス Component
3-3 テンプレートメソッド 継承。 親クラス • • • • • • モジュールRoot処理 オブジェクト追加 パラメータ追加 オペレータ追加 コネクションの構築 終了処理 「mGearの全体像」で述べたように、リグ生成は ステップごとに実行されるわけですが、それら すべてのステップは親クラスに記述 されています。 継承することによってどんな便利なことが起きるかと いうと 継承 子クラスでは、 子クラス(リグモジュール) • • • • • • モジュールRoot処理 オブジェクト追加 パラメータ追加 オペレータ追加 コネクションの構築 終了処理 そのリグモジュール特有の内容だけ 書きます。これによって必要最低限のコーディングで リグモジュールが作れます。 重複する処理は、親クラスが負担してくれているので、 無駄な記述は不要ということです。 上書き デザインパターン(ソフトウエア設計の作例?)では、 これを テンプレートメソッドパターン というらしい。(あまり自身はない・・)
まとめ 仕組みがちゃんとしてるので改造しやすい。 全体的な設計イメージが掴めてしまえば、 多少プログラミングに理解のある人なら弄れてしまう。 Python中級者がスキルを磨くのにちょうどよい(?) 骨の自動生成部分をなんとかすれば、 ゲームアセット用途としても利用できる。
まとめ Thank you!!