Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

3DCGMeetup08_MayaRigSystem_mGear

12,996 views

Published on

3DCGMeetup #08 「オープンソースモジュラーリグシステム mGear の仕組みを紐解く」の資料です。
http://connpass.com/event/20485/

Published in: Technology
  • oh!! cool presentation :) please let me know next time you do one of this workshops. I would like to attend.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

3DCGMeetup08_MayaRigSystem_mGear

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

×