ボクセルモデルをUnityで動かしたい
3Dモデルを動かすためには、ボーン(骨)の追加やモデルとボーンのリンクなど、さまざまな作業が必要です。まずは、MagicaVoxelで作成したボクセルモデルをUnityにインポートできる状態に整えることが重要です。
今回は3Dモデルを動かすために欠かせないボーンと3Dモデルをリンクさせるための『ウェイトペイント』をBlenderを使って行っていきます。
ボクセルを動かせるようになると、どんなことができる?
- オリジナルゲームでキャラクターとして使える。
- VRChatでアバターとして使える。
- 動かせるボクセルモデルを使って、アニメーションを作成できる。
- ポーズを取らせたボクセルモデルを3Dプリンターで立体物として出力できる。
Unityで自キャラにして操作してみたい!
用意するソフト
- MagicaVoxel
- Blender
この記事ではBlender4.2.1LTSを使用しています。
今回は前回のウェイト編の改良版!
本編
今回は前回のウェイト編の改良版になります。
便利なアドオン「VoxCleanerV2」を使用して、効率よくウェイトペイントを行う流れをまとめました。
前回までの問題点
前回ウェイトペイントを行うにあたっていくつか問題点があった。
インポートしたままのボクセルモデルだと頂点が多すぎる。
アドオンで頂点を綺麗にしたら腕や足を曲げるための頂点も無くなってしまった。
こちらの記事で詳しく書いてあるよ
腕も足も真っ直ぐだから不要な頂点という事になってしまった
というわけで、まずはボクセルモデルの見直しから行っていく。
MagicaVoxel
身体の各部位を分割する
頂点を作りたい所で身体を分割し、無理やり頂点を作らせるという作戦。
分割したい部分を選択
グリッド表示をONにすると白い部分が見やすくなる
横からの視点も上手く使おう
レイヤーを追加し貼り付け
全ての部位を分割
Blenderにインポートした際、座標の位置が大事になる。
PLYで出力して次はBlenderへ
Blender
インポートしモデルを結合
VoxCleanerV2
「Apply Vertex Colors」頂点カラーを表示
「Clean Model」でクリーン
ボクセルモデルの比較
腕と足が特に増えてる
ベイク
2に行きベイク?
UV開き、解像度高くし、ベイク
ウェイトペイントの準備
以前作ったアーマチュアがあるのでそちらを使用する。
アーマチュアの作り方はこちらの記事で
アーマチュアをアペンド
ボーン→オブジェクトの順に選択しウェイトペイントモードへ
準備完了!次はウェイトペイントをしていくよ
ウェイトペイント
「Alt+クリック」で「Hip」のボーンを選択し、まずは全体を「ウェイト1」で塗る。
これで最終的に塗っていない部分を無くすことができる。
マスクを使って効率よく塗る
※向きをリセットするにはAlt+R
塗ったらRキーを押して動きを確認しよう
※Rキーを押したあと、もう一度Rキーを押すと回転の向きを変えることができる。
現在こんな感じで塗られている
ミラーリングを活用しよう
肩、上腕、下腕、手を塗っていく。
ミラーリング
ミラーにチェックを入れたら肩、上腕、下腕、手と順番に塗っていこう。
ミラーを活用すると、反対側も自動で塗ってくれるようになる。
腕の残りもウェイトをかける
足にもウェイトをかける
足首は動かさないから塗らなくていいか
細かい調整を行う
このままでも動かすことはできるけど、気になる部分があるので細かく調整していこう。
ボーンの微調整
ボーンの位置調整
オブジェクトモードでボーンを選択し、編集モードにする。
膝の部分を選択し、Gキーで上に移動。
いい感じ!
ウェイトの緩和
ウェイトのかかり具合を緩和させよう
まず現在どういう状態かというと、上足は膝の部分にウェイトがかかっていなく、下足のみウェイトがかかっている。ウェイトをバランスよくかけることでつぶれるのを回避できる。
下足からウェイトを0.5貰ってくることができた。
膝の部分の頂点
上足のウェイト 0 → 0.5
下足のウェイト 1.0 → 0.5
※必ず合計が1.0になるようにしないといけない
ウェイトの数値のチェック
「頂点で選択」でウェイトの数値を確認することができる。
選択した頂点のウェイト情報が表示される。合計が1になっていると上手くウェイトが塗れているということになる。
2つのボーンに0.5ずつ割り振られている。
完成
ウェイトペイントが終わったのでポーズととらせてみよう
ポーズをとらせる
感想
VoxCleanerV2を使いモデル容量を軽くしつつ、前回より楽にウェイトペイントを行う事が出来ました。MagicaVoxelでボクセルモデルを作る時は、先の事を考えながら作っていく必要があると感じました。