littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

Blenderでモデル/rig作成→UnityのMecanimで利用する(便利なPythonスクリプト付き)

1.私の環境について

  • Blenderのバージョン:2.78a
  • Unityのバージョン:Unity 5.5.0f1 (64-bit)
  • ちなみにWindows10

2.Blenderの初期設定(必要な事前準備)

  1. Rigify Addonを有効にする
    • UserPreferens > Addon -> Rigify -> on
  2. PythonScriptの自動実行を有効にする
    • UserPreferens > Files -> Auto Run Pythons Scripts -> on
  3. (やらなくてもよいが)Blender で長さの単位を 1cm にするには, Properties > Scene > Units で Metric を選択して,スケールを 0.01 にする.

3.モデルを作成

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 ループカット

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するたびに該当するボーンの表示、非表示が切り替わることを確認できると思います。
    f:id:pigshape:20161203113103p:plain

  • 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のみを選択してください。
    f:id:pigshape:20161203163457p:plain
  • FBXがExportされます。

8.Unity側でのboneの調整

  • 出力されたFBXをドラッグ&ドロップなどでUnityに取り込みます。
  • ProjectビューでFBXを選択して、Inspector上でRigのタブを選択し、Humanoidを選択してApplyします。

f:id:pigshape:20161203213431p:plain

  • その後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でアニメーション

f:id:pigshape:20161205092753p:plain

もうちょっと書こうと思ったのですが、力尽きてきたのでいったん終了。 後日追記するかもしれません。

  • Locomotion Starter Kitで調べてください。

東北ずん子で覚える! アニメキャラクターモデリング

東北ずん子で覚える! アニメキャラクターモデリング

キャラクターであそぼう! Unity日和。 ?UnityでBlender自作キャラクターを読み込んで楽しむ、シーン作り

キャラクターであそぼう! Unity日和。 ?UnityでBlender自作キャラクターを読み込んで楽しむ、シーン作り

Oculus Riftでオレの嫁と会える本 UnityとMMDモデルで作る初めてのバーチャルリアリティ

Oculus Riftでオレの嫁と会える本 UnityとMMDモデルで作る初めてのバーチャルリアリティ

xReality (週刊朝日Mook)

xReality (週刊朝日Mook)