
MagicaVoxelで作ったオリジナルの人型のキャラクターにアニメ設定するには、Adobe社が提供しているWebサービルmixamo(ミクサモ)が便利です。MagicaVoxelで出力したモデルをBlenderの自作プラグインでテクスチャー生成して、mixamoに持って行ってアニメ設定をして、Unityで動作確認する手順をご紹介します。
記事内のキャラクターモデルは、だいし様のMagicaVoxelで作ったプリキュアをUnityで動かすの記事でダウンロードできるbase.voxのものを利用しました。
mixamoを使わずにBlenderだけで設定したい場合はこちらの方をご覧ください。
目次
準備
PLYファイルを利用するには、頂点カラーからテクスチャーを生成する必要があります。手動で作るのが煩わしかったので、Blender用のスクリプトを作成しました。こちらを参照して、Blenderにスクリプトをインストールしてください。
また、mixamoを利用するには、無料の会員登録(Sign up)が必要です。事前に登録してログインしておいてください。
MagicaVoxelでキャラクターを作成する
この方法の場合は、base.voxから作業を開始する必要はありません。いわゆるTポーズになっていればOKです。
- キャラクターが完成したら、Export -> plyをクリックします

- 分かりやすい場所に任意のファイル名で保存します。ファイル名は半角英数のみ推奨(日本語や全角が混じったファイル名だとUnityで不具合が起きる可能性があります)

BlenderにPLYをインポート
ここからはBlenderでの作業です。必要なファイルを読み込みます。
- Blenderが起動していなければ起動します。あるいは、FileメニューからNewを選択して、初期状態にします
- 既存のCamera, Cube, Lamp全て不要なので、[Shift]キーを押しながらクリックして3つとも選択します

- エディター上にマウスカーソルを移動させて、[Delete]キーを押して表示されるポップアップのDeleteをクリックして、選択していたものを削除します

Outlinerから選択したオブジェクトが消えていればOKです。

- 3D Viewの左のメニューでMiscタブをクリックして選択して、Import PLYボタンをクリックします

- PLYファイルを保存したフォルダーを設定して、読み込むファイルを選択して、Import PLYボタンをクリックします

デフォルトのPLYのサイズだとUnityでは大きくなりすぎるので、0.22倍するようにしています。倍率は左下のScale欄で設定できるので、読み込みと同時にサイズを調整したい場合は、値を変更してからImport PLYをクリックしてください。
PLYファイルのインポートが完了しました。

FBXとPNGをエクスポート
mixamoを利用するならBlenderでウェイトを設定する必要はないので、このままFBXにエクスポートします。
- Export FBX and Textureボタンをクリックします

- エクスポート先とファイル名を設定したらExport FBX and Textureボタンをクリックすれば完了です

デフォルトで生成されるテクスチャーのサイズは512x512ピクセルです。ボクセル数が多いと足りないかも知れないので、Unityで見た時に色がずれているような場合は、Texture WidthとTexture Heightを
1024や2048に変更してみてください。ボクセル数が少なくて、もっと小さいテクスチャーで構わない場合は
128や256にしてみてください。テクスチャーのサイズは2のテクスチャーのサイズは2の累乗である必要があります(よく分からない場合は、この設定はいじらないでください)。
以上で完了です。出力先のフォルダーに、以下のようにfbxとpngの2つのファイルが出力されていれば成功です。

mixamoにモデルを読み込む
生成したFBXとPNGをmixamoにアップロードするには、ZIP圧縮しておく必要があります。
FBXファイルとPNGファイルを選択して、右クリック -> 送る -> 圧縮(zip形式)フォルダーを選択します

FBXやPNGのあったフォルダーにZIPファイルが出来上がります。
- mixamoのページを開いて、ログインします
- UPLOAD CHARACTERボタンをクリックします

- 先ほど作成したZIPファイルをドラッグして、mixamoの点線の枠内にドロップします

- モデルが表示されます。こちらを向いて立っているのが確認できたらNEXTをクリックします
- 変な方向を向いていたら、左下の矢印をクリックして、以下の画像のように調整してからNEXTをクリックしてください

- 左下に並んでいる丸をドラッグして、キャラクターの該当する場所に設定します
- 左右が分かりづらいので、以下を参考にしてみてください
- 左に並んでいる丸は、左半身用なので、向かって右側の関節に設定します

以下、設定が完了した状態です。

- 指がないボクセルモデルの場合は、下で指の設定を
No Fingersにします

- 設定が完了したらNEXTをクリックします
キャラクターがくるくる回って、自動的にウェイトを設定する処理が行われます。完了を待ってください。

ウェイト設定が成功すると、アニメーションのデモが動きます。うまく動いていたら、NEXTボタンをクリックします。

失敗していたら、BACKボタンで戻って、間接の設定をし直してください。
色がおかしいのはUnityに持っていけば治るので放っておいて構いません。
以下の画面でNEXTをクリックしたら読み込み完了です。

アニメの作成とエクスポート
アップロードとウェイト設定が完了したら、以下の画面に切り替わります。

左でモーションの選択、右のパラメーターで腕の広げ方や速度などのアニメーションの微調整ができます。使い方は他の記事を検索してください。ここではそのままデータをダウンロードします。
- 右上のDOWNLOADボタンをクリックします
- 以下の設定をして、DOWNLOADします
- Formatは、FBX for Unity(.fbx)
- Poseは、T-poseのままで大丈夫です
- 設定したら、DOWNLOADボタンをクリックします

以上で、メッシュ、アニメーション、マテリアル、テクスチャーを埋め込んだFBXファイルをダウンロードできます。
できあがったキャラクターをUnityで動かしてみましょう。
アニメを仕込んだ場合
mixamoでアニメーションを付けた場合は、エクスポートの設定項目が増えます。以下のようなダイアログだった場合の設定です。
- Formatは、FBX for Unity(.fbx)
- Frames per Secondは、60が使いやすいと思います
- その他はそのままでDOWNLOADします

Unityで動作確認する
作成したモデルをUnityに読み込んで動かしてみましょう。以下、前提です。
- Unity2018.1.3で確認(2017以降なら似たような操作でいけると思います)
- Standard Assetsインストール済み
テスト用シーンを作成する
Unityを起動して、確認用のプロジェクト(空のプロジェクトでよいです)を開きます。
- AssetsメニューからImport Package -> Charactersを選択して、Importします

- 地面用のPlaneを作成します。HierarchyビューのCreateをクリックして、3D Object -> Planeを選択します

- Hierarchyビューで作成したPlaneをクリックして選択します
- Inspectorビューで、Transformの右の歯車アイコンをクイックして、Resetを選択して、場所を原点にしておきます

- Planeにマテリアルを設定して色を着けたり、Main Cameraの位置を調整して、Gameビューでそれっぽく見えるようにします

- Projectビューで、Standard Assets -> Characters -> ThirdPersonCharacter -> Prefabsの左の三角アイコンをクリックして開きます

- ThirdPersonControllerプレハブをドラッグして、Sceneビューで良さそうな場所に配置します
テスト用のシーンができました。Playして、矢印キーや[A][S][D][W]キーでキャラクターを操作できます。
作成したキャラクターを設定
エクスポートしたキャラクターを読み込み、設定します。
- mixamoからダウンロードした
FBXファイルをドラッグして、UnityのProjectビューの読み込みたい場所にドロップします

- Projectビューで、読み込んだモデルをクリックして選択します

- Modelについて、以下を設定します
- Import Visibility, Import Cameras, Import Lightsのチェックを外す
- くっついてませんが念のため
- 設定したらApplyボタンをクリック
- Import Visibility, Import Cameras, Import Lightsのチェックを外す

- Rigについて、以下を設定します
- Animation TypeをHumanoidに変更します
- Applyボタンをクリックします

これで、Configure...の左にチェックが表示されれば成功です。これをやらないと、設定したアーマチュアなどの設定が反映されないので重要な設定です。
- Inspectorビューで、Materialsタブを選択して、Extract Textures...をクリックして、適当なフォルダーを選択します(動作確認なのでそのままの場所で構いません)

- 同様に、Extract Materials...をクリックして、適当なフォルダーを選択します(動作確認なのでそのままの場所で構いません)
- Projectビューで、展開したテクスチャーを選択します

- Inspectorビューで以下を設定します
- Generate Mip Mapのチェックを外す
- 小さくした時に変な線が出ることがあるので
- Wrap ModeをClampに設定
- 画像端のにじみ防止
- Filter Modeを*Point(no filter)に設定
- にじみ防止
- 以上できたら、Applyボタンをクリック
- Generate Mip Mapのチェックを外す
以上でキャラクターの読み込みと設定完了です。
プレイヤーに適用して動かす
読み込んだモデルをテスト用のキャラクターに差し替えて動かして見ましょう。
- Hierarchyビューで、ThirdPersonControllerの左側の三角をクリックして開きます

- Hierarchyビューで、[Shift]キーを押しながら、EthanBody, EthanGlasses, EthanSkeletonの3つを選択します

- Inspectorビューの左上のチェックを外して、選択したオブジェクトを無効にします

- Projectビューから読み込んだモデルをドラッグして、HierarchyビューのThirdPersonControllerにドロップします

- Hierarchyビューで、ドロップしたモデルをクリックして選択します

- Inspectorビューで、Animatorの左のチェックを外して、モデルにくっついているアニメーターを無効にします

ThirdPersonControllerのアニメーターを作成したモデルで再生するようにします。
- Projectビューで、読み込んだモデルの左の三角をクリックして開いておきます

- Hierarchyビューで、ThirdPersonControllerをクリックして選択します


これで、ThirdPersonControllerのアニメーターが、オリジナルキャラクターのアバターを制御するようになります。
Playして、矢印キーなどで操作してみてください。エクスポートに成功していたらアニメーションを確認できます。

キャラクターの大きさを調整したい場合の注意点
動かして見るとちょっとキャラクターが大きすぎるようです。半分の大きさにしてみます。
重要なのは、親のゲームオブジェクトのScaleを変更しないことです。変更するのは、子供にしたモデルのオブジェクトのScaleにしてください。以下の通りです。

RigidbodyをアタッチしているゲームオブジェクトのScaleは、必ず1にしておきます。これを守らないと当たり判定や動作で予想外の不具合を引き起こします。必ず守りましょう!
まとめ
以上で、MagicaVoxelで作成したPLY形式のキャラクターに、maximoでウェイト設定をして、Unityに読み込んで、テスト動作させることができました。
mixamoを利用することで、モデルの体形の自由度があがり、モーションもmixamoで生成することができるようになります。
ご活用いただければ幸いです!