MagicaVoxelで作成したモデルをUnityで使用するまで

はじめに

MagicaVoxelで作成したモデルは、単純にExportしただけでは、Unityで使用するのに適した状態ではありません。理由としては、以下があげられます。

  • objとしてExportすると、UVがかなり特殊な形になっている
  • plyでExportするとポリゴン数が多くなりすぎる。また、カラーがVertexColorとして表現されており、Textureにはなっていない
  • どちらの形式で出力しても重なった頂点が存在する

これらの問題を解決するために、Blenderを使用して、Unityで使用しやすい形に変更する方法を検討しました。

 

検証環境

MagicaVoxelでの作業

簡単なモデルをMagicaVoxelで準備。

このモデルに対して検証を行っていきます。

Exportメニューからply形式で出力します。

Blenderでの作業

1. 重なった頂点の削除

File->Import->Stanford(.ply)を選択してExportしたモデルを読み込みます。

それぞれのVoxelがポリゴンの立方体で出力されており、このまま使用できなくはありませんが、非常にポリゴン数が多い状態になっています。

 

まず、すべての頂点を選択した状態で、Mキーを押し、ByDistanceで重なった頂点を削除します。

2. VertexColorの適用

plyで出力した場合は、VertexColorに色が割り当てられているため、そのままでは、モデルに色がついていません。そこで以下のようにマテリアルを作成し、割り当てます。これにより、モデルに色がついた状態になります。

3.UV展開を実施

UVメニューからSmart UV Projectで簡易なUV展開を実施します。Island Marginに値をいれ、接続していないポリゴン間に隙間を作るようにしておきます。

4.VertexColorをテクスチャにBakeする

モデルに適用されているShaderにTexture->ImageTextureノードを追加します。

NewImageを作成します(接続は必要ない)

RendererをCyclesに変更

BakeTypeをDiffuse、ContributionsでColorを選択、この状態でBakeを押すと、Bake処理が始まります。

テクスチャが完成しました。

5.ポリゴンをまとめていく

Modifierを図のように追加します。

Decimateでシンプルにした後、Triangulateで三角ポリゴンにします。

不要なポリゴンを大きく削減することができました。

アニメーションで、形状を変形させたい場合は、もう少し手を入れた調整をする必要がありますが、今回のモデルでは、これで十分なため簡易に実施しています。

まとめ

MagicaVoxelのモデルをBlenderの機能のみで簡易にリダクション、テクスチャ作成する方法を検討しました。カラー以外にもAmbientOcclusionなども同様の方法で焼き付けUnityで使用していく予定です。参考になれば幸いです。