【簡単!】ボクセルモデルお気軽アニメーション / Unity
はじめに
この記事は、Unity Advent Calendar 2020、25日目の記事です
目的
ボクセルモデルにBlender等でボーンを入れた場合、アニメーション時に
メッシュが曲がってしまいます。
※ウェイト塗りを適切にすると治りますが、その手法は今回は割愛
こちらより引用。肘に注目すると曲がってるのが分かりやすいかも?
(これは好みですが)僕はボクセルが曲がってると気になる性格なので、
きっちり整った状態でUnityでアニメーションさせていきましょう!
今回は
・MagicaVoxel 0.99.6.2
・Unity 2019.4.9f1
下準備
モデル作成に自信ないので、モデルはこちらのサイトのを使用します。
インポートしてすぐの状態です。
これから、このモデルを動かしたいパーツ単位に分割します。
まずは、作業しやすいように複製しておきます。
そして、各モデルをパーツのみになるよう削っていきます。
パーツごとに分割しました。
腕・脚などの左右に分かれているパーツも、左右用にそれぞれ用意します。
できました。
また、この段階で画像左部のようにモデルごとに名前を決めておくと、
Unityインポート時に判別しやすいです。
Unityにもっていく
まずMagicaVoxelで作成したモデルをエクスポートします。
IOセッティングにて、LocalSpaceをONにします。
LocalSpaceというのは、モデルのXYZ座標が 各オブジェクトの中心 基準か
ワールドの中心 基準かで、ONの場合前者になります。
パーツ分割の段階でオブジェクトの位置をずらしているため、OFFにするとUnityでインポートした際に、全てのPositionを(0,0,0)にしてもずれます。
その後、objを選択してエクスポート。
マテリアルやテクスチャなど、大量に生成されるのでフォルダー作成し
そこへのエクスポートをお勧めします。
エクスポートしたものを全選択し、Unityにインポートします。
モデルファイルのみをHierarchyにD&Dすると、このようになります。
関節を設定する
今のままでは、各パーツを回転させると破綻してしまいます。
これは、オブジェクトの回転軸がすべて(0,0,0)・・・心臓付近を中心に
しているからです。
Unityで回転軸を指定する方法、それはGameObjectの子にすることです。
空のGameObjectを生成し、各パーツの理想の回転軸の位置に設置後、
そのパーツを子にすると・・・
親のオブジェクトを回転させることで、適切に曲げることができました。
これを各パーツごとに設定します。
各パーツの回転軸を指定>>子にしてやるだけでは、例えばこのように
付け根を動かしたときに連動して動く 再現ができません。
このようなときは、連動して動かしたいパーツの回転軸ごと子にする ことで
解決します。
(モデルが膝部分でガクッとなってるためズレてますが、合ってます!)
これを全パーツに適応します!
(大変ですが、あとちょっと!!)
余談です。Scaleが1の時、1ボクセルはUnity上では0.1mです。
GameObjectはCtrl押しながら移動でSnapできますが、
そのスナップ距離はデフォルト0.25mです。
このスナップ距離は、Edit>Grid and Snap Settings > Moveで変更可能です。
これをボクセルの1単位の半分である0.05にしておくと、
簡単に回転軸を設定することができます。
こんな感じになりました。
Coreと呼ばれる全ての親を腰当たりに設置し、
そこから尻と体を派生・・・させてみました。
アニメーションさせる
Core部分にAnimatorをアタッチし、例として歩くモーションを作ります。
Animationビューを開いた状態で
(Animatorのアタッチされた)Coreを選択すると、縦線が表示されて
Keyを打てるようになります。
(余談ですが、Animation左上のSamplesは1秒間に何フレーム分 のアニメーションを再生するかです。60だと細かく設定できますし、4などにすると
1秒に4フレーム分しか登録できないので楽です。
数字が低いとカクカクかというとそうでもなく、補間が入ります。)
左上の赤いマークを押すと録画モードに入ります。
この間にTransformのポジション・角度などを変えると、
その変更がそのフレームにKeyとして登録されます。
ありがちなミスとして
・同じフレームでずっと上書きし続けていた
・録画モードのままだった(アニメーションに関係ない動きが追加される)
などが上げられます。フレームの変更・録画の停止を忘れずに!
このようになりました。
アニメーション作業には5分ほどしかかかっておらず、
慣れてくるとより早く・丁寧に作ることができると思います。
(僕は相変わらずセンスがないため下手ですが)
おわりに
これで、ボクセルの曲がらないアニメーションを
手軽に作ることができました!
元のモデルの質やアニメーションのセンスにクオリティが左右されますが、
今回の作業工程自体には、そこまで複雑なものはないと思います。
(外部ツールの新たな使い方も覚える必要なく、ほとんどUnity上で
完結するのもいいよね)
ボクセルワールドを皆で築き上げましょう!!
ここまで読んでいただき、ありがとうございました。