MagicaVoxelで作ったデータの頂点数を減らす
頂点数が多すぎるんだよ!アニキ!
MagicaVoxelは非常に便利なんだけど、こいつで作ったデータは頂点数が無駄に多くなっちゃうのだ。
凝った模様の入った複雑なデータを作っちゃうと、ゲームが重くなってコリャイカンって感じになる。
なんとかして最適化する方法はないだろうか。
![普通にOBJ形式でエクスポートしたデータ。頂点数は2,605](/b/2016/07/16/mgopt/Clipboard02.png)
最適化方針!
- 頂点カラー付きの形式でエクスポート
- Blenderで重複頂点削除・UV展開
- 頂点カラーをテクスチャに焼きこむ
- 頂点数を削減
頂点カラー付きの形式でエクスポート
MagicaVoxelからPLY形式でエクスポートする。PLY形式は頂点カラー情報の入ったフォーマット。
![PLY形式でエクスポート](/b/2016/07/16/mgopt/ply.png)
Blenderにインポート。
![Blenderにインポート](/b/2016/07/16/mgopt/Clipboard03.png)
重複した頂点を削除する
「Remove Doubles」で重複した頂点を削除する。
![「Remove Doubles」で重複した頂点を削除する](/b/2016/07/16/mgopt/Clipboard05.png)
UV展開
Smart UV Projectでスマァ~トにUV展開する。または必要に応じて手動でUV展開する。
![Smart UV Projectでスマァ~トにUV展開](/b/2016/07/16/mgopt/Clipboard06.png)
![Smart UV Projectでスマァ~トにUV展開](/b/2016/07/16/mgopt/Clipboard07.png)
頂点カラーをテクスチャに焼く
Screen Layoutを「UV Editing」に。
![Screen Layoutを「UV Editing」に](/b/2016/07/16/mgopt/Clipboard08.png)
「New」のところを押して新規にテクスチャを作成。名前を「vc」とかにしとく。
![「New」のところを押して新規にテクスチャを作成](/b/2016/07/16/mgopt/Clipboard10.png)
Screen Layoutを「default」に戻す。
PropertiesウインドウのRenderタブ内のBakeパネルを開き、Bake Modeを「Vertex Colors」にした上でBakeボタンを押す。
![「Vertex Colors」をBake](/b/2016/07/16/mgopt/Clipboard11.png)
テクスチャに頂点カラーが焼き込まれる。
![焼きこまれた](/b/2016/07/16/mgopt/Clipboard12.png)
モデルに新規にマテリアルをアタッチし、作成されたテクスチャを貼る。
テクスチャに色情報を取り込んだので、頂点カラーはもう必要ない。削除しよう。
モデルの頂点をすべて選択して「Remove Vertex Color」。
![Remove Vertex Color](/b/2016/07/16/mgopt/Clipboard15.png)
不要な頂点を削減
モデルにDecimateモディファイアを追加する。
![Decimateモディファイアを追加](/b/2016/07/16/mgopt/Clipboard13.png)
Planerを選択し、Angle Limitを5°とかにしてApplyする。結果が変になったら調整。
![Planer](/b/2016/07/16/mgopt/Clipboard14.png)
あとは手動で余計な頂点やエッジを削除する。
出来た!
平面部分から余計な頂点が削除され、かつ元の色情報はテクスチャによって再現される。
あとはテクスチャを画像ファイルとして保存して編集したり、モデルにいい感じの関節を追加したりしていこう。
![顔にらくがきしてみたり](/b/2016/07/16/mgopt/raku.png)
![顔にらくがきしてみたり](/b/2016/07/16/mgopt/untitled.png)
まとめ
以上のやり方で頂点数を最低限まで減らせるはずだ。
平面が多く、色がたくさん使われたボクセルモデルであれば効果が顕著に出ると思う。
ただ、お手軽にモデルデータを用意できるという理由でMagicaVoxelを採用しているはずなのに、こんなやり方だと手間がかかりすぎてしまうのも事実。
もっと楽にやる方法があればいいなあ。