【簡単!】ボクセルモデルお気軽アニメーション / Unity

はじめに

この記事は、Unity Advent Calendar 2020、25日目の記事です

目的

ボクセルモデルにBlender等でボーンを入れた場合、アニメーション時に
メッシュが曲がってしまいます。
※ウェイト塗りを適切にすると治りますが、その手法は今回は割愛

画像1

こちらより引用。肘に注目すると曲がってるのが分かりやすいかも?

(これは好みですが)僕はボクセルが曲がってると気になる性格なので、
きっちり整った状態でUnityでアニメーションさせていきましょう!

今回は
・MagicaVoxel 0.99.6.2
・Unity 2019.4.9f1

下準備

モデル作成に自信ないので、モデルはこちらのサイトのを使用します。

スクリーンショット 2020-12-24 111206

インポートしてすぐの状態です。

これから、このモデルを動かしたいパーツ単位に分割します。

スクリーンショット 2020-12-24 111351

まずは、作業しやすいように複製しておきます。
そして、各モデルをパーツのみになるよう削っていきます。

スクリーンショット 2020-12-24 111830

パーツごとに分割しました。
腕・脚などの左右に分かれているパーツも、左右用にそれぞれ用意します。

スクリーンショット 2020-12-24 112249

できました。

また、この段階で画像左部のようにモデルごとに名前を決めておくと、
Unityインポート時に判別しやすいです。

Unityにもっていく

まずMagicaVoxelで作成したモデルをエクスポートします。

スクリーンショット 2020-12-24 112614

IOセッティングにて、LocalSpaceをONにします。

LocalSpaceというのは、モデルのXYZ座標が 各オブジェクトの中心 基準か
ワールドの中心 基準かで、ONの場合前者になります。

パーツ分割の段階でオブジェクトの位置をずらしているため、OFFにするとUnityでインポートした際に、全てのPositionを(0,0,0)にしてもずれます。

その後、objを選択してエクスポート。
マテリアルやテクスチャなど、大量に生成されるのでフォルダー作成し
そこへのエクスポートをお勧めします。

スクリーンショット 2020-12-24 113329

エクスポートしたものを全選択し、Unityにインポートします。

スクリーンショット 2020-12-24 113439

モデルファイルのみをHierarchyにD&Dすると、このようになります。

関節を設定する

今のままでは、各パーツを回転させると破綻してしまいます。

スクリーンショット 2020-12-24 113745

これは、オブジェクトの回転軸がすべて(0,0,0)・・・心臓付近を中心に
しているからです。

Unityで回転軸を指定する方法、それはGameObjectの子にすることです。

空のGameObjectを生成し、各パーツの理想の回転軸の位置に設置後、
そのパーツを子にすると・・・

スクリーンショット 2020-12-24 114111

親のオブジェクトを回転させることで、適切に曲げることができました。
これを各パーツごとに設定します。

スクリーンショット 2020-12-24 114325

各パーツの回転軸を指定>>子にしてやるだけでは、例えばこのように
付け根を動かしたときに連動して動く 再現ができません。

このようなときは、連動して動かしたいパーツの回転軸ごと子にする ことで
解決します。

スクリーンショット 2020-12-24 114528

(モデルが膝部分でガクッとなってるためズレてますが、合ってます!)

これを全パーツに適応します!
(大変ですが、あとちょっと!!)

余談です。Scaleが1の時、1ボクセルはUnity上では0.1mです。
GameObjectはCtrl押しながら移動でSnapできますが、
そのスナップ距離はデフォルト0.25mです。

このスナップ距離は、Edit>Grid and Snap Settings > Moveで変更可能です。
これをボクセルの1単位の半分である0.05にしておくと、
簡単に回転軸を設定することができます。

スクリーンショット 2020-12-24 115638

こんな感じになりました。

Coreと呼ばれる全ての親を腰当たりに設置し、
そこから尻と体を派生・・・させてみました。

アニメーションさせる

Core部分にAnimatorをアタッチし、例として歩くモーションを作ります。

スクリーンショット 2020-12-24 115951

Animationビューを開いた状態で
(Animatorのアタッチされた)Coreを選択すると、縦線が表示されて
Keyを打てるようになります。

スクリーンショット 2020-12-24 120128

(余談ですが、Animation左上のSamplesは1秒間に何フレーム分 のアニメーションを再生するかです。60だと細かく設定できますし、4などにすると
1秒に4フレーム分しか登録できないので楽です。
数字が低いとカクカクかというとそうでもなく、補間が入ります。)

左上の赤いマークを押すと録画モードに入ります。
この間にTransformのポジション・角度などを変えると、
その変更がそのフレームにKeyとして登録されます。

ありがちなミスとして
・同じフレームでずっと上書きし続けていた
・録画モードのままだった(アニメーションに関係ない動きが追加される)

などが上げられます。フレームの変更・録画の停止を忘れずに!

画像16

このようになりました。

アニメーション作業には5分ほどしかかかっておらず、
慣れてくるとより早く・丁寧に作ることができると思います。
(僕は相変わらずセンスがないため下手ですが)

おわりに

これで、ボクセルの曲がらないアニメーション
手軽に作ることができました!

元のモデルの質やアニメーションのセンスにクオリティが左右されますが、
今回の作業工程自体には、そこまで複雑なものはないと思います。

(外部ツールの新たな使い方も覚える必要なく、ほとんどUnity上で
完結するのもいいよね)

ボクセルワールドを皆で築き上げましょう!!

ここまで読んでいただき、ありがとうございました。


いいなと思ったら応援しよう!