MagicaVoxel→Blender→Unityでボクセルモデルを動かす 改③(終)
ボクセルモデルに自動ウェイト機能を使って楽をしたい、の3回目。
前回は、MagicaVoxelのエクスポートにply形式を使うことで、Blenderの自動ウェイト機能を使用することができたところまで進んだ。
今回はそれをUnityに取り込むところから。
前回の最後、blendファイルをUnityにインポートしようとするとエラーになると書いたのだけど、どうやら今のUnityとBlender2.77で問題が発生するためらしい。
この前インポートできていたファイルもできなくなっていた。
Windows7上だけじゃないかという話も。
・Unityへインポート
仕方ないのでBlenderのバージョンを2.74に戻したところ、そのまま読み込めるようになった。
とはいえ、なかなか思うようにはいかない。
ply形式の場合、色は頂点色を用いていたのでテクスチャが存在しない。
頂点色は取り込めないみたいで、これをSceneに配置しても寒天で作ったようなキャラしか表示できなかった。
・頂点色からテクスチャを作る
無ければ作るしかない。
一旦Blenderに戻る。
調べてみると、UV展開で作成したUVマップに頂点色を焼きこんでやることで作れるらしい。
何を言っているかわからん?
大丈夫だ、自分もよくわかっていない。
まずは作業に必要なウィンドウを用意する。
上の赤枠のボタンを押して、UV Editingを選択する。
左にUV/Image Editor、右に3D Viewという配置になる。
plyでインポートしたのに左にテクスチャらしきものが出ているのは、このblendファイルがobjをインポートしたものを使いまわしているため。通常は存在しない。下の「×」ボタンを押して消しておく。
UV展開
さて、ボクセルモデルに対してUV展開を実行する。
やることは、サイコロのような立方体にハサミを入れて十字のような平面にする作業と思って間違いない・・・はず。
Edit ModeでAキー2度押しで全メッシュを選択し、下のメニューからMesh→UV Unwrap→Smart UV Projectを選択する。
処理に必要な閾値らしきものを訊かれるので、そのままOKを押す。
すると左側に何か出た。
これが右のモデルを平面に展開したもの。というよりは、UV座標の対応表といった方が近い?
この対応表を適用する、テクスチャの実体を用意してやろう。
下の「New」と書いてあるボタンを押す。
作成するテクスチャの名前と大きさ、色等を決めてOKを押す。
自分は名前をEmily_texとし、それ以外はそのままOKにした。
すると、このようになる。
下の方にアニメーション作成で見た覚えのあるFボタンがあるので、念のため押しておく・・・。
これでUVマップが出来た。
頂点色焼きこみ
このテクスチャに、頂点色を焼きこむ。
右側のウィンドウをProperty(今までのDefault画面でずっと右側に出ていたやつ)に切り替えよう。
左下のボタンから選択する。
上に並んだアイコンの中からカメラのアイコンを探して選択し、下にスクロールしていくと「Bake」という項目がある。これを使用する。
「Full Render」と書かれたところをクリックして、出てきた一覧から「Vertex Colors」を選択し、すぐ上のBakeボタンを押す。
すると、左側のテクスチャに対応する頂点色に基づいた色が描き込まれる。
このテクスチャを保存・・・しようと思ったが、ふと右側を3D Viewに戻して見てみるとモデルに何やら細かい線のようなものが出来てしまっている。
これは、テクスチャ側の色矩形とUV座標の矩形がわずかにずれてしまうことで発生するらしい。
詳しくは下記のやり取りにて。
ありがたいことに解決法も記載してあるので試してみよう。
unwrapするときのIsland Marginという値を0.05にして
BakeのMarginを1にする。
結果は下記の通り。
テクスチャの方は余分な色塗りを小さくして、UV座標の方はちょっと小さめに設定するようにした感じだろうか。
素晴らしい。
下のメニューからImage→Save As Imageで画像ファイルとして保存する。
blendファイルも保存してBlenderを閉じる。
・Unityへインポート再挑戦
Unityを起動して適当なプロジェクトを作成し、先ほど保存したblendファイルを放り込む。
Texturesフォルダを作成して、同じく先ほど保存した画像ファイルを放り込む。
隣のMaterialsフォルダに移動してマテリアルを選択し、Inspectorビューでテクスチャを指定する。
モデルをHierarchyに放り込むと・・・
できたー
見た目変わらないので画像にはしないけど、アニメーションも問題なく動作した。
ということで、今回辿った方法をまとめると下記のようになる。
①MagicaVoxelでモデリング、ply形式でエクスポート
②Blenderにインポート、重複頂点削除
③ボーンを設定して自動ウェイト設定、必要に応じて手修正
④アニメーション作成
⑤頂点色をテクスチャに焼きこんで別途保存
⑥Unityにインポート、加工して動かす
なんだか山登りで山頂から今まで登ってきた道を見下ろしているような感覚になるなぁ・・・。
せっかく3Dモデルを動かせるようになったのだから何か作りたいね。
MagicaVoxel→Blender→Unityでボクセルモデルを動かす 改②
ボクセルモデルに自動ウェイト機能を使って楽をしたい、の2回目。
前回は、MagicaVoxelからエクスポートしたモデルで自動ウェイト機能が使えずどうしよう、というところまで進んだ。
MagicaVoxel内ではデータを格子状で持っているはずなのに、obj形式で出力するときに最適化してくれているようだ。
それはそれでありがたい機能なのだけど、今やりたいことに対してはちょっと困ってしまう。
・MagicaVoxelから別の形式でエクスポートしてみる
MagicaVoxelがエクスポートできる形式はobjだけではない。
他の形式でエクスポートすればなんとかならないだろうか。
というわけで、この中からply(ply Mesh)というのを選んでみた。
Wikipediaに説明がある。
PLY (file format) - Wikipedia, the free encyclopedia
エクスポートしたファイルをテキストエディタで開いてみた。
なんと各頂点の座標に加えて色の情報も持っている。
確かにエクスポートしたファイルは1つだけでpngファイルが無かった。
・Blenderにお試しインポート
Blenderを起動して、plyファイルをインポートしてみる。
スケールを整えてWireframeで表示してみる。
お、元のボクセル通りのメッシュになっている。これはいけそうだ。
・ボクセルモデルを差し替える
また最初からやり直すのも大変なので、以前アニメーションまで作成したファイルを読み込んで、ボクセルモデルだけ差し替えてみよう。
Pose Modeで全部のボーンを選択し、下のメニューからPose→Clear Transform→Rotationを選択して、アニメーションの回転情報を初期化する。
初期のポーズに戻ればOK。
次に、ボクセルモデルとArmatureの関連付けを外す。
Object Modeでボクセルモデルを選択して、右のレンチアイコンをクリックしてその下の赤枠「×」ボタンを押す。
Pose Modeでボーンを動かしてもモデルは動かなくなったはず。
ここまでできたら、ボクセルモデルを選択してDeleteキーを押す。確認のポップアップが出るのでDeleteを選択する。ボーンだけが残る。
plyファイルを読み込んで、Sキーを押して0.1と入力してスケールをあわせる。
同じに見えるけどメッシュの形は前回と全く異なる。
さて、前回の操作を実行して自動ウェイト機能を使用・・・といきたいところだけど、その前に不要な頂点を削除する。
設定にもよると思うが、画面の右上に現在読み込んだモデルの情報が出ている。
このモデルは頂点数が9136個となっている。
前回まで読み込んでいたモデルとメッシュが異なるとはいえ、4倍強ほどの数だ。
ply形式は1つのポリゴンを構成する4つの点をポリゴン毎に別々で持っているため、今回のような格子状メッシュだと1つの頂点が大体4回くらい使われることになるからだろうと思う。
重複する頂点は削除しよう。
【2020/04/24追記】
Blender2.8では重複頂点削除の機能自体が大きく変わったので、以下と同様の名前で探しても見つからない。詳細はこちらの記事で。
Object Modeでボクセルモデルを選択してEdit Modeに切り替える。
全部頂点を選択した状態(全身がオレンジになる。なっていなければAキーを2度押し)で、下のメニューからMesh→Vertices→Remove Doublesを選択する。
見た目は変わらず、右上の方に削除した情報が表示される。
6854個の頂点が削除されて、2282個になった。
大体前回のモデルと同じくらいになった。
・自動ウェイト機能を使用する
準備ができたので、前回記載した方法を実行してみよう。
エラーメッセージが出力されることもなく完了した。
早速Weight Paintに切り替えてみる。
おお、人の手では難しそうな綺麗なグラデーションで塗られている。
ただ、よく見ると頭だけを動かしたいときに肩も少し動いてしまいそう。
このように完全に思い通りにはならないところも出てくるので、そのときは手で修正することになる。こればかりは仕方が無いが、やり方はわかる。前回までの苦労は無駄ではなかったのだ。
自分の場合は、肩が頭の半分くらいまで動くようになってしまっていたので修正した。
そもそも、こうならないようなモデリングやボーンを作る技術というものも必要になりそうだ。
ボーン自体は変わらないので、以前作成したアニメーションをそのまま適用できる。
以前作ったものよりも、メッシュが均等で綺麗に動いてくれるのが嬉しい。
Unityへの取り込み以降は前と同じだろうと思っていたら、データの持ち方が違うためかエラーが出てしまったので、次回はその辺を調べてみる。
MagicaVoxel→Blender→Unityでボクセルモデルを動かす 改①
以前あげた下記の記事
urkgdmp.hatenadiary.jpのウェイトを塗るところで、
※ここから先の話が面倒な人は、「Armature Deform With Automatic Weights」でググると幸せになるかもしれない
と書いていたのだけど、それだけではあんまりな気がしたのでちょっと調べてみたら今まで苦労して書いてきた記事よりも良い結果になるところもわかってウワァァァァァ
そんなわけで、もうちっとだけ続くんじゃ・・・。
あ、今回からBlenderのバージョンを2.74から2.77にあげてます。
2016/07/29追記:現行最新バージョンのUnityでblendファイル取り込みに失敗するため戻しました。
「Armature Deform With Automatic Weights」とは何のことなのかというのをまず説明したい。
以前の記事の③まで進めた状態(モデルを見ながらボーンを作ったところまで)で、Object Modeでモデルを選択する。
次にSHIFTキーを押しながらボーンを選択する。この順に選択しないといけない。
その状態で、Ctrl + Pキーを押すと、「Set Parent To」というメニューが出てくる。
その中にある「With Automatic Weights」のことを指している。
インデントがついており、「Armature Deform」のオプション扱いのようなぱっと見ちょっとわかりにくいメニューになっている。
これを選択することで、あの気の遠くなるような塗り塗りをする必要なく自動でウェイトをつけてくれるという素敵機能を利用することができる。
ただし、どんなモデルでも自動でやってくれるわけではなく、
・メッシュがある程度対象的な形になっていること
・形状が破綻(突き抜けたり裏面が表に出てたり)が無いこと
・ボーンが全てメッシュの内側にあること
などなど、いろんな条件があるらしい。
そして、残念なことに上のモデルではエラーが発生して利用できなかった。
右上にエラーメッセージが表示されている。
メッシュの形を見てみると全く対象ではないので、そりゃ自動で判断なんて無理だよね。
さて、どうしたものか。
というところで次回へ続く。
MagicaVoxel→Blender→Unityでボクセルモデルを動かす⑥(終)
MagicaVoxelで作ったボクセルにBlenderでアニメーションをつけてUnityで動かそう、の6回目。
使用するツール
・MagicaVoxel 0.97.4
・Blender 2.74
・Unity 5.3.4f1
前回はBlenderでボクセルモデルに対して歩く、待機の2つのアニメーションを作成した。
今回はそれをUnityに取り込んで動かす、最終回となる。
もうちょっとなので頑張ろう。
・Unityへインポート
Blenderで作成したものをUnityに取り込む。
以前は一旦Blenderでfbxファイルにエクスポートする必要があったのだが、なんと最近のバージョンではBlenderのファイルを直接取り込めるようになっている。すごい。
とりあえず今回の作業用に空の3Dプロジェクトを作成した。
見慣れたインターフェイスにどことなく安心感が・・・。
Projectビューにblendファイルを直接放り込んでやろう。
すると下記のようになる。
emilyの右矢印をクリックして展開すると、いくつか知らないものもあるが作成したアニメーションが格納されているのが見える。
ここで、アニメーションに少し手を加えないといけないのでemilyを選択してInspectorビューに表示されたAnimationsボタンをクリックする。
真ん中辺りに表示されているClipsに作成したアニメーションの一覧が表示されているので、Walkを選択する。
すると、下にWalkの詳細が表示されるので、「Loop Time」のチェックボックスにチェックを入れておこう。
その後、下にスクロールしてApplyボタンを押す。
これで歩くアニメーションをループ再生できるようになる。
3D空間にCubeで床を作って、emilyをHierarchyビューに置いてみた。
親オブジェクトはAnimatorを持っているただのGameObjectのようだ。
ただし、Animation Controllerが割り当てられていない。
モデルやアニメーションに必要なものは子オブジェクトとして紐付いている。
・ボクセルモデルのテクスチャを設定
とりあえず真っ白なのが味気ないので、テクスチャを貼って見慣れた姿にする。
blendファイルの中には存在しないみたいなので、MagicaVoxelでエクスポートしたときに出力されたpngファイルをUnityに取り込む。
Texturesフォルダを新たに作成し、pngファイルを取り込んだ。
blendファイルをインポートしたときに作成されたMaterialsフォルダを開いて、中に入っているマテリアルを選択する。
右に表示されたInspectorビューの赤枠をクリックして、先ほど取り込んだpngファイルを選択しよう。
このマテリアルは子オブジェクト(Emily)に設定されているので、それが反映されてテクスチャが表示される。
これでOK。
・Animation Controllerの設定
次にAnimation Controllerを作成する。
AnimationControllerフォルダを作成し、その中にEmilyAnimというAnimation Controllerを作成した。
EmilyAnimを選択した状態でAnimatorビューを開き、Animatorタブを掴んで別枠に表示させる。下の絵はAnimatorビューを右側に持っていった場合。
Projectビューの方で取り込んだBlenderファイルを展開し、中に入っている「Idle」と「Walk」をAnimatorビューの方にD&Dする。
Animatorビューが下記の図のようになっていればOK。
もしWalkの方を先にD&Dした場合には、Walkの方がオレンジになっているかもしれない。その場合はIdleを選択して右クリックし、「Set as Layer Default State」を選択すればいい。
別枠に表示していたAnimatorビューはProjectビューと同じ枠に戻しておこう。
引き続きAnimatorビューで、Transitionを作成する。
Idleを選択して右クリックし、「Make Transition」を選択する。
矢印の先を選ぶようになるので、Walkを指定する。
同じように、WalkからMake TransitionでIdleを指定する。
下記のようになる。
次に、左側の「List is Empty」と書いてある右上の+ボタンを押して、Bool型のアニメーションパラメータを追加する。
walkFlagという名前にした。
現在、アニメーションは基本姿勢のIdle(棒立ち状態)から動かないようになっているので、先ほど追加したwalkFlagを使用してwalkFlagがtrueのときにIdleからWalkへ、falseのときにWalkからIdleへ遷移するように条件を設定する。
IdleからWalkに伸びているTransitionを選択すると、右側のInspectorビューに詳細が表示される。
Conditionsの下にある+をクリックすると、IdleからWalkに遷移する条件を決めることが出来る。今回は最初に表示された「walkFlagがtrueのとき」のままでよいので、これでOK。
次に、WalkからIdleに伸びているTransitionを選択して、同じようにConditionsを追加する。こちらは「walkFlagがfalseのとき」に遷移したいので、右側をfalseにしておく。
ここではもう一つ、ついでに修正しておきたいことがある。
真ん中に表示されているSettingsのところで、WalkからIdleへの移り方が示されているのだが、今のままだとどんな動きになるかというと、「walkFlagがfalseになってから1秒ちょっと経過した頃に直立に戻る」という感じになる。
イメージとしては、プレイヤーがキー入力をやめても1秒ちょっとは手足をばたばたさせる感じになる。これはいかん。
下のIdleをドラッグして左の方へ持って行き、移り変わりの範囲も左の方に設定する。
上の「Has Exit Time」のチェックも外す。
これですぐにIdleへ移るようになる。
ここまでの作業が終わったら、Hierarchyのemilyを選択してInspectorビューに表示されたAnimatorにEmilyAnimをアタッチする。
・ボクセルモデルを動かす
アニメーションさせるための準備は整った。
emilyにCharacter Controllerを追加し、動かすためのスクリプトを作成する。
まず、Character Controllerの追加から。
Add ComponentからPhysics→Character Controllerで追加する。
追加したらコライダーを適当に真ん中に来るように調整する。
次にスクリプトの作成。
新たにScriptsフォルダを作成して、その中にEmilyController.csを作成する。
スクリプトの内容は以下の通り。
// スクリプトここから
using UnityEngine;
using System.Collections;
public class EmilyController : MonoBehaviour {
CharacterController controller;
Animator animator;
Vector3 moveDirection = Vector3.zero; // 移動方向計算用
float gravity = 9.8f; // 重力
float speedZ = 3.0f; // 進行方向の速度
// Use this for initialization
void Start () {
// 必要なコンポーネントを取得
controller = GetComponent<CharacterController>();
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
// Inputを検知して前に進める
if (Input.GetAxis("Vertical") > 0.0f)
{
moveDirection.z = Input.GetAxis("Vertical") * speedZ;
}
else
{
moveDirection.z = 0;
}
// 方向転換
transform.Rotate(0, Input.GetAxis("Horizontal") * 3, 0);
// 重力分の力を毎フレーム追加
moveDirection.y -= gravity * Time.deltaTime;
// 移動実行
Vector3 globalDirection = transform.TransformDirection(moveDirection);
controller.Move(globalDirection * Time.deltaTime);
// 移動後接地していたらY方向の速度はリセット
if (controller.isGrounded) moveDirection.y = 0.0f;
// 速度が0以上なら歩きフラグをtrueにする
animator.SetBool("walkFlag", moveDirection.z > 0.0f);
}
}
// スクリプトここまで
簡単に説明すると、上入力でモデルが向いている方向に移動し、左右入力で向きが変わる。ジャンプは無いけど一応自由落下するようにしている。
そして、上入力があるときはアニメーションを切り替えるwalkFlagがtrueになり、歩くアニメーションが再生される、というもの。
スクリプトを保存したら、emilyにアタッチする。
早速実行してみよう。
う、動いた・・・!
ちゃんと歩くモーションもループ再生されている。
というわけで、想定していたよりも非常に長くなってしまったが目的達成である。
最後まで見てくれた人も本当にお疲れ様でした。
できるだけ間違いのないよう気をつけたつもりだけども、誤りやわかりにくいところがあったときはごめんなさい。
挑戦してみようと考えている人や同じようなところで躓いている人の参考になれば幸い。
多分もっと効率が良かったり正しいやり方というのがあるのだろうけど、それはまたやる気が溜まったときに調べてみよう。
MagicaVoxel→Blender→Unityでボクセルモデルを動かす⑤
MagicaVoxelで作ったボクセルにBlenderでアニメーションをつけてUnityで動かそう、の5回目。
使用するツール
・MagicaVoxel 0.97.4
・Blender 2.74
・Unity 5.3.4f1
前回はボクセルモデルとボーンを関連付けて、ウェイトの設定まで行った。
あと追記でマスターボーンの追加についても触れた。
今回は、設定したウェイトを使ってアニメーションを作成してみる。
作成するのは、歩く動作と、何もしない待機動作の2つ。
・必要なウィンドウの表示
これからの作業には、最初から下に表示されているTimeline(水色枠)と、もう一つDope Sheetというウィンドウが必要になる。
赤枠をクリックして選択することでも表示できるが、切り替えは面倒なのでどちらも表示した状態にしよう。
赤枠のすぐ左下隅にある「///」が逆向きになったようなところをドラッグすると、2つ目のTimelineが表示されるので、どちらかをDope Sheetに切り替えてやる。
これでOK。
・歩行アニメーション作成
まず、Dope Sheetの赤枠をクリックして、Action Editorに切り替える。
すると、すぐ横のインターフェイスが下記のようになったはず。
「New」と書かれたボタンをクリックして、新しいアクションを作成する。
Actionという名前になっているのでWalkに変更し、すぐ隣の「F」と書かれたボタンをクリックする。
何やらせっかく作成したアニメーションも使うユーザ(モデル?)が登録されていないと保存されないらしく、ユーザの有無に関わらず保存されるようにこのボタンを押すらしい。Blenderの設計思想はよくわからん・・・。
とりあえず、下記のようになっていればOK。
Action EditorかTimelineの緑色のラインをドラッグで動かして、「1」と表示されるところに移動する。
これで準備完了だ。
歩く動作の基本姿勢となる、「気をつけ」のポーズを作る。
3D ViewをPose Modeに切り替えて、テンキーの1を押して正面からの視点にする。
Arm_Upper_Rを右クリックで選択してRキーを押して、腕を下ろすような形にして左クリックで確定する。ちなみにもう一度Rキーを押すと別方向の回転もできる。
Arm_Upper_Lも同じようにする。
これで完成。
この状態をキーフレームとして登録する。
まず、マスターボーン以外を選択した状態にする。Aキーを2回押して全部のボーンを選択した後、SHIFTキーを押しながらマスターボーンを右クリック2回でできる。
その状態でIキーを押すと、Insert Keyframe Menuというメニューが出てくるので、その中からLocRotを選択する。これは選択したボーンのLocation(位置)とRotation(回転)を登録するという意味。
すると、Dope Sheetの該当フレームにキーフレームが追加される。
これで最初のポーズが完成。
次に、左足から踏み出すとして歩き始めのポーズを作る。
キーフレームは6あたりに移動しておく。
ここからは、体全体を触ることになるので、いろんな角度から確認しつつ試行錯誤しながら作業する。
ArmやLegを動かすときは、ShoulderやHipもわずかに動かしてやると自然な感じに近づく。
こんな感じになった。
右から見るとこんな感じ。
Action EditorかTimelineの緑色のラインをドラッグすると、登録したポーズの間を補間した動きが見られるので、おかしな動きをしていないか確認する。
次は12フレームに移動して、手足を一番大きく開いたポーズを作る。
こんな感じになった。
次は17フレームに移動して、基本姿勢に戻る前のポーズを作る。
こんな感じになった。
次に、20フレームに移動して1フレーム目と同じポーズを作る。
登録したポーズはコピペができるので、その機能を使おう。
Action Editorの「Dope Sheet Summary」を右クリックすると、縦一列の◇がオレンジになるので、この状態でCtrl + Cキーを押す。
次に、左クリックで緑色のラインを20のところにあわせて、Ctrl + Vキーを押すとペーストできる。
これで半分の動作ができた。
緑色のラインを動かしてみて、おかしなところが無いかよく確認する。
後半のポーズは、反転ペースト?の機能を使って楽をする。
25フレームに、6フレームのポーズを反転してペーストしよう。
6フレームを選択してCtrl + Cキーを押して・・・
25フレームに移動して、この状態でCtrl + SHIFT + Vキーを押すと・・・
反転した状態でペーストされる。
同じようにして、12フレームを31フレームに、17フレームを36フレームにコピー&反転ペーストしよう。
最後に、39フレームに基本姿勢と同じポーズを登録する。
緑色のラインを動かしてみて、おかしなところが無いかよく確認する。
問題なければ、これで完成だ。
Timelineを操作して再生してみよう。
Startに1、Endに39を設定して、右の再生ボタンを押すと再生が始まる。
まぁまぁの出来じゃなかろうか。
・待機アニメーションの作成
もう一つ、歩いていないときに再生されるアニメーションも作成しておく。
名前は「Idle」として、今回は特に凝ったものにせずただ6フレーム棒立ちするだけのものにした。
ここまでの作業を保存しておく。
ウィンドウを閉じる前に、作成したアニメーションに対して「F」ボタンが押されているか確認すること。
次回は、ついにUnityの登場となる。
作成したものを取り込んで、Unityで動かしてみる。
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を右クリックで選択してドラッグすると、ボクセルモデルとボーンの全部が一緒になって動いてくれるはず。
これで完成。
忘れず保存しておく。
MagicaVoxel→Blender→Unityでボクセルモデルを動かす③
MagicaVoxelで作ったボクセルにBlenderでアニメーションをつけてUnityで動かそう、の3回目。
使用するツール
・MagicaVoxel 0.97.4
・Blender 2.74
・Unity 5.3.4f1
前回はMagicaVoxelで作成したボクセルモデルをBlenderにインポートしたところまで進んだ。
今回はボーンを設定していく。
・3Dカーソルの位置を調整
ボーンを体の中心に設定するために、まずは3Dカーソルの位置を調整する。
赤白線の丸が3Dカーソル。
Nキーを押すとプロパティ・シェルフというパネルが出てくるので、その中にある3D Cursorの座標に数字を入力する。今回は、(0.0, 0.0, 0.9)のところにした。
・最初のボーン作成
いよいよボーン作成に入る。
Zキーを押すと表示方法をSolidとWireframeで切り替えることができるので、今後の作業が見やすいようにWireframeにしておく。
SHIFT + Aキーで表示されるメニューからArmature → Single Boneを選択すると、3Dカーソルの位置にボーンが1つ作成される。
3Dカーソルの位置にある丸が根元(root)で、上の小さい丸が先端(tip)。
この丸が重なって複数のボーンが繋がり、角度がつくことで関節のような動きができるようになる。
見ての通り、今の状態だと長すぎて腰から首までが曲げられない。
それでは困るので長さを調整しよう。
まず、現在のObject ModeをEdit Modeに切り替える。
Tabキーを押すか、下図の赤枠をクリックすれば切り替えることができる。
切り替えたら、tipを右クリックしてドラッグすると大きさを変えることができる。
ただ、そのまま変えようとしてもなかなかまっすぐにはできないので、Zキーを押してみよう。するとZ軸だけを変化させることができるようになる。
これで好みの大きさにしたら左クリックで確定する。
自分は胸のところあたりまでの長さにした。
これで最初のボーンが完成だ。
補足として、これ以降3Dカーソルは使用しないので、うっかり画面を左クリックしてカーソルを動かしてしまっても気にしないでいい。
・繋げてボーンを作成
最初のボーンに繋げてどんどん作成していくが、さっきとはちょっと違う方法で作成していく。
tipを選択した状態で、Eキーを押してマウスを動かしてみよう。
選択されたtipの地点がrootとなった、新しいボーンの大きさを決める状態になる。
今自分が作りたいのは胸から首あたりまでのボーンなので、先ほどと同様にZキーを押してまっすぐなボーンを作成した。
同じ手順で頭も作成。
・左右対称のボーン作成
次に手の作成。
ここでは左右の手を一度に作れるX軸ミラーの機能を使う。
ウィンドウ左側の「Option」タブをクリックして、X-Axis Mirrorのチェックボックスにチェックを入れる。これでOK。
首のところの丸を選択してから、SHIFT + Eキーを押してみよう。
左右対称のボーンを作成することができるようになる。
これは肩にしたかったので、これで確定した。
さらにSHIFT + Eキーを押して、腕を作成していく。
この部分はX軸に沿っているので、大きさを決めるときにXキーを押すとやりやすい。
これで上半身が出来上がった。
もう一息、引き続き下半身も作成する。
やり方は今までと同じ。
腰。
そして足。
ようやく完成!
つ、疲れた・・・。
・ボーンの名称を整理
最後に、作成したボーンの名前を整理しておく。
どこに名前が出ているかと言うと、ウィンドウの右上部分。
Armatureというオブジェクトの下にボーンが並んでいるが、初期名称の「Bone」にどんどん追加していったので、「Bone.(数字)」という名称になってしまっている。これではわかりにくい。
名称をダブルクリックすると変更できるので、下記のようにした。
右側は末尾の「L」を「R」にした。
ここまでの作業結果を保存して、今回はここまで。
次回はボクセルモデルとボーンを関連付けて、連動する度合い(ウェイト)を設定する。