自由研究

MagicaVoxelでUnity用の人間モデルを作ろう(東北ずん子配布もあるよ)

投稿日:2018年3月11日 更新日:

もくじ

概要

目標

MagicaVoxelで人間っぽいデータを作って、なんとかかんとかしてUnityのHumanoidとして読み込ませます。
つまり、これを、

こうするってことです。

こういう時にお役立ちな東北ずん子ちゃんを作っていきますよ。

手順

MagicaVoxelでデータを作り、Blenderでボーンを組み、Unityでリグを付けます。
というわけで、以降この3つのツールを使い分けつつ説明していきます。

作成モデル

実はだいしさんという先駆者がいまして、MagicaVoxelで作ったプリキュアをUnityで動かすという記事を既に上げておられます。

今回はだいしさんの手法とは違いいわゆるマインクラフト的な、四角で構成されたブロック人形のようなモデルを作ります。
何が違うかというと、パーツの変形を許さない、というところです。

MagicaVoxel

パーツ分割

MagicaVoxelでモデルを作る上で、一番大事なのはパーツを適切に分割することです。
そのため、パーツごとに空間を分けて作業します。こんな感じに。

動かしたいパーツごとにパーツを分割しますが、UnityのHumanoidにする場合以下のボーンが必要になります。これを基準にしてください。

  • Hips(尻、股関節あたり)
  • Spine(頚椎、腰あたり)
  • Head(頭)
  • Upper Arm(二の腕)
  • Lower Arm(腕)
  • Hand(手)
  • Upper Leg(太もも)
  • Lower Leg(すね)
  • Foot(足)

上記の他にも動かしたいパーツがあれば追加でパーツ分けすればいいですし、ボーンがあるからと言って絶対にパーツ分けが必要ということではないです。
今回作る東北ずん子ちゃんはHand(手)を作っていませんし、逆に袖パーツを追加しています。

出力

出力時は次のBlenderとの連携性を考慮して、パーツが物理的に分解された状態で出力します。
そして出力ファイルがまとまるように、WorldビューのUnionコマンドを使って全てのパーツを1つにまとめておきます。

ちなみに形式はplyが良いです。連携性が。

Blender

ボーン入れが面倒なのでボーンだけここで配布しておきます。
東北ずん子ボーン
このファイルを先に用意して作業すると少し楽かもしれません。

インポート

普通にインポートします。まあ迷わんでしょう。初期状態のハコとかカメラとかがあるなら消しといたら良いです。

で、ビューをテクスチャに変えてモデルの座標を(0,0,0)にします。
以降、この位置で作業します。右のペインはNキーで出せます。

モデルの初期調整

MagicaVoxelで作ったデータはボクセル単位で作られていてポリゴン数が非常にムダです。
そして色がVertex Colorsで付けられていて使いづらいです。この辺を調整します。

重複する頂点の削除

まずEdit ModeでRemove Doublesを選択して、重複する頂点を削除。

テクスチャ作成

この状態でUVマップを作成します。
Smart UV Projectを利用して、必ずIsland Marginを設定しときます。

頂点色で出来ている色をUVマップに落とし込みます。
まずUV/Image Editorを開く。

新しい画像を作ります。名称とかは適当でよいのです。

カメラのマークのRenderを開いて、Bake ModeをVertex ColorsにしてBakeします。すると画像がいい感じになります。

この画像はUnityにインポートするときに必要になるんで分かりやすい場所に保存しときます。

3D Viewに戻して、下三角っぽいマークのDataを開いて、UVMapが出来ていることを確認します。そのうえで、Vertex Colorsの「-」をクリックして頂点色を消してしまいます。

(3/14追記)
マテリアルが存在していないとあとでUnityにインポートしたときにマップが張り付かないようです。
まずマテリアルを作成し、

テクスチャで先程保存した画像を選んでおいてください。(画像は後々の作業のものなので別になっちゃってます)

頂点の簡素化

ToolのDeleteからLimited Dissolveを選択すると、要らない頂点が全部削除できます。

これで初期調整おわり。長いですな。

ボーン追加

ボーンを追加しましょう。
人間型のボーンをカンタンに追加する仕組みはいくつかありますが、今回のような特殊モデル用ではないので自作してしまいます。
作業はクソ面倒ですが頑張ります。ポイントだけまとめておきます。

  • 手でパーツをいじらずに各座標を整数入力する
  • 浮いているパーツにボーンを仕込むので、「Connected」は基本的に外す
  • X軸対称はあまり信用できない
  • Humanoidに必要なボーンはダミーを用意しておく

ウェイト設定

まずモデルをアーマチュアに突っ込みます。ドラッグアンドドロップしてArmature Deformを選びます。このときWithなんとかという項目は特に選ばなくて良いです。

で、アーマチュアをポーズモードにしてから、

モデルをウェイトペイントモードにするとボーン単位でウェイトが設定できるようになります。

で、ボーンを選択した状態で対応する頂点を選択してVertex GroupsにAssignします。頂点選択はCtrl+ドラッグでできるはずですが、できなかったら下の方から頂点選択モードにしてください。
こんな感じで各ボーンに対応する範囲だけ真っ赤になるようにウェイトを設定します。

ポーズ設定

ポーズモードを使って空中に浮いていたパーツをドッキングさせます。
整数単位でドッキングできるはずです。ウェイトの設定漏れなどがあればここで不自然な表示になります。

出力

ここまでやれば出力するだけです。fbx形式で出力します。

Unity

インポート

fbxファイルと、テクスチャファイルを同時にドラッグアンドドロップします。テクスチャが張り付いてることを確認します。張り付いてなかったらがんばりましょう。

Humanoid化

インポートしたモデルを選択して、RigのタイプをHumanoidに変更、Applyします。すると、高確率でエラーが出ます。その後Configureを選びます。

人体で赤く表示されているところがボーンが上手く自動割り当てできなかったところです。
右下の割当表示で、灰色の○が該当箇所です。

今回はダミーボーンを用意してあるのでそれを割り当てます。で、ApplyしてDone。

これで完成です。あとは好きなように遊びましょう。
とりあえず、Muscles & Settingsで動きのプレビューができるので、ちゃんと動けているか確認すると良いです。

配布

というわけでUnityで使えるモデルができましたね。
今回作った東北ずん子モデルは(ず・ω・きょ)ライセンスで配布しちゃうので好きに使ってあそびましょう。

東北ずん子ボクセルモデル

(3/15追加)
東北きりたんボクセルモデル

-自由研究

執筆者:

関連記事

no image

ランダムな日本人データを生成するツールをつくった

前置き ダミーの名簿データが作りたい、という需要は稀にあるものです。 住所とか、年齢とか、職業とか、いい感じにランダムなデータが欲しいことがありますよね。 しかし、適当にデータを作ってしまうと、「東京 …

no image

オンライン麻雀ゲームの牌山イカサマの検証について

今日、雀魂のアップデートがあり、牌山の検証システムに使われるハッシュ値がMD5からSHA-256にアップデートされました。 で、牌山検証とはなんぞや、というと、オンライン麻雀はシステムがイカサマをして …

【自由研究】宝くじの中央値っていくらなの?

もくじ 前置き 宝くじ、買ってますか? ギャンブルを語るとき、往々にして「期待値」や「還元率」という言葉が使われます。 例えば2019年のサマージャンボ宝くじの期待値は142円で、還元率は47%なんで …

no image

次世代のライティング手法、AAW―対話型AIによる文章生成でより高品質なコンテンツを

AAWとは何か? 私が提案するAAWは、AI Assisted Writingの略であり、人工知能を活用することで文章を効率的に生成する新しい技法です。 AAWは、ChatGPTのような対話型AIを用 …

no image

マイナンバーカードは偽造できるのか

まえがき マイナンバーカード、発行してますか?私は持ってます。 さて、マイナンバーカードの普及促進のキャンペーンにSPY×FAMILYが抜擢されて話題です。 マイナンバーカード普及に向けたSPY×FA …