裏鍵.dump

自分用備忘録。内容に脈絡を求めてはいけない。

MagicaVoxel→Blender→Unityでボクセルモデルを動かす 改③(終)

ボクセルモデルに自動ウェイト機能を使って楽をしたい、の3回目。

 

前回は、MagicaVoxelのエクスポートにply形式を使うことで、Blenderの自動ウェイト機能を使用することができたところまで進んだ。

 

今回はそれをUnityに取り込むところから。

前回の最後、blendファイルをUnityにインポートしようとするとエラーになると書いたのだけど、どうやら今のUnityとBlender2.77で問題が発生するためらしい。

この前インポートできていたファイルもできなくなっていた。

Windows7上だけじゃないかという話も。

issuetracker.unity3d.com

 

・Unityへインポート

仕方ないのでBlenderのバージョンを2.74に戻したところ、そのまま読み込めるようになった。

とはいえ、なかなか思うようにはいかない。

f:id:cores0316:20160729125510p:plain

ply形式の場合、色は頂点色を用いていたのでテクスチャが存在しない。

頂点色は取り込めないみたいで、これをSceneに配置しても寒天で作ったようなキャラしか表示できなかった。

 

 

・頂点色からテクスチャを作る

無ければ作るしかない。

一旦Blenderに戻る。

 

調べてみると、UV展開で作成したUVマップに頂点色を焼きこんでやることで作れるらしい。

何を言っているかわからん?

大丈夫だ、自分もよくわかっていない。

 

まずは作業に必要なウィンドウを用意する。

上の赤枠のボタンを押して、UV Editingを選択する。

f:id:cores0316:20160729131429p:plain

左にUV/Image Editor、右に3D Viewという配置になる。

f:id:cores0316:20160729132009p:plain

plyでインポートしたのに左にテクスチャらしきものが出ているのは、このblendファイルがobjをインポートしたものを使いまわしているため。通常は存在しない。下の「×」ボタンを押して消しておく。

 

UV展開

さて、ボクセルモデルに対してUV展開を実行する。

やることは、サイコロのような立方体にハサミを入れて十字のような平面にする作業と思って間違いない・・・はず。

Edit ModeでAキー2度押しで全メッシュを選択し、下のメニューからMesh→UV Unwrap→Smart UV Projectを選択する。

f:id:cores0316:20160729133825p:plain

処理に必要な閾値らしきものを訊かれるので、そのままOKを押す。

f:id:cores0316:20160729134026p:plain

すると左側に何か出た。

f:id:cores0316:20160729134136p:plain

これが右のモデルを平面に展開したもの。というよりは、UV座標の対応表といった方が近い?

この対応表を適用する、テクスチャの実体を用意してやろう。

下の「New」と書いてあるボタンを押す。

f:id:cores0316:20160729134502p:plain

作成するテクスチャの名前と大きさ、色等を決めてOKを押す。

自分は名前をEmily_texとし、それ以外はそのままOKにした。

すると、このようになる。

f:id:cores0316:20160729134756p:plain

下の方にアニメーション作成で見た覚えのあるFボタンがあるので、念のため押しておく・・・。

 

これでUVマップが出来た。

 

頂点色焼きこみ

このテクスチャに、頂点色を焼きこむ。

右側のウィンドウをProperty(今までのDefault画面でずっと右側に出ていたやつ)に切り替えよう。

左下のボタンから選択する。

f:id:cores0316:20160729140159p:plain

上に並んだアイコンの中からカメラのアイコンを探して選択し、下にスクロールしていくと「Bake」という項目がある。これを使用する。

f:id:cores0316:20160729140359p:plain

「Full Render」と書かれたところをクリックして、出てきた一覧から「Vertex Colors」を選択し、すぐ上のBakeボタンを押す。

f:id:cores0316:20160729140509p:plain

すると、左側のテクスチャに対応する頂点色に基づいた色が描き込まれる。

f:id:cores0316:20160729184842p:plain

 

このテクスチャを保存・・・しようと思ったが、ふと右側を3D Viewに戻して見てみるとモデルに何やら細かい線のようなものが出来てしまっている。

f:id:cores0316:20160729190048p:plain

これは、テクスチャ側の色矩形とUV座標の矩形がわずかにずれてしまうことで発生するらしい。

詳しくは下記のやり取りにて。

blender.stackexchange.com

ありがたいことに解決法も記載してあるので試してみよう。

unwrapするときのIsland Marginという値を0.05にして

f:id:cores0316:20160729190643p:plain

BakeのMarginを1にする。

f:id:cores0316:20160729190755p:plain

 

結果は下記の通り。

テクスチャの方は余分な色塗りを小さくして、UV座標の方はちょっと小さめに設定するようにした感じだろうか。

f:id:cores0316:20160729191005p:plain

f:id:cores0316:20160729191054p:plain

 

素晴らしい。

下のメニューからImage→Save As Imageで画像ファイルとして保存する。

f:id:cores0316:20160729191215p:plain

 

blendファイルも保存してBlenderを閉じる。

 

 

・Unityへインポート再挑戦

Unityを起動して適当なプロジェクトを作成し、先ほど保存したblendファイルを放り込む。

f:id:cores0316:20160730130734p:plain

Texturesフォルダを作成して、同じく先ほど保存した画像ファイルを放り込む。

f:id:cores0316:20160730130917p:plain

隣のMaterialsフォルダに移動してマテリアルを選択し、Inspectorビューでテクスチャを指定する。

f:id:cores0316:20160730131517p:plain

モデルをHierarchyに放り込むと・・・

f:id:cores0316:20160730131747p:plain

できたー

 

見た目変わらないので画像にはしないけど、アニメーションも問題なく動作した。

 

 

ということで、今回辿った方法をまとめると下記のようになる。

①MagicaVoxelでモデリング、ply形式でエクスポート

Blenderにインポート、重複頂点削除

③ボーンを設定して自動ウェイト設定、必要に応じて手修正

④アニメーション作成

⑤頂点色をテクスチャに焼きこんで別途保存

⑥Unityにインポート、加工して動かす

 

なんだか山登りで山頂から今まで登ってきた道を見下ろしているような感覚になるなぁ・・・。

せっかく3Dモデルを動かせるようになったのだから何か作りたいね。