MagicaVoxel→Blender→Unityでボクセルモデルを動かす④
MagicaVoxelで作ったボクセルにBlenderでアニメーションをつけてUnityで動かそう、の4回目。
使用するツール
・MagicaVoxel 0.97.4
・Blender 2.74
・Unity 5.3.4f1
前回はボクセルモデルにボーンを設定したところまで進んだ。
今回はボクセルモデルとボーンを関連付けて、ウェイトというものを設定する。
・ボクセルモデルとボーンを関連付け
もしモードがObject Modeになっていなかったら、Tabキーを押すか下図の水色枠をクリックしてObject Modeにする。
そしてボクセルモデルを右クリックで選択すると、赤枠のようなレンチのアイコンが表示されるので、それを選択する。
表示された「Add Modifier」をクリックすると、追加するものの一覧が出るので、「Armature」を選択する。
Objectと表示された下の空になっている部分をクリックすると、「Armature」という名前が表示されるのでそれを選択する。もし自分でArmatureの名前を変更していたら、変更された名前が表示されるはずなのでそれを選択する。
これでOK。
ついでに後の作業を見やすくするために、ボーンの表示形式を切り替える。
右クリックでボーンを選択して、赤枠の人型アイコンをクリックすると、Displayという項目がある。
今はOctahedというのになっているので、これをStickに変えておく。
その下にある「X-Ray」のチェックボックスにもチェックを入れておく。
・ウェイトを設定する
※ここから先の話が面倒な人は、「Armature Deform With Automatic Weights」でググると幸せになるかもしれない
ボクセルモデルとボーンが関連付いたので、ウェイトを設定する準備が整った。
これからは、下記のモードを切り替えながらそれぞれのボーンにウェイトを設定していく。
・Pose Mode
右クリックでボーンを選択してドラッグすると角度を変えることができる。ウェイトを設定してあるとそれに従って曲がるので、これでポーズを作ることができる。
・Weight Paint
丸ブラシのようなものを使って、頂点にウェイトを「塗る」ことができる。
塗る範囲やウェイトの変化量などは、左の「Tools」タブにあるBrushから変更できる。
詳細はこちらにあるので目を通しておいた方がいい。
https://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Modeling/Meshes/Weight_Paint
正直なところ、この2つのモードの切り替えをスムーズにする方法をよく理解していないので、以降は無駄な操作をしているかもしれない・・・。
まず、頭のウェイトを塗ってみよう。
Object Modeでボーンを選択した状態でCtrl + Tabキーを押すとPose Modeになるので、Headボーンを選択する。(水色になる)
そのままボクセルモデルを選択すると、表示はObject Modeに戻る。
そこからさらにCtrl + Tabキーを押すと、Headボーンが水色の状態でWeight Paintになる・・・はず。
こうすることで、「今から塗るウェイトはHeadボーンに設定するものですよ」という状態にできる。
次に、左上の球体のアイコンをクリックして、ブラシを選択する。
ウェイトを加算するときは「F Add」、間違ったりして減算したいときは「F Subtract」を選択するといい。今はひたすら加算するので「F Add」にする。
この先は人それぞれ好みになるのだけど、塗る範囲や強さを調整する。
自分は全体をざっと塗るよりは塗りたい頂点を細かく選んでいきたいので、WeightとStrを強くして塗る範囲は小さくした。Curveの曲線も、○の中はほぼ一番強い状態にした。
これで準備が整った。
ウェイトを塗る作業は非常に地道な作業なので、お茶とお菓子と好きな音楽でも用意して根気よく塗っていく。
今作業している頭は他のボーンの影響を考えないで済むので、頭全体を真っ赤に(ウェイトが最大値の1.0)なるまで塗っていく。
右クリックからドラッグすると、今塗っている状態でボーンを動かしたときの形が見られるので、塗り残しが無いかチェックできる。
もし塗り残しやウェイトが1.0に満たない場所があると、みょーんと伸びるポリゴンが出てくる。
完成。
ぐきっ
ごきっ
塗り残しも無さそうだ。
こんな感じで、それぞれのボーンを選択して頂点にウェイトを設定していく。
ただ、これ以降の作業は頭ほど単純な作業にはならないのでとても難しくなる。
というのも、頭はHeadボーンのことだけ考えて設定すればよかったため、全部真っ赤にすればよかった。
しかし、首から下は自然な人間の動きになるように、関節にあたる部分は隣り合ったボーンにもそれぞれいい感じのウェイトを割り当てるようにしないといけない。
参考までに、自分が塗った結果を貼っておく。
もとのポリゴンの形が原因で、曲げると形が崩れるところもあるけど今回は気にしない。
肩
首の付け根から肩までがわずかに追従する程度
腕
胸
体
腰
足
腰や太もも辺りのウェイトが少なめなのは、強く追従すると腰周りのポリゴンが破綻するため。
これでボーンを動かすとそれに従ってボクセルモデルも動くようになった。
ここまでの作業結果を保存しよう。
次回はボーンを動かしてアニメーションを作成する。
// 2016/07/26 追記
・マスターボーンの追加
上の画像の中で、今までの説明で追加した覚えのないボーンがあるのに気付いた人もいるかもしれない。
身体の中心から真後ろに一本突き出ている。
これはマスターボーンと呼ばれるものなのだが、前回の説明にどうもうまく入れられなかったのでここに書いておく。
まずはボーンの親子関係について。
前回、最初に作ったBodyを基点として、上方向にChest、さらに三方向にHead、Shoulder_L、Shoulder_Rと作った。
このようにtipから派生して作成したボーンは、この順番に従って親子関係というものを持っている。
逆のrootから作成したボーンは、親子の関係を持たない。
この状態は、画面右上に出ている一覧からArmatureを展開していくと見ることができる。
※これはマスターボーンを追加する前
また、Edit Modeで各ボーンを選択して、右の骨アイコンを選択することでも確認できる。こちらは変更もできる。
で、マスターボーンはどのような立ち位置になるのかというと、名前の通り全てのボーンの中で最上位の親となるように作成する。
こうすることで、マスターボーンを移動するとモデル全体が移動する、というように全体の動きをこいつ一本にまかせることができる。
他のボーンはポーズを取るための移動や回転に専念することができるわけだ。
というわけで、まずはボーンを追加する。
Edit ModeでBodyのrootを選択した状態でEキーを押す。
もし2つのボーンが表示されたら、以前有効にしたX-Axis Mirrorがそのままになっているはずなので、左のOptionタブで表示してチェックを外すこと。
モデルの後ろに真っ直ぐ作成したいので、Yキーを押してY軸方向に固定し、適当な長さで確定する。
また初期設定の名前になっているので、「Master」に変更する。
次に、親子関係を変更する。
先ほどの骨アイコンを押した状態でBodyを選択し、赤枠のところをクリックすると親として指定できるボーンの一覧が表示されるので、「Master」を選択する。
同様に、Hip_L、Hip_Rの親にもMasterを設定する。
設定後、右上を見ると下記のようにMaster以外のボーンがインデント1つ下がったような感じになっているはず。
また、Pose ModeでMasterを右クリックで選択してドラッグすると、ボクセルモデルとボーンの全部が一緒になって動いてくれるはず。
これで完成。
忘れず保存しておく。