$30 off During Our Annual Pro Sale. View Details »

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

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

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

OLM Digital R&D
PRO

December 15, 2020
Tweet

More Decks by OLM Digital R&D

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. リギングとは
    • パイプラインの最初の方
    – アニメーションの準備
    – 作品の質に影響大
    © OLM Digital, Inc. 3
    モデリング
    リギング
    テクスチャー
    アニメーション
    ライティング
    シェーディング
    レンダリング 合成・編集
    パイプライン

    View Slide

  4. OLMでのリグ(以前)
    • アニメ系
    – それぞれのチームのリガー
    – リガーの共有
    – リガーの負担 = 業務 + リグ
    • フルCG系
    – Sprite Animationのリグ
    – Advanced Skeleton
    • 問題点
    – 一貫性がない
    – リグのリーダーがいない
    – R&Dから助けられない
    © OLM Digital, Inc. 4

    View Slide

  5. OLMでのリグ(現在)
    • Sprite Animationベース
    • メンテがしやすい
    – 総合
    – 汎用性高く
    – モジュール式
    • 習いやすい、使いやすい
    – プログラミングできなくてもリグを組めるように
    – UIと管理ツールを充実
    – 作成も実行も早く
    © OLM Digital, Inc. 5

    View Slide

  6. OLMでのリグ(現在)
    • リグチーム
    – すべての作品のリグ
    – 専門家 + リーダー
    • R&Dのサポート
    – 共同開発
    – 現在の仕組みの改善
    • R&Dから提案
    • リグチームから依頼
    – 新しい仕組み/ツールの提案と実装が可能
    © OLM Digital, Inc. 6

    View Slide

  7. リグツールの中身
    • ジョイント
    – 骨構造
    • コントローラー
    – アニメーション
    – FK/IKのスイッチ
    – デフォーム
    • Skinning・その他のデフォーマー
    © OLM Digital, Inc. 7
    ジョイント
    コントローラー
    Skinning
    Deformation

    View Slide

  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 (ツイスト, 回転)

    View Slide

  9. Skeleton
    © OLM Digital, Inc. 9

    View Slide

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

    View Slide

  11. Skeletonの対称対応
    © OLM Digital, Inc. 11

    View Slide

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

    View Slide

  13. 書き直しの試し①
    • コードの整理
    • MELからPythonで書き直し
    • 綺麗にしてからモジュール化
    • 失敗
    – 既存のコードの理解が困難
    • 数世代のコード
    • 使われていないコード
    • 実行順番に依存
    – リグのすべてが混ざっている
    • コントラー以外の部分も
    – リグ知識不足
    © OLM Digital, Inc. 13

    View Slide

  14. スペック試し
    • リグチームとの共通言語作成
    • それぞれモジュールのスペック
    • それぞれの実装
    • 失敗
    – 別仕組みを既存の仕組みに取り入れるのは難しい
    – 互換性を保ちたい
    – スペック自体が既存のものの改善版
    • 結果が違うので正しい結果の確認が難しい
    © OLM Digital, Inc. 14

    View Slide

  15. 書き直しの試し②
    • 既存の仕組みの中で改善していく
    – 常に互換性を保つ
    – モジュールをラッピングで作る
    – 正確性を確認しつつ書き直す
    • コントローラーだけの部分に集中
    • 成功!
    © OLM Digital, Inc. 15

    View Slide

  16. 仕組みの基本
    • モジュール式
    – ILMのBlock Partyのようなノードベース
    – Mayaのノードの仕組みを活かす
    – ノードのネットワークがリグのスペック
    – 評価の順番がコネクションの依存で決まる
    • 拡張可能
    – ユーザーがモジュールを組み合わせ
    – 開発者が新しいモジュールを作成
    © OLM Digital, Inc. 16

    View Slide

  17. 仕組みの基本
    © OLM Digital, Inc. 17
    ジョイント
    リグ

    View Slide

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

    View Slide

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

    View Slide

  20. 実装:クラス/モジュール
    • Pythonクラスで実装
    • Mayaのノードのラッピング
    – ノード名を文字列よりもノードIDで管理したい
    – Pymelに置き換えた
    • リグのモジュールをクラスで表現
    – Pythonモジュールに置き換え
    • クラスインヴァリエント不使用
    • 共通APIだけ必要
    – 開発中のクラスをダイナミックに更新しにくい
    © OLM Digital, Inc. 20

    View Slide

  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

    View Slide

  22. なぜ ID管理・Pymel が必要か?
    © OLM Digital, Inc. 22
    オブジェクトのラッピング Pythonのhashmapで使うため
    機能のラッピング

    View Slide

  23. なぜ ID管理・Pymel が必要か?
    • ラッピングのおかげでバグなどの修正可能
    • 開発の負担が大きい
    – 結局MayaのAPIのクラス構造の再実装
    • 実はPymelがすでに・・・
    – ラッピングして、バグ修正
    – PythonでID管理
    – オブジェクトの作成が遅い
    • 正しいクラスのインスタンスのため
    ‐ Pymel.lsコマンドがOLM の3倍遅い、MELの20倍遅い
    • オブジェクトの作成が少ないので大丈夫?
    © OLM Digital, Inc. 23

    View Slide

  24. モジュールの実装
    • 作成
    – Pythonモジュールから
    – Mayaのノードを動的に生成
    • カスタムAttribute Editor UIを利用可能
    • カスタムアイコンの設定が可能
    • 設定
    – UIでおすすめ・自動設定
    – ミラーリング
    © OLM Digital, Inc. 24

    View Slide

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

    View Slide

  26. モジュールのUI
    © OLM Digital, Inc. 26

    View Slide

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

    入力評価
    入力のノードを処理
    Mayaのアトリビュート処理
    入力のノードの出力を渡す
    出力の作成
    実行
    サイクル
    チェック
    モジュールごとに処理

    View Slide

  28. モジュールの実装
    © OLM Digital, Inc. 28
    ノードのアトリビュート定義
    ノード名、ID
    ミラーリング対応アトリビュート

    View Slide

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

    View Slide

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

    View Slide

  31. 後処理
    • アトリビュートのハイド・ロック
    – ユーザーが触らなくていいところ
    – 事故を未然に防ぐ
    • すべての設定を済ませてから
    – 値設定・アトリビュートコネクションが完了した時点でロック
    © OLM Digital, Inc. 31

    View Slide

  32. IK
    © OLM Digital, Inc. 32

    View Slide

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

    View Slide

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

    View Slide

  35. MayaのIK問題
    © OLM Digital, Inc. 35

    View Slide

  36. MayaのIK問題
    • メッセージを経由してノードにたどり着く
    – ジョイントチェインの特定
    – ジョイントの位置・回転の取得
    • 角度計算
    • ジョイントの回転アトリビュートを設定
    – 回転にコネクトするとおかしくなる
    • どうして??
    – 普通にやるとサイクルが起きる
    – ジョイントの回転から回転を計算する必要があるため
    © OLM Digital, Inc. 36

    View Slide

  37. DGの基本を守るやり方
    • 入力ジョイントから出力ジョイントへ
    © OLM Digital, Inc. 37

    View Slide

  38. IKの再実装
    • Two bones IK
    – 直接計算する
    • Spline IK
    – Nurbsの代わりに線形で近似
    • Nurbsよりも早い
    © OLM Digital, Inc. 38

    View Slide

  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

    View Slide

  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

    View Slide

  41. 次のステップ
    • ジョイントの階層をアトリビュート化
    © OLM Digital, Inc. 41
    Create joints
    Out joints
    IK
    In joints
    Out joints
    Skinning
    In joints
    In Mesh
    Out Mesh

    View Slide

  42. まとめ
    • リグチームとのコラボレーションに成功
    – 窓口が必要
    • 専門家
    • 技術が分かる
    • リーダシップ
    – 協力して答えを出す
    • 現在のOLMのリグはすべてOLM Rigを使用
    – IKはまだ導入していない
    • リグの総合によりアニメーションを改善可能
    – 別の発表で
    © OLM Digital, Inc. 42

    View Slide