Gaming Life

一日24時間、ゲームは10時間

MagicaVoxelで作成したモデルをBlenderでリギングしたい(個人用メモ)

 前回記事でStatic MeshをUE4に持っていく方法は確立できたがボーンを入れてアニメーションを付けるところまではまだできていない。いろいろ実験してみたので今回はそのメモ。

ai-gaminglife.hatenablog.com

QubicleのOptimizationオプションについて

 ボクセルで制作したモデルをplyで書き出してからBlenderでfbxとして書き出すとUVテクスチャがない、頂点、ポリゴン数が莫大に増えるといった問題がある。

 そこで、Qubicleの有料DLC、「Mesh Module」を購入することで自動でUV展開したテクスチャを得ることができ、更にボクセルモデルを自動で最適化し、ポリゴン数を大幅に減らすことができる。

f:id:ai_gaminglife:20180516175718p:plain

 file -> export -> fbx でexport時のオプションを設定できる。最適化に関わるのは "Optimization" のところ。"None"、"Non-Manifold"、"Manifold"の3つの選択肢がある。

 "None" は目に見えない部分の頂点が削除される。これはBlenderの重複頂点を削除でも出来るのでテクスチャを得る以外の目的で使うことはなさそう。

 "Non-Manifold"は最もポリゴン数を減らすことができる。しかし、このオプションは形によって、"not watertight"、水密にならないのが問題。つまり一部の辺が画像のようにつながらなかったりする。一切形を変更しないStaticMeshであればこれでも問題はないが、ボーンを入れてアニメーションさせるSkeletalMeshとして使用するとつながっていない辺が裂かれてしまい問題。

 "Manifold" は "Non-Manifold" より多くのポリゴンを必要とするが、 "Non-Manifold" で問題であった非水密性が解決できる。

 というわけでMagicaVoxelで作成したStaticMesh用のモデルは基本的に "Non-Manifold" 最適化をかければいい。SkeletalMesh用のモデルは "Manifold" を使う…と言いたいところだが話はそんなに単純ではない。詳細は次に。

参考サイト http://minddesk.com/learn/article.php?id=18 http://minddesk.com/learn/article.php?id=30

各手法で作ったモデルをMixamoでリグ付けしてアニメーションさせてみる

 MagicaVoxelで作ったモデルをBlenderでボーンを入れられるようにするには大きく分けて以下の方法が考えられる。

  1. MagicaVoxelでply形式でexport
  2. Magicavoxelでobj形式としてexport
  3. qb形式で書き出した後"Non-Manifold"最適化をかけてfbx or obj形式でexport
  4. qb形式で書き出した後"Manifold"最適化をかけてfbx or obj形式でexport

 1は色を頂点カラーとして保持しているためゲームエンジンで利用するためにUVテクスチャに頂点カラーをベイクしたい。しかし、標準のBlenderではどうしてもズレてしまうのは過去記事を見ていただけるとわかるはず。

 2はパレットカラーをテクスチャとして持っている。しかしできることならUV展開したテクスチャを持ちたい。

 3は前述の通り水密性が保たれておらず、ボーンを入れ変形させると境目で裂けてしまう。

 で本命の4。これが一番良さそうに見えるのだが、ボクセルらしいアニメーションを得られない。四角形で形成されるボクセルモデルを三角ポリゴンに分けているからだ。しかもボクセルで作ったモデルの関節をボーンで無理やり曲げることで明らかに違和感のあるアニメーションになってしまう。

 こんな感じでどの方法もコレといった解決方法にはなっていないがものは試し。ブラウザ上で気軽にリグ付けできるAdobeのサービス、Mixamoを使ってアニメーションさせてみる。(3は試すまでもなくダメなので省略、1は事情により省略)

「Magicavoxelでobj形式としてexport」した場合

「qb形式で書き出した後"Manifold"最適化をかけてfbx or obj形式でexport」

 ぱっと見、「Magicavoxelでobj形式としてexport」が一番それらしい動きになっている。しかしコレではまだ納得できない……

考えられる解決方法

 Twitterで権田支配人(@GONDAman555)さんに教えてもらった方法がQubicleでモデルを分割するというもの。こうすれば違和感ないアニメーションが作れるかも……?しかしBlenderがワカラナイ()のでまだ実際には出来ていない。

おまけ

 現在Qubicleでパーツごとに分割してAutoRigProを使ってリグ付けしようとしている。AutoRigProはBlendファイルをUE4に書き出すのに優れたアドインの一つらしく、コレでうまくいけばUE4上でのリターゲットも容易にできそう。しかし例によってBlenderワカラナイのでドキュメントや解説動画とにらめっこしながら格闘中……