Blenderのバージョン違いなどにより、出回っているマニュアルっぽいのが役に立たなかったりするので、ハマったところを中心にメモ的に。
まずは適当にモデルデータを作成します。
Rigifyアドオンを有効にした上で、
Shift + Aから
Armatureの
Human(Meta-Rig)を選択し、Armatureを追加します。
オブジェクトモードでオブジェクトの位置、サイズをRigに大まかに合わせます。
Locationが0, 0, 0になるように、オブジェクトの原点を
Shift + Ctrl + Alt + Cで中心に置いた3Dカーソルに合わせます。
Scaleが1, 1, 1になるように
Ctrl + AでScaleをリセットします。
ボーンを選択してEditモードに入り、
Amature Optionsから
X-Axis Mirrorをオンにしたうえでチマチマと位置合わせします。
骨がすべてうまいこと肉に収まったら、
Rigify Buttonsの
GenerateからRigを生成します。
Objectモードに戻ってObjectを選択したあとにRigを追加で選択し、
Ctrl + Pで
With Automatic Weightsを選択します。
この時点でモデルが消えたり、頭だけ残して消えたりするようであれば、
User Preferencesの
Fileタブにある
Auto Run Python Scriptsにチェックが入っていないと思われるので、チェックを入れた上で実行します。
これでモデルとRigが連動して変形するようになります。
WGTから始まるボーンが生成されますが、これは不要なようなのですべて削除します。
で、完成したと思ってfbxファイルにエクスポートしてUnityに取り込むと、かなりカオスな感じになります。
そのままだとUnityの
Mecanimで利用するには適切ではないボーンに紐づいているようで、
Mecanim用に修正する必要があるようです。
公式っぽいところを見ると、「肩を
DEF-shoulder.Rと
DEF-shoulder.Lにスキニングして、親が
ORG-ribsであることを確認します。」と出てくるのですが、
ORG-ribsなんてのは見つかりません。
どうやら、Blenderのバージョンが新しいとボーンの命名規則が変わっているようで、上記の手順は通用しないようです。
基本的にはDEFから始まるボーンではなく、ORGから始まるボーンを利用するということのようです。
確かに見てみるとDEFから始まるボーンは関節が人間の倍ぐらいあります。ぐにゃぐにゃするわけですね。
で、いくつかやり方はありそうですが、
この動画を参考にやってみたところうまくいったので残しておきます。
流れとしてはDEFボーンをすべてORGボーンの子にしてしまう感じです。
まず、Rigを選択して、一番右下と右から3番目のレイヤーを表示します。
Editモードで
DEF-hipsを選択し、Shiftを押しながらもう一度選択すると
ORG-hipsが選択されます。
重なっているので両レイヤーが有効になっていると区別出来なそうです。
それぞれのボーンを選択したら、
Ctrl+Pで
Keep Offsetを選択します。
これで後から選択したボーンが親になります。
以下5組のボーンに対して同じ作業で親子関係を正します。
DEF-hips ORG-hips
DEF-spine ORG-spine
DEF-chest ORG-chest
DEF-neck ORG-neck
DEF-head ORG-head
腕、脚、指にもORGボーン一本につきDEFのボーンが二本あります。
DEFボーン二つを選択した後にORGボーンを選択し、同じくKeep Offsetで親子にします。
複数選択した場合は、すべてが最後に選択したボーンの子になるようです。
以下腕4組、脚4組、指10組と結構あります。
DEF-upper_arm.01.R DEF-upper_arm.02.R ORG-upper_arm.R
DEF-forearm.01.R DEF-forearm.02.R ORG-forearm.R
DEF-upper_arm.01.L DEF-upper_arm.02.L ORG-upper_arm.L
DEF-forearm.01.L DEF-forearm.02.L ORG-forearm.L
DEF-thigh.01.R DEF-thigh.02.R ORG-thigh.R
DEF-shin.01.R DEF-shin.02.R ORG-shin.R
DEF-thigh.01.L DEF-thigh.02.L ORG-thigh.L
DEF-shin.01.L DEF-shin.02.L ORG-shin.L
DEF-f_pinky.01.R.01 DEF-f_pinky.01.R.02 ORG-f_pinky.01.R
DEF-f_ring.01.R.01 DEF-f_ring.01.R.02 ORG-f_ring.01.R
DEF-f_middle.01.R.01 DEF-f_middle.01.R.02 ORG-f_middle.01.R
DEF-f_index.01.R.01 DEF-f_index.01.R.02 ORG-f_index.01.R
DEF-thumb.01.R.01 DEF-thumb.01.R.02 ORG-thumb.01.R
DEF-f_pinky.01.L.01 DEF-f_pinky.01.L.02 ORG-f_pinky.01.L
DEF-f_ring.01.L.01 DEF-f_ring.01.L.02 ORG-f_ring.01.L
DEF-f_middle.01.L.01 DEF-f_middle.01.L.02 ORG-f_middle.01.L
DEF-f_index.01.L.01 DEF-f_index.01.L.02 ORG-f_index.01.L
DEF-thumb.01.L.01 DEF-thumb.01.L.02 ORG-thumb.01.L
これでUnityの
Mecanim用のボーンの設定は完了です。
FBXでエクスポートして動作を確認してみます。
エクスポートする際は、オプションで
Selected Objectsをチェックし、
Forwardを
-Z Forwardから
Z Forwardに変更します。
BlenderとUnityで座標系が異なるので、ここで合わせておくそうです。
Armatと
Meshをオンにしてエクスポートします。
吐き出したfbxファイルをUnityに読み込ませ、Rigタブの
Animation Typeを
Humanoidに設定し、
Configureをクリックします。
オールグリーンになりますが、あと一歩です。
Bodyにある
Toesの二箇所が、
DEF-toe.Lと
DEF-toe.RでDEFになっているのでORGに変更します。
Headにある
Headが、
DEF-headになっているので
ORG-headに変更します。
Left Handと
Right Handそれぞれにある
Distalが、すべてDEFになっているのでORGに変更します。
ちなみに、
DistalのDEFになっているボーンはすべて02になって重複していたので、03を選択します。
これでDEFの駆逐が完全に完了し、設定終了です。
最後に
Mecanim Locomotion Starter Kitを使って動かしてみます。
元のモデルがアレなんで微妙ですが、多関節のクリーチャーみたいなのからは脱却出来ました。