リグはアニメーションを支える重要なシステムの1つです。オー・エル・エム・デジタルではいくつかのリグシステムを作品ごとに使用していたため、作品数が増えるにしたがってメンテナンスや改良が困難になっていきました。従来のシステムを統合し、効率化・高速化した新しいリグシステムを紹介いたします。(中辛)
OLM RIG拡張可能なモジュール型のリグシステムによる社内リグ統合Marc Salvati© OLM Digital, Inc. 1
View Slide
リギングとは© OLM Digital, Inc. 2
リギングとは• パイプラインの最初の方– アニメーションの準備– 作品の質に影響大© OLM Digital, Inc. 3モデリングリギングテクスチャーアニメーションライティングシェーディングレンダリング 合成・編集パイプライン
OLMでのリグ(以前)• アニメ系– それぞれのチームのリガー– リガーの共有– リガーの負担 = 業務 + リグ• フルCG系– Sprite Animationのリグ– Advanced Skeleton• 問題点– 一貫性がない– リグのリーダーがいない– R&Dから助けられない© OLM Digital, Inc. 4
OLMでのリグ(現在)• Sprite Animationベース• メンテがしやすい– 総合– 汎用性高く– モジュール式• 習いやすい、使いやすい– プログラミングできなくてもリグを組めるように– UIと管理ツールを充実– 作成も実行も早く© OLM Digital, Inc. 5
OLMでのリグ(現在)• リグチーム– すべての作品のリグ– 専門家 + リーダー• R&Dのサポート– 共同開発– 現在の仕組みの改善• R&Dから提案• リグチームから依頼– 新しい仕組み/ツールの提案と実装が可能© OLM Digital, Inc. 6
リグツールの中身• ジョイント– 骨構造• コントローラー– アニメーション– FK/IKのスイッチ– デフォーム• Skinning・その他のデフォーマー© OLM Digital, Inc. 7ジョイントコントローラーSkinningDeformation
OLM Rig© OLM Digital, Inc. 8ジョイントコントローラーSkinningDeformationSkeleton editorモジュール作成編集python 新モジュールモジュールによるリグ生成Connection based IKFast Warp deformerCage based deformerKelvinletsOLM Array Mathematics (一括処理)OLM Mathematics (ツイスト, 回転)
Skeleton© OLM Digital, Inc. 9
Skeletonの対称対応• 対称– XY・YZ・XZによる対称– 対称の自動認識– 手動追加– Mayaのノードで情報保存• 再利用可能• モジュール設定にも利用• 対称編集– 位置・回転の編集– 編集したところ以外の位置・向きなどを保つ© OLM Digital, Inc. 10
Skeletonの対称対応© OLM Digital, Inc. 11
コントローラー© OLM Digital, Inc. 12
書き直しの試し①• コードの整理• MELからPythonで書き直し• 綺麗にしてからモジュール化• 失敗– 既存のコードの理解が困難• 数世代のコード• 使われていないコード• 実行順番に依存– リグのすべてが混ざっている• コントラー以外の部分も– リグ知識不足© OLM Digital, Inc. 13
スペック試し• リグチームとの共通言語作成• それぞれモジュールのスペック• それぞれの実装• 失敗– 別仕組みを既存の仕組みに取り入れるのは難しい– 互換性を保ちたい– スペック自体が既存のものの改善版• 結果が違うので正しい結果の確認が難しい© OLM Digital, Inc. 14
書き直しの試し②• 既存の仕組みの中で改善していく– 常に互換性を保つ– モジュールをラッピングで作る– 正確性を確認しつつ書き直す• コントローラーだけの部分に集中• 成功!© OLM Digital, Inc. 15
仕組みの基本• モジュール式– ILMのBlock Partyのようなノードベース– Mayaのノードの仕組みを活かす– ノードのネットワークがリグのスペック– 評価の順番がコネクションの依存で決まる• 拡張可能– ユーザーがモジュールを組み合わせ– 開発者が新しいモジュールを作成© OLM Digital, Inc. 16
仕組みの基本© OLM Digital, Inc. 17ジョイントリグ
仕組みの基本© OLM Digital, Inc. 18
仕組みの基本© OLM Digital, Inc. 19
実装:クラス/モジュール• Pythonクラスで実装• Mayaのノードのラッピング– ノード名を文字列よりもノードIDで管理したい– Pymelに置き換えた• リグのモジュールをクラスで表現– Pythonモジュールに置き換え• クラスインヴァリエント不使用• 共通APIだけ必要– 開発中のクラスをダイナミックに更新しにくい© OLM Digital, Inc. 20
なぜ ID管理・Pymel が必要か?• オブジェクト・ノードを区別して使いたい• 最後の返しは False• MObjectHandle使用– hashCode()関数を活用– ラッピングクラスが必要© OLM Digital, Inc. 21import olm.nodeobj = olm.node.nameToObject("pSphere1")obj2 = olm.node.nameToObject("pSphere1")nametoobj = {}nametoobj[obj] = "pSphere1"obj2 in nametoobj
なぜ ID管理・Pymel が必要か?© OLM Digital, Inc. 22オブジェクトのラッピング Pythonのhashmapで使うため機能のラッピング
なぜ ID管理・Pymel が必要か?• ラッピングのおかげでバグなどの修正可能• 開発の負担が大きい– 結局MayaのAPIのクラス構造の再実装• 実はPymelがすでに・・・– ラッピングして、バグ修正– PythonでID管理– オブジェクトの作成が遅い• 正しいクラスのインスタンスのため‐ Pymel.lsコマンドがOLM の3倍遅い、MELの20倍遅い• オブジェクトの作成が少ないので大丈夫?© OLM Digital, Inc. 23
モジュールの実装• 作成– Pythonモジュールから– Mayaのノードを動的に生成• カスタムAttribute Editor UIを利用可能• カスタムアイコンの設定が可能• 設定– UIでおすすめ・自動設定– ミラーリング© OLM Digital, Inc. 24
モジュールのミラーリング• 入力– Skeletonの対称情報– モジュール• 位置(左、中、右)• 対称対応アトリビュートリスト– 対称平面(XY、XZ、YZ)• 出力– 対称モジュールの生成– 位置・回転のアトリビュートをミラー– モジュール対称情報生成© OLM Digital, Inc. 25
モジュールのUI© OLM Digital, Inc. 26
モジュールの処理© OLM Digital, Inc. 27入力パラメーターチェック入力評価入力のノードを処理Mayaのアトリビュート処理入力のノードの出力を渡す出力の作成実行サイクルチェックモジュールごとに処理
モジュールの実装© OLM Digital, Inc. 28ノードのアトリビュート定義ノード名、IDミラーリング対応アトリビュート
モジュールの実装© OLM Digital, Inc. 29おすすめ・自動設定入力チェック
モジュールの実装© OLM Digital, Inc. 30既存のコードのラッピング出力アトリビュート用ほかのノードからの入力後処理パラメーター
後処理• アトリビュートのハイド・ロック– ユーザーが触らなくていいところ– 事故を未然に防ぐ• すべての設定を済ませてから– 値設定・アトリビュートコネクションが完了した時点でロック© OLM Digital, Inc. 31
IK© OLM Digital, Inc. 32
MayaのIK問題• MayaのDependency Graph (DG) の仕組み– 入力/出力のアトリビュートのみを使う– ノードをパラレル評価可能© OLM Digital, Inc. 33
MayaのIK問題© OLM Digital, Inc. 34IKソルバーノード入力なしメッセージのみIK ハンドルHandleルートと末端のジョイント入力出力なしメッセージのみ
MayaのIK問題© OLM Digital, Inc. 35
MayaのIK問題• メッセージを経由してノードにたどり着く– ジョイントチェインの特定– ジョイントの位置・回転の取得• 角度計算• ジョイントの回転アトリビュートを設定– 回転にコネクトするとおかしくなる• どうして??– 普通にやるとサイクルが起きる– ジョイントの回転から回転を計算する必要があるため© OLM Digital, Inc. 36
DGの基本を守るやり方• 入力ジョイントから出力ジョイントへ© OLM Digital, Inc. 37
IKの再実装• Two bones IK– 直接計算する• Spline IK– Nurbsの代わりに線形で近似• Nurbsよりも早い© OLM Digital, Inc. 38
IKの再実装• Fabrik IK– 反復法© OLM Digital, Inc. 39FABRIK: a fast, iterative solver for the inverse kinematics problemAndreas Aristidou, Joan Lasenby, Graphical Models 2011
速度比較© OLM Digital, Inc. 40TwobonesMayaTwobonesOLMRPMayaFabrikOLMRP MayaFabrikOLMSpline IKMayaSpline IKOLMNb bones 2 2 2 2 10 10 10 10DG (fps) 16 50 17 25->80 7 8->21 3.5 4-5Parallel(fps)10 140 70 125 35 50 21 32
次のステップ• ジョイントの階層をアトリビュート化© OLM Digital, Inc. 41Create jointsOut jointsIKIn jointsOut jointsSkinningIn jointsIn MeshOut Mesh
まとめ• リグチームとのコラボレーションに成功– 窓口が必要• 専門家• 技術が分かる• リーダシップ– 協力して答えを出す• 現在のOLMのリグはすべてOLM Rigを使用– IKはまだ導入していない• リグの総合によりアニメーションを改善可能– 別の発表で© OLM Digital, Inc. 42