Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OLM R&D祭 2020 11/27 OLM RIG: 拡張可能なモジュール型のリグシステムによる社内リグ統合 / matsuri2020-Rig

OLM R&D祭 2020 11/27 OLM RIG: 拡張可能なモジュール型のリグシステムによる社内リグ統合 / matsuri2020-Rig

リグはアニメーションを支える重要なシステムの1つです。オー・エル・エム・デジタルではいくつかのリグシステムを作品ごとに使用していたため、作品数が増えるにしたがってメンテナンスや改良が困難になっていきました。従来のシステムを統合し、効率化・高速化した新しいリグシステムを紹介いたします。(中辛)

90143fe200ba565ad20f79c42b62c66f?s=128

OLM Digital R&D
PRO

December 15, 2020
Tweet

Transcript

  1. OLM RIG 拡張可能なモジュール型の リグシステムによる社内リグ統合 Marc Salvati © OLM Digital, Inc.

    1
  2. リギングとは © OLM Digital, Inc. 2

  3. リギングとは • パイプラインの最初の方 – アニメーションの準備 – 作品の質に影響大 © OLM Digital,

    Inc. 3 モデリング リギング テクスチャー アニメーション ライティング シェーディング レンダリング 合成・編集 パイプライン
  4. OLMでのリグ(以前) • アニメ系 – それぞれのチームのリガー – リガーの共有 – リガーの負担 =

    業務 + リグ • フルCG系 – Sprite Animationのリグ – Advanced Skeleton • 問題点 – 一貫性がない – リグのリーダーがいない – R&Dから助けられない © OLM Digital, Inc. 4
  5. OLMでのリグ(現在) • Sprite Animationベース • メンテがしやすい – 総合 – 汎用性高く

    – モジュール式 • 習いやすい、使いやすい – プログラミングできなくてもリグを組めるように – UIと管理ツールを充実 – 作成も実行も早く © OLM Digital, Inc. 5
  6. OLMでのリグ(現在) • リグチーム – すべての作品のリグ – 専門家 + リーダー •

    R&Dのサポート – 共同開発 – 現在の仕組みの改善 • R&Dから提案 • リグチームから依頼 – 新しい仕組み/ツールの提案と実装が可能 © OLM Digital, Inc. 6
  7. リグツールの中身 • ジョイント – 骨構造 • コントローラー – アニメーション –

    FK/IKのスイッチ – デフォーム • Skinning・その他のデフォーマー © OLM Digital, Inc. 7 ジョイント コントローラー Skinning Deformation
  8. OLM Rig © OLM Digital, Inc. 8 ジョイント コントローラー Skinning

    Deformation Skeleton editor モジュール作成編集 python 新モジュール モジュールによ るリグ生成 Connection based IK Fast Warp deformer Cage based deformer Kelvinlets OLM Array Mathematics (一括処理) OLM Mathematics (ツイスト, 回転)
  9. Skeleton © OLM Digital, Inc. 9

  10. Skeletonの対称対応 • 対称 – XY・YZ・XZによる対称 – 対称の自動認識 – 手動追加 –

    Mayaのノードで情報保存 • 再利用可能 • モジュール設定にも利用 • 対称編集 – 位置・回転の編集 – 編集したところ以外の位置・向きなどを保つ © OLM Digital, Inc. 10
  11. Skeletonの対称対応 © OLM Digital, Inc. 11

  12. コントローラー © OLM Digital, Inc. 12

  13. 書き直しの試し① • コードの整理 • MELからPythonで書き直し • 綺麗にしてからモジュール化 • 失敗 –

    既存のコードの理解が困難 • 数世代のコード • 使われていないコード • 実行順番に依存 – リグのすべてが混ざっている • コントラー以外の部分も – リグ知識不足 © OLM Digital, Inc. 13
  14. スペック試し • リグチームとの共通言語作成 • それぞれモジュールのスペック • それぞれの実装 • 失敗 –

    別仕組みを既存の仕組みに取り入れるのは難しい – 互換性を保ちたい – スペック自体が既存のものの改善版 • 結果が違うので正しい結果の確認が難しい © OLM Digital, Inc. 14
  15. 書き直しの試し② • 既存の仕組みの中で改善していく – 常に互換性を保つ – モジュールをラッピングで作る – 正確性を確認しつつ書き直す •

    コントローラーだけの部分に集中 • 成功! © OLM Digital, Inc. 15
  16. 仕組みの基本 • モジュール式 – ILMのBlock Partyのようなノードベース – Mayaのノードの仕組みを活かす – ノードのネットワークがリグのスペック

    – 評価の順番がコネクションの依存で決まる • 拡張可能 – ユーザーがモジュールを組み合わせ – 開発者が新しいモジュールを作成 © OLM Digital, Inc. 16
  17. 仕組みの基本 © OLM Digital, Inc. 17 ジョイント リグ

  18. 仕組みの基本 © OLM Digital, Inc. 18

  19. 仕組みの基本 © OLM Digital, Inc. 19

  20. 実装:クラス/モジュール • Pythonクラスで実装 • Mayaのノードのラッピング – ノード名を文字列よりもノードIDで管理したい – Pymelに置き換えた •

    リグのモジュールをクラスで表現 – Pythonモジュールに置き換え • クラスインヴァリエント不使用 • 共通APIだけ必要 – 開発中のクラスをダイナミックに更新しにくい © OLM Digital, Inc. 20
  21. なぜ ID管理・Pymel が必要か? • オブジェクト・ノードを区別して使いたい • 最後の返しは False • MObjectHandle使用

    – hashCode()関数を活用 – ラッピングクラスが必要 © OLM Digital, Inc. 21 import olm.node obj = olm.node.nameToObject("pSphere1") obj2 = olm.node.nameToObject("pSphere1") nametoobj = {} nametoobj[obj] = "pSphere1" obj2 in nametoobj
  22. なぜ ID管理・Pymel が必要か? © OLM Digital, Inc. 22 オブジェクトのラッピング Pythonのhashmapで使うため

    機能のラッピング
  23. なぜ ID管理・Pymel が必要か? • ラッピングのおかげでバグなどの修正可能 • 開発の負担が大きい – 結局MayaのAPIのクラス構造の再実装 •

    実はPymelがすでに・・・ – ラッピングして、バグ修正 – PythonでID管理 – オブジェクトの作成が遅い • 正しいクラスのインスタンスのため ‐ Pymel.lsコマンドがOLM の3倍遅い、MELの20倍遅い • オブジェクトの作成が少ないので大丈夫? © OLM Digital, Inc. 23
  24. モジュールの実装 • 作成 – Pythonモジュールから – Mayaのノードを動的に生成 • カスタムAttribute Editor

    UIを利用可能 • カスタムアイコンの設定が可能 • 設定 – UIでおすすめ・自動設定 – ミラーリング © OLM Digital, Inc. 24
  25. モジュールのミラーリング • 入力 – Skeletonの対称情報 – モジュール • 位置(左、中、右) •

    対称対応アトリビュートリスト – 対称平面(XY、XZ、YZ) • 出力 – 対称モジュールの生成 – 位置・回転のアトリビュートをミラー – モジュール対称情報生成 © OLM Digital, Inc. 25
  26. モジュールのUI © OLM Digital, Inc. 26

  27. モジュールの処理 © OLM Digital, Inc. 27 入力パラメーターチェッ ク 入力評価 入力のノードを処理

    Mayaのアトリビュート処理 入力のノードの出力を渡す 出力の作成 実行 サイクル チェック モジュールごとに処理
  28. モジュールの実装 © OLM Digital, Inc. 28 ノードのアトリビュート定義 ノード名、ID ミラーリング対応アトリビュート

  29. モジュールの実装 © OLM Digital, Inc. 29 おすすめ・自動設定 入力チェック

  30. モジュールの実装 © OLM Digital, Inc. 30 既存のコードのラッピング 出力アトリビュート用 ほかのノードからの入力 後処理パラメーター

  31. 後処理 • アトリビュートのハイド・ロック – ユーザーが触らなくていいところ – 事故を未然に防ぐ • すべての設定を済ませてから –

    値設定・アトリビュートコネクションが完了した時点でロック © OLM Digital, Inc. 31
  32. IK © OLM Digital, Inc. 32

  33. MayaのIK問題 • MayaのDependency Graph (DG) の仕組み – 入力/出力のアトリビュートのみを使う – ノードをパラレル評価可能

    © OLM Digital, Inc. 33
  34. MayaのIK問題 © OLM Digital, Inc. 34 IKソルバーノード 入力なし メッセージのみ IK

    ハンドルHandle ルートと末端のジョイント入力 出力なし メッセージのみ
  35. MayaのIK問題 © OLM Digital, Inc. 35

  36. MayaのIK問題 • メッセージを経由してノードにたどり着く – ジョイントチェインの特定 – ジョイントの位置・回転の取得 • 角度計算 •

    ジョイントの回転アトリビュートを設定 – 回転にコネクトするとおかしくなる • どうして?? – 普通にやるとサイクルが起きる – ジョイントの回転から回転を計算する必要があるため © OLM Digital, Inc. 36
  37. DGの基本を守るやり方 • 入力ジョイントから出力ジョイントへ © OLM Digital, Inc. 37

  38. IKの再実装 • Two bones IK – 直接計算する • Spline IK

    – Nurbsの代わりに線形で近似 • Nurbsよりも早い © OLM Digital, Inc. 38
  39. IKの再実装 • Fabrik IK – 反復法 © OLM Digital, Inc.

    39 FABRIK: a fast, iterative solver for the inverse kinematics problem Andreas Aristidou, Joan Lasenby, Graphical Models 2011
  40. 速度比較 © OLM Digital, Inc. 40 Two bones Maya Two

    bones OLM RP Maya Fabrik OLM RP Maya Fabrik OLM Spline IK Maya Spline IK OLM Nb bones 2 2 2 2 10 10 10 10 DG (fps) 16 50 17 25->80 7 8->21 3.5 4-5 Parallel (fps) 10 140 70 125 35 50 21 32
  41. 次のステップ • ジョイントの階層をアトリビュート化 © OLM Digital, Inc. 41 Create joints

    Out joints IK In joints Out joints Skinning In joints In Mesh Out Mesh
  42. まとめ • リグチームとのコラボレーションに成功 – 窓口が必要 • 専門家 • 技術が分かる •

    リーダシップ – 協力して答えを出す • 現在のOLMのリグはすべてOLM Rigを使用 – IKはまだ導入していない • リグの総合によりアニメーションを改善可能 – 別の発表で © OLM Digital, Inc. 42