[cgwcc2016] ue4でリギング
TRANSCRIPT
UE4 de Rigging
~補助骨の自動化と AllrightRig についてちょっとだけ~フリーランス TA 上原達也
「ザ・リギング・マニアックス 2016 集まれリガーピーポー!~おーい、リガー達が秘伝の技を教えるってよ スペシャル」CGWORLD クリエイティブカンファレンス 2016
「 Maya でセットアップした補助骨の自動制御を UE4 でも再現できないかな?」
Maya
UE4
腕の動きに連動する肩の自動制御を Maya と UE4 で試してみました
モチベーション
https://youtu.be/5MXStcNYFUca https://youtu.be/2dJgOtTVlW8
Python でエクスプレッションが書ける「 maya_exprespy 」を利用。
自動肩:OFF
※ かなり適当な書き方ですがそこはご愛嬌・・・
Maya側
自動肩:ON
https://github.com/ryusas/maya_exprespy
エクスプレッションをノードに置き換える。
自動肩:OFF
UE4側
自動肩:ON
AnimBlueprint: EventGraph
AnimBlueprint: AnimGraph
Maya to UE4 の注意点 1.座標系が違う問題
Maya は右手系、 Y-up UE4 は左手系、 Z-up
Maya Translate X → Translate Y → Translate Z → Rotate X → Rotate Y → Rotate Z →
UE4 Translate X Translate Z -Translate Y Rotate X -Rotate Y -Rotate Z
SkeletalMesh の骨の場合の変換
軸を置き換えて考える →
※Rotate は Maya での RotateOrder が[xyz] の場合
Maya to UE4 の注意点 2.値を設定するときの骨の空間
標準ノードの Transform(Modify)Bone の場合以下の種類が存在する。 ・ World Space (シーンを基準とした空間) ・ Component Space (キャラクターを基準とした空間) ・ Parent Bone Space (親の骨を基準とした空間) ・ Bone Space (対象の骨を基準とした空間)
Maya to UE4 の注意点 2.値を設定するときの骨の空間
標準ノードの Transform(Modify)Bone の場合 World Space (シーンを基準とした空間) Component Space (キャラクターを基準とした空間) Parent Bone Space (親の骨を基準とした空間) Bone Space(対象の骨を基準とした空間)
回転に限って言えば、直感的なのは 「 Bone Space」バインドポーズの値が基準( X:0,Y:0,Z:0 )。※Maya 上で jointOrient に値を入れないようにセットアップしている場合は、「 Parent Bone Space」で考えるのが良いはず。
AllrightRig
http://alexallright.com/allrightrig/・ UE4 上で Rig を使った手付けアニメーションが出来てしまう。・既存のアニメーションをリグにベイクすることが出来てしまう。( UE4 上で!)
https://youtu.be/-eJe_cE0Zg0既存のアニメーションをリグコントローラにベイクして F カーブを修正するデモ動画
AllrightRig おまけ Transform(Modify)Bone の代わりとなる SetBoneLocationAndRotation が便利
メリット: 骨名や Location,Rotation 有効・無効の Pin を 持っているのでパラメータで制御できる。 デメリット?: 値の基準となる空間( BoneSpace )が ParentBoneSpace に固定されている。
AllrightRig おまけ TwoBoneIk が便利
UE4 標準の TwoBoneIK ノードは AnimGraph 内でしか利用できないノード・・・ これは、 EventGraph 内で利用できるので、 この結果をもとにさらに別の処理を組める。 最終的に骨に値を設定するときは、 AnimGraph で SetBoneLocationAndRotation等を利用。
以上です