Blenderでモデル/rig作成→UnityのMecanimで利用する(便利なPythonスクリプト付き)
1.私の環境について
- Blenderのバージョン:2.78a
- Unityのバージョン:Unity 5.5.0f1 (64-bit)
- ちなみにWindows10
2.Blenderの初期設定(必要な事前準備)
- Rigify Addonを有効にする
- UserPreferens > Addon -> Rigify -> on
- PythonScriptの自動実行を有効にする
- UserPreferens > Files -> Auto Run Pythons Scripts -> on
- (やらなくてもよいが)Blender で長さの単位を 1cm にするには, Properties > Scene > Units で Metric を選択して,スケールを 0.01 にする.
3.モデルを作成
ここは省略。
Blender自体、あまり使っていない人は、このチュートリアルがわかりやすいと思います。
以下、自分が良く使うショートカットをメモ
short-cut key | exp |
---|---|
t | 左メニュー表示 |
n | 右メニュー表示 |
tab | object/edit mode切り替え |
e | 押し出す |
s | scale s->x でx軸固定 |
s z n 0 enter | 頂点をz軸でそろえる |
r | 回転 r -> x -> 90 でx軸で90度回転 |
g | 移動 |
alt + f | 選択範囲の穴が開いたところに面を張る |
alt + Shift + f | 選択範囲の面を3角形に整える |
alt + m | 選択頂点を一つにまとめる |
obj選択 -> m | レイヤーを移動 |
Ctrl+n | 法線をそろえる |
w -> flip nomals | 法線を反転する |
Ctrl+r | ループカット |
ふと思い立ってBlenderで自分が頻繁に使用するショートカットをA4サイズにまとめてみました。主にモデリング/ビュー操作関連ですが、そろそろBlender覚えてみようかな、という方への参考になれば。#blender3d #b3d pic.twitter.com/EQKLZx7hUq
— まぐねじあむ (@magnesium1616) 2017年3月18日
4.Armature配置
- モデルが準備できたらrigの元となるArmatureを生成します。
- モデルのオブジェクトを選択して、以下の順番で、ショートカットを実行
short-cut key | exp |
---|---|
Shift + c | カーソルを原点に移動 |
Ctrl + a -> Scale | Scaleを(1,1,1)にリセット |
Shift + a -> Armature > Human(Meta-rig) | Armatureを作成 |
- Armatureが表示されたらサイズを調整して大体の大きさを合わせる。
- ボーンを合わせる前に、Armatureを選択した状態で Editモード(tab) -> options tab -> “x-Axsis mirror"にチェックを入れてX-ミラー状態に
- 各ボーンを体に合わせて配置していきます。
- その後、モデルオブジェクトを選択してからShiftを押しながらArmatureを追加選択後Ctrl + p > Amature Deform -> with automatic Widgets.でWeightを生成。その後調整します。(詳細は省略)
5.Rigifyを使ってRigを生成
- 納得のいく配置ができたら プロパティーのAmatureタブの一番下にある Rigの「Generate」ボタンを押下。Rigが生成されます。
- 必要に応じてrigのサイズをモデルに合わせてください。
Meta-rigは別のレイヤー退避させたり、非表示にしておきます。(捨てても良いです)
Weight Paintモードでボーンを個別に選択できないとき
- Armature を選択 >> Pose Mode に移行
- object を選択 >> Weight Paint Mode に移行 >> bone選択
Poseモードでポーズを元に戻したいとき
- [Pose]->[トランスフォームをクリア]->(クリアしたいもの)
Rigify自体の開設はこの方のブログの解説がわかりやすかったです。
- Rigifyの謎に迫る!~Human(meta-rig)編~:だらだら備忘録 - ブロマガ
ここから本題
ここまでは一般的なBlenderの操作方法です。いよいよUnity向けに調整していきます。
Unityからの公式のリファレンスとしては、以下のページでBlenderからUnityに取り込む方法が解説されています。
また、ネット上でもいろいろ解説記事が出ているのですがアプリのバージョンが違うのか、いろいろ試しても、Blender上では問題ないのに、Unityだと関節の位置がずれてしまい、気持ち悪い動きになるなど、中々うまくいきませんでした。
そんな中、英語の記事ですが以下の記事の内容が一番しっくりいって、自分でもうまくやることができました。
この内容を元に解説と手作業を減らすためのPythonスクリプトを作成したので紹介します。
いろいろ試してわかったことは
- 簡単にぽちっと一発変換ができるような方法は、存在しない。
- やり方は一つではない。いろんな方法があります。大きく分けてORG-で始まるboneをUnity側で利用するのか、DEF-で始まるボーンをUnity側で使うのか、明確に指針を決めておかないとうまくいかない。(ネット上の複数の記事を断片的にかいつまんで、実行するとうまくいかないのはこれが原因)
- Rigify addonを使うことは必須ではない。むしろBlender側でアニメーションを作らないのであれば、Rigifyを使わないほうがシンプルにできるかも。
といったところです。
6.Unityで読み込めるRigに調整する
上記「Blender Rigify to Unity Mecanim workflow」に書かれているやり方の手順を元に解説します。
Unityの公式リファレンスではDEF-*のボーンを利用して、Unityに取り込んでいますが、今回のやり方はORG-のボーンを使います。
[5.Rigifyを使ってRigを生成]の手順で、Rigのサイズを調整した後、 Properties > Rig を選択して(図[1])、Skelton セクションの Layers:パネルで一番最後と後ろから3番目のレイヤーのみを有効にします。(図[2])
一番後ろのレイヤーがORG-で始まるボーンで、後ろから3番目がDEF-で始まるボーンです。 Display の[X-Ray][Names」にそれぞれチェックを入れておくと(図[3])、各レイヤをON/OFFするたびに該当するボーンの表示、非表示が切り替わることを確認できると思います。
DEF-で始まるボーンの親(Parent)がORG-で始まるボーンになるようにボーンの構造を入れ替えていきます。またORG-自体の構造も調整します。 その際KeepOffsetにするかConnectedにするかも重要です。
手作業でひとつずつやる場合は、先に子のボーンを選択して、親になるボーンをシフトを押しながら選択した後、Ctrl+pを押することで親(Parent)を変更できます。その際KeepOffsetを選択するとConnectedにチェックが入らなくなります。結構なボリュームなので一括で実行できるPythonスクリプトを作成しました。
以下の内容(rigfy_Adjusts2Unity.py)をBlenderのTextEditorを開いて貼り付けて、Run Script(Alt+p)すると自動でボーンの親子関係の調整を実行してくれます。- その際Armature作成時に生成されたMetaRigを非表示および選択不可にする設定もスクリプト内部で行っています。(MetaRigはRigが生成された後は不要となります)
- またこれは必須ではないのですがRigfyを実行した時点でWGT-で始まるボーンが大量に生成されるのですが、これらはUnityでは使わないので、削除しておいたほうが良いです。(Unity上のPrefabが汚くなる)
- WGT-*ボーンを一括削除するスクリプトも作成しました。同様にPythonスクリプト(rigfy_DeleteWGT-bone.py)をTextEditor上で実行すると、きれいに削除してくれます。
これでリグの調整は終了です。
その後、ORG-のボーンに対してAutoWightを実行して、Poseモードで関節の動作などを確認、調整してください。
7.FBXを書き出す
Unityで読み込めるようにBlenderからFBX形式のファイルを書き出します。
- Objectモードで本体のMeshObjectとRigを選択してFile > Export > FBXを選択
- 以下のようにFBXの設定で SelectedObjectsにチェックを入れて、その下の欄でArmatとMeshのみを選択してください。
- FBXがExportされます。
8.Unity側でのboneの調整
- 出力されたFBXをドラッグ&ドロップなどでUnityに取り込みます。
- ProjectビューでFBXを選択して、Inspector上でRigのタブを選択し、Humanoidを選択してApplyします。
- その後Configureから、ボーンの紐づけの調整を行います。
- 基本的にはすべてORG-から始まるボーンを登録するようにします。 hipsはrootになっていたらORG-hipsに入れ替えます。 それ以外は以下の表を参照。
場所 | 変更前 | 変更後 |
---|---|---|
Body -> hips | root | ORG-hips |
Left Leg-> Toe | DEF-toe.L | ORG-toe.L |
Right Leg-> Toe | DEF-toe.R | ORG-toe.R |
Head-> Head | DEF-head | ORG-head |
LeftHand-> *Distal | DEF-*.02.L | ORG-*.03.L |
RightHand-> *Distal | DEF-*.02.R | ORG-*.03.R |
- ここまで来たらDoneを押しましょう。
9. Unityでアニメーション
もうちょっと書こうと思ったのですが、力尽きてきたのでいったん終了。 後日追記するかもしれません。
- Locomotion Starter Kitで調べてください。
- 作者: 榊正宗
- 出版社/メーカー: ボーンデジタル
- 発売日: 2016/05/26
- メディア: 大型本
- この商品を含むブログ (1件) を見る
キャラクターであそぼう! Unity日和。 ?UnityでBlender自作キャラクターを読み込んで楽しむ、シーン作り
- 作者: kappa,友
- 出版社/メーカー: ビー・エヌ・エヌ新社
- 発売日: 2015/06/23
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Oculus Riftでオレの嫁と会える本 UnityとMMDモデルで作る初めてのバーチャルリアリティ
- 作者: 桜花一門,ゆーじ
- 出版社/メーカー: 翔泳社
- 発売日: 2014/12/16
- メディア: 大型本
- この商品を含むブログ (2件) を見る
- 作者: 堀江貴文
- 出版社/メーカー: 朝日新聞出版
- 発売日: 2014/10/23
- メディア: ムック
- この商品を含むブログを見る