2016年1月4日月曜日

Blender v2.76で作成したモデルをMecanim用に設定してUnityへインポートする


Blenderのバージョン違いなどにより、出回っているマニュアルっぽいのが役に立たなかったりするので、ハマったところを中心にメモ的に。


まずは適当にモデルデータを作成します。


Rigifyアドオンを有効にした上で、Shift + AからArmatureHuman(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 ButtonsGenerateからRigを生成します。


Objectモードに戻ってObjectを選択したあとにRigを追加で選択し、Ctrl + PWith Automatic Weightsを選択します。
この時点でモデルが消えたり、頭だけ残して消えたりするようであれば、User PreferencesFileタブにあるAuto Run Python Scriptsにチェックが入っていないと思われるので、チェックを入れた上で実行します。


これでモデルとRigが連動して変形するようになります。

WGTから始まるボーンが生成されますが、これは不要なようなのですべて削除します。

で、完成したと思ってfbxファイルにエクスポートしてUnityに取り込むと、かなりカオスな感じになります。

そのままだとUnityのMecanimで利用するには適切ではないボーンに紐づいているようで、Mecanim用に修正する必要があるようです。

公式っぽいところを見ると、「肩をDEF-shoulder.RDEF-shoulder.Lにスキニングして、親がORG-ribsであることを確認します。」と出てくるのですが、ORG-ribsなんてのは見つかりません。

どうやら、Blenderのバージョンが新しいとボーンの命名規則が変わっているようで、上記の手順は通用しないようです。

基本的にはDEFから始まるボーンではなく、ORGから始まるボーンを利用するということのようです。
確かに見てみるとDEFから始まるボーンは関節が人間の倍ぐらいあります。ぐにゃぐにゃするわけですね。

で、いくつかやり方はありそうですが、この動画を参考にやってみたところうまくいったので残しておきます。

流れとしてはDEFボーンをすべてORGボーンの子にしてしまう感じです。


まず、Rigを選択して、一番右下と右から3番目のレイヤーを表示します。

EditモードでDEF-hipsを選択し、Shiftを押しながらもう一度選択するとORG-hipsが選択されます。
重なっているので両レイヤーが有効になっていると区別出来なそうです。

それぞれのボーンを選択したら、Ctrl+PKeep 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で座標系が異なるので、ここで合わせておくそうです。

ArmatMeshをオンにしてエクスポートします。

吐き出したfbxファイルをUnityに読み込ませ、RigタブのAnimation TypeHumanoidに設定し、Configureをクリックします。

オールグリーンになりますが、あと一歩です。

BodyにあるToesの二箇所が、DEF-toe.LDEF-toe.RでDEFになっているのでORGに変更します。

HeadにあるHeadが、DEF-headになっているのでORG-headに変更します。

Left HandRight HandそれぞれにあるDistalが、すべてDEFになっているのでORGに変更します。
ちなみに、DistalのDEFになっているボーンはすべて02になって重複していたので、03を選択します。

これでDEFの駆逐が完全に完了し、設定終了です。

最後にMecanim Locomotion Starter Kitを使って動かしてみます。

元のモデルがアレなんで微妙ですが、多関節のクリーチャーみたいなのからは脱却出来ました。



0 件のコメント:

コメントを投稿