MagicaVoxelで作成したモデルをUnityで使用するまで
はじめに
MagicaVoxelで作成したモデルは、単純にExportしただけでは、Unityで使用するのに適した状態ではありません。理由としては、以下があげられます。
- objとしてExportすると、UVがかなり特殊な形になっている
- plyでExportするとポリゴン数が多くなりすぎる。また、カラーがVertexColorとして表現されており、Textureにはなっていない
- どちらの形式で出力しても重なった頂点が存在する
これらの問題を解決するために、Blenderを使用して、Unityで使用しやすい形に変更する方法を検討しました。
検証環境
- MagicaVoxel 0.99.6.4
MagicaVoxel (ephtracy.github.io) - Blender 3.3.1
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で使用していく予定です。参考になれば幸いです。