以前、表題の作業手順をまとめました。しかし、手軽にモデルを修正してエクスポートし直すには手順が多くて煩雑です。
また、PLYで出力するといい感じのメッシュで出力してくれるのですが、テクスチャーを自分でベイクする必要がありより面倒に。よさそうな方法も見つからず、もう自分で作っちゃえ、と、Blenderのスクリプトを作成しました。
このスクリプトを使って、MagicaVoxelで出力したPLYファイルをUnityでアニメーションさせる手順をご紹介します。
素体を使わずにオリジナルでキャラクターを作った場合は、mixamoでウェイトをした方がよいでしょう。その場合はこちらをご覧ください。
目次
準備
予め、こちらを参照して、Blenderにスクリプトをインストールしてください。
また、だいし様のMagicaVoxelで作ったプリキュアをUnityで動かすの記事で配布されているMagicaVoxel用素体(base.vox
)と素体用アーマチュア(BaseArmature.blend
)を利用するので、ダウンロードしてください
PLYファイルからウェイト設定したキャラクターモデルとテクスチャーをエクスポート
MagicaVoxelでキャラクター作り
- MagicaVoxelを起動して、base.voxを読み込みます
- 記事に従ってキャラクターを作成します(手順を確認する場合はbase.voxのままで構いません)
- キャラクターが完成したら、Export -> plyをクリックします
- 分かりやすい場所に任意のファイル名で保存します。ファイル名は半角英数のみ推奨(日本語や全角が混じったファイル名だとUnityで不具合が起きる可能性があります)
アーマチュアとPLYの読み込み
ここからはBlenderでの作業です。必要なファイルを読み込みます。
- 3D Viewの左のメニューからMiscタブをクリックします
- Import PLYボタンをクリックします
- PLYファイルのフォルダーを設定して、読み込むファイルを選択して、Import PLYボタンをクリックします
デフォルトのPLYのサイズだと大きくなりすぎるので、アーマチュアとサイズが丁度良くなるようにサイズを0.22倍するようにしています。倍率は左下のScale欄で設定できるので、読み込みと同時にサイズを調整したい場合は、値を変更してからImport PLYをクリックしてください。
PLYファイルのインポートが完了しました。
デフォルトのアーマチュアとbase.voxを使っていれば、大きさと位置が合っているはずです。もし、モデルとアーマチュアの配置がずれている場合は、縮小や移動をして上記のように重ねてから次に進んでください。
ウェイト設定
Blenderでウェイトを設定する場合は、メッシュとアーマチュアを階層して親子設定をするのですが、それらをAuto Weightボタンで自動化しました。
以下のように、Outlinerでarmatureの子供にメッシュが設定されていれば成功です。
エクスポート
PLYはテクスチャーを持たないので、Unityで色を付けるにはテクスチャーをベイクする必要があります。また、マテリアルの作成も必要です。それらの作業を自動的に実行します。
- Export FBX and Textureボタンをクリックします
- エクスポート先とファイル名を設定したらExport FBX and Textureボタンをクリックすれば完了です
デフォルトで生成されるテクスチャーのサイズは512x512ピクセルです。ボクセル数が多いと足りないかも知れないので、Unityで見た時に色がずれているような場合は、Texture WidthとTexture Heightを
1024
や2048
に変更してみてください。ボクセル数が少なくて、もっと小さいテクスチャーで構わない場合は
128
や256
にしてみてください。テクスチャーのサイズは2のテクスチャーのサイズは2の累乗である必要があります。よく分からない場合は、この設定はいじらないでください。
モデルのエクスポート自体は、ここまでで完了です!出力先のフォルダーに、以下のようにfbx
とpng
の2つのファイルが出力されていれば成功です。
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]キーでキャラクターを操作できます。
作成したキャラクターを設定
エクスポートしたキャラクターを読み込み、設定します。
- Blenderでエクスポートした
FBX
とPNG
を[Ctrl]キーを押しながら選択して、まとめてUnityのProjectビューにドロップします
注意!! FBXとPNGファイルを同時にドラッグ&ドロップしないとテクスチャーが貼られないので気を付けてください!!
- Projectビューで、読み込んだPNGを選択して以下を設定します
- Generate Mip Mapのチェックを外す
- 小さくした時に変な線が出ることがあるので
- Wrap ModeをClampに設定
- 画像端のにじみ防止
- Filter Modeを*Point(no filter)に設定
- にじみ防止
- 以上できたら、Applyボタンをクリック
- Generate Mip Mapのチェックを外す
- Projectビューで、読み込んだモデルをクリックして選択します
- Modelについて、以下を設定します
- Import Visibility, Import Cameras, Import Lightsのチェックを外す
- くっついてませんが念のため
- 設定したらApplyボタンをクリック
- Import Visibility, Import Cameras, Import Lightsのチェックを外す
- Rigについて、以下を設定します
- Animation TypeをHumanoidに変更します
- Applyボタンをクリックします
これで、Configure...の左にチェックが表示されれば成功です。これをやらないと、設定したアーマチュアなどの設定が反映されないので重要な設定です。
以上でキャラクターの読み込みと設定完了です。
プレイヤーに適用して動かす
読み込んだモデルをテスト用のキャラクターに差し替えて動かして見ましょう。
- 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形式のキャラクターにウェイト設定をして、Unityに読み込んで、テスト動作させることができました。
Unity側での作業も少々あるので、一瞬で完了できる、というほどではありませんが、かなり手軽にモデルの修正をして、Unityに持ってくることができるのではないかと思います。
ご活用いただければ幸いです。