【Blender】MagicaVoxelで作ったモデルの頂点カラーをテクスチャにベイクする

ネコニウム研究所

PCを利用したモノづくりに関連する情報を掲載するブログ

【Blender】MagicaVoxelで作ったモデルの頂点カラーをテクスチャにベイクする

2022-3-4 | ,

MagicaVoxelで作ったモデルをBlenderにインポートして頂点カラーをテクスチャにベイクしたい!

概要

この記事では、MagicaVoxelで作ったモデルをBlenderにインポートして頂点カラーをテクスチャにベイクする手順を掲載する。

仕様書

環境

  • Blender 3.0.0
  • MagicaVoxel 0.99.6.4

手順書

手順がなかなか多いので、先に大まかな流れを挙げておく。

  1. MagicaVoxelからモデルをエクスポートする。
  2. Blenderにモデルをインポートする。
  3. 頂点カラーを表示する。
  4. 頂点を整理する。(重複する頂点の削除)
  5. 頂点カラーをテクスチャにベイクする。
  6. テクスチャを表示する。

手順の詳細については次節から説明する。

MagicaVoxelからモデルをエクスポートする

  1. MagicaVoxelから対象のモデルをplyファイルでエクスポートする。右下の「Export」の中の「ply」をクリックする。

Blenderにモデルをインポートする

  1. ここからはBlenderでの作業になる。上部のメニューにある「File」->「Import」->「Stanford(.ply)」をクリックして、先程MagicaVoxelからエクスポートしたplyファイルをBlenderにインポートする。
  2. Blenderにモデルが読み込まれる。現段階ではモデルの色は表示されない。

頂点カラーを表示する

  1. 「Shading」を開く。
  2. 「New」をクリックする。
  3. 新しいマテリアルが作成される。
  4. 「Add」->「Input」->「Vertex Color」をクリックする。
  5. 「Vertex Color」が作成されるので、「Vertex Color」の「Color」と「Principled BSDF」の「Base Color」をノードでつなぐ、(黄色の点から黄色の点へ左クリックでドラッグ・アンド・ドロップする)
  6. プレビューに表示されてるモデルの頂点カラーが表示されるようになる。
  7. 頂点カラーをベイクするテクスチャを作る。「Add」->「Texture」->「Image Texture」をクリックする。
  8. 「Image Texture」が作成される。「New」をクリックする。
  9. 「Name」に適当な名前(例では「sit-texture」とした)を付ける。「OK」をクリックする。
  10. 「Image Texture」に先程作ったテクスチャ「sit-texture」が設定される。

頂点を整理する(重複する頂点の削除)

  1. 「Layout」を開き、「Edit Mode」にする。(「Modeling」でも良いです)
  2. 頂点をすべて選択する。(Aを押すと頂点がすべて選択される)
  3. 「Mesh」->「Clean Up」->「Merge by Distance」をクリックする。
  4. 左下の「Merge by Distance」をクリックする。
  5. 「Merge Distance」の値をモデルの形が崩れないギリギリまで大きな値にする。おそらく「0.09 m」になる。画面中央下に削除される頂点数が表示されるので値を決める参考にする。
  6. 「Merge by Distance」のエリアの外をクリックすると「Merge by Distance」が実行される。ステータスバーに「Merge by Distance」実行後の頂点数が表示されてる。(表示されていない場合は、ステータスバーの上で右クリックし「Scene Statistics」にチェックを付ける)

頂点カラーをテクスチャにベイクする

  1. 「Render Properties」->「Scene」->「Render Eng」を「Eevee」から「Cycles」に変更する。
  2. 「UV Editting」を開く。
  3. 「Texture」アイコン->「Shading」で作ったテクスチャ名(例どおりだと「sit-texture」)をクリックする。
  4. 左に「sit-texture」が表示される。(まっくろ)
  5. 「UV」->「Smart UV Project」をクリックする。
  6. 「Smart UV Project」が表示される。特に値は変えずに「OK」をクリックする。
  7. 左の「sit-texture」にUV展開される。
  8. 「Render Properties」->「Bake」->「Bake Type」を「Diffuse」に変更する。「Contributions」->「Color」にチェックを付ける。「Output」->「Target」を「Image Texture」にする。「Clear Image」にチェックを付ける。「Bake」をクリックするとベイクが開始される。(完了まで少し時間がかかる)
  9. 左の「sit-texture」にモデルの頂点カラーがベイクされる。

テクスチャを表示する

  1. 「Shading」を表示する。
  2. 「Vertex Color」の「Color」と「Principled BSDF」の「Base Color」のノートを切断する。(「Principled BSDF」の「Base Color」側の黄色の点をドラッグし、なにもない場所でドロップするとノードが切断される)
  3. 「sit-texture」の「Color」と「Principled BSDF」の「Base Color」のノートを接続する。
  4. 「Layout」に戻る。見た目は殆ど変わらない。

テストでテクスチャを描いてみる

  1. 「Texture Paint」を開く。
  2. 適当にペンツールで口を描き直してみる。
  3. 描き直した部分がテクスチャに反映されてる。

まとめ(感想文)

簡単にMagicaVoxelからエクスポートしたモデルをBlenderに表示したいだけならobjをインポートするのが楽。

なぜこんなにめんどくさい手順を踏むのかというと下記のメリットがあるからです。

  • plyでエクスポートすることでボクセル単位毎の扱いやすい4角形ポリゴンで出力される。objでエクスポートすると頂点数を削減してくれるんですが、その影響でメチャクチャな形のポリゴンになりがち。
  • ボクセル単位毎の4角形ポリゴンで出力されることで綺麗にUV展開しやすい。
  • ボクセル単位毎の4角形ポリゴンで出力されることで綺麗にアニメーションしやすい。

アニメーションさせる予定があるモデルはplyをエクスポートするこの記事のやり方、アニメーションさせる予定が無いモデルはobjをエクスポートするやり方が良いかもね!

引用・参考文献

下記のサイトのページを参考にさせて頂きました。
ありがとうございました。