tanaka's Programming Memo

プログラミングについてのメモ。

MagicaVoxelのPLYモデルにmixamoでアニメ設定をしてUnityで動かす

f:id:am1tanaka:20180725214056g:plain

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をクリックします

f:id:am1tanaka:20180725212913p:plain

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

f:id:am1tanaka:20180725212935p:plain

BlenderにPLYをインポート

ここからはBlenderでの作業です。必要なファイルを読み込みます。

  • Blenderが起動していなければ起動します。あるいは、FileメニューからNewを選択して、初期状態にします
  • 既存のCamera, Cube, Lamp全て不要なので、[Shift]キーを押しながらクリックして3つとも選択します

f:id:am1tanaka:20180725220842p:plain

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

f:id:am1tanaka:20180725220855p:plain

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

f:id:am1tanaka:20180725220911p:plain

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

f:id:am1tanaka:20180725220928p:plain

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

f:id:am1tanaka:20180725220945p:plain

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

PLYファイルのインポートが完了しました。

f:id:am1tanaka:20180725220956p:plain

FBXとPNGをエクスポート

mixamoを利用するならBlenderでウェイトを設定する必要はないので、このままFBXにエクスポートします。

  • Export FBX and Textureボタンをクリックします

f:id:am1tanaka:20180725213150p:plain

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

f:id:am1tanaka:20180725213203p:plain

デフォルトで生成されるテクスチャーのサイズは512x512ピクセルです。ボクセル数が多いと足りないかも知れないので、Unityで見た時に色がずれているような場合は、Texture WidthTexture Height10242048に変更してみてください。

ボクセル数が少なくて、もっと小さいテクスチャーで構わない場合は128256にしてみてください。テクスチャーのサイズは2のテクスチャーのサイズは2の累乗である必要があります(よく分からない場合は、この設定はいじらないでください)。

以上で完了です。出力先のフォルダーに、以下のようにfbxpngの2つのファイルが出力されていれば成功です。

f:id:am1tanaka:20180725213217p:plain

mixamoにモデルを読み込む

生成したFBXとPNGをmixamoにアップロードするには、ZIP圧縮しておく必要があります。

  • FBXファイルとPNGファイルを選択して、右クリック -> 送る -> 圧縮(zip形式)フォルダーを選択します

f:id:am1tanaka:20180725221317p:plain

FBXやPNGのあったフォルダーにZIPファイルが出来上がります。

  • mixamoのページを開いて、ログインします
  • UPLOAD CHARACTERボタンをクリックします

f:id:am1tanaka:20180725221634p:plain

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

f:id:am1tanaka:20180725221610p:plain

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

f:id:am1tanaka:20180725221653p:plain

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

f:id:am1tanaka:20180725221707p:plain

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

f:id:am1tanaka:20180725221714p:plain

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

f:id:am1tanaka:20180725221728p:plain

  • 設定が完了したらNEXTをクリックします

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

f:id:am1tanaka:20180725221738p:plain

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

f:id:am1tanaka:20180725221749p:plain

失敗していたら、BACKボタンで戻って、間接の設定をし直してください。

色がおかしいのはUnityに持っていけば治るので放っておいて構いません。

以下の画面でNEXTをクリックしたら読み込み完了です。

f:id:am1tanaka:20180725221758p:plain

アニメの作成とエクスポート

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

f:id:am1tanaka:20180725221839p:plain

左でモーションの選択、右のパラメーターで腕の広げ方や速度などのアニメーションの微調整ができます。使い方は他の記事を検索してください。ここではそのままデータをダウンロードします。

  • 右上のDOWNLOADボタンをクリックします
  • 以下の設定をして、DOWNLOADします
    • Formatは、FBX for Unity(.fbx)
    • Poseは、T-poseのままで大丈夫です
    • 設定したら、DOWNLOADボタンをクリックします

f:id:am1tanaka:20180725221852p:plain

以上で、メッシュ、アニメーション、マテリアル、テクスチャーを埋め込んだFBXファイルをダウンロードできます。

できあがったキャラクターをUnityで動かしてみましょう。

アニメを仕込んだ場合

mixamoでアニメーションを付けた場合は、エクスポートの設定項目が増えます。以下のようなダイアログだった場合の設定です。

  • Formatは、FBX for Unity(.fbx)
  • Frames per Secondは、60が使いやすいと思います
  • その他はそのままでDOWNLOADします

f:id:am1tanaka:20180725221911p:plain

Unityで動作確認する

作成したモデルをUnityに読み込んで動かしてみましょう。以下、前提です。

  • Unity2018.1.3で確認(2017以降なら似たような操作でいけると思います)
  • Standard Assetsインストール済み

テスト用シーンを作成する

Unityを起動して、確認用のプロジェクト(空のプロジェクトでよいです)を開きます。

  • AssetsメニューからImport Package -> Charactersを選択して、Importします

f:id:am1tanaka:20180725213417p:plain

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

f:id:am1tanaka:20180725213428p:plain

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

f:id:am1tanaka:20180725213613p:plain

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

f:id:am1tanaka:20180725213624p:plain

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

f:id:am1tanaka:20180725213632p:plain

  • ThirdPersonControllerプレハブをドラッグして、Sceneビューで良さそうな場所に配置します

テスト用のシーンができました。Playして、矢印キーや[A][S][D][W]キーでキャラクターを操作できます。

作成したキャラクターを設定

エクスポートしたキャラクターを読み込み、設定します。

  • mixamoからダウンロードしたFBXファイルをドラッグして、UnityのProjectビューの読み込みたい場所にドロップします

f:id:am1tanaka:20180725222222p:plain

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

f:id:am1tanaka:20180725213751p:plain

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

f:id:am1tanaka:20180725213800p:plain

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

f:id:am1tanaka:20180725213809p:plain

これで、Configure...の左にチェックが表示されれば成功です。これをやらないと、設定したアーマチュアなどの設定が反映されないので重要な設定です。

  • Inspectorビューで、Materialsタブを選択して、Extract Textures...をクリックして、適当なフォルダーを選択します(動作確認なのでそのままの場所で構いません)

f:id:am1tanaka:20180725223034p:plain

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

f:id:am1tanaka:20180725213740p:plain

  • Inspectorビューで以下を設定します
    • Generate Mip Mapのチェックを外す
      • 小さくした時に変な線が出ることがあるので
    • Wrap ModeClampに設定
      • 画像端のにじみ防止
    • Filter Modeを*Point(no filter)に設定
      • にじみ防止
    • 以上できたら、Applyボタンをクリック

以上でキャラクターの読み込みと設定完了です。

プレイヤーに適用して動かす

読み込んだモデルをテスト用のキャラクターに差し替えて動かして見ましょう。

  • Hierarchyビューで、ThirdPersonControllerの左側の三角をクリックして開きます

f:id:am1tanaka:20180725213855p:plain

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

f:id:am1tanaka:20180725213907p:plain

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

f:id:am1tanaka:20180725213916p:plain

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

f:id:am1tanaka:20180725213924p:plain

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

f:id:am1tanaka:20180725213932p:plain

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

f:id:am1tanaka:20180725213941p:plain

ThirdPersonControllerのアニメーターを作成したモデルで再生するようにします。

  • Projectビューで、読み込んだモデルの左の三角をクリックして開いておきます

f:id:am1tanaka:20180725214004p:plain

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

f:id:am1tanaka:20180725213952p:plain

  • Projectビューからモデルの子供にあるAvatarをドラッグして、InspectorビューのAvatar欄にドロップします

f:id:am1tanaka:20180725214021p:plain

これで、ThirdPersonControllerのアニメーターが、オリジナルキャラクターのアバターを制御するようになります。

Playして、矢印キーなどで操作してみてください。エクスポートに成功していたらアニメーションを確認できます。

f:id:am1tanaka:20180725214056g:plain

キャラクターの大きさを調整したい場合の注意点

動かして見るとちょっとキャラクターが大きすぎるようです。半分の大きさにしてみます。

重要なのは、親のゲームオブジェクトのScaleを変更しないことです。変更するのは、子供にしたモデルのオブジェクトのScaleにしてください。以下の通りです。

f:id:am1tanaka:20180725214039p:plain

RigidbodyをアタッチしているゲームオブジェクトのScaleは、必ず1にしておきます。これを守らないと当たり判定や動作で予想外の不具合を引き起こします。必ず守りましょう!

まとめ

以上で、MagicaVoxelで作成したPLY形式のキャラクターに、maximoでウェイト設定をして、Unityに読み込んで、テスト動作させることができました。

mixamoを利用することで、モデルの体形の自由度があがり、モーションもmixamoで生成することができるようになります。

ご活用いただければ幸いです!

参考・関連URL