私はとある研究CGデータを使用する必要がありました。連携ツールの都合上、旧メタセコイア形式(.mqo)しか使えませんでした。
そして、私がやりたいのは人型ファイルのVRM形式のをなんとか読み込んでメタセコイアで使えないかということでした。
しかし、実際のところ昨今の3DCGの事情的にはメタセコイアは時代遅れで、できれば国際的にも使われているBlenderの方が操作も知っている、というのもあってできればBlenderでできる限り編集してから最後の最後でメタセコイアの方へ持っていきたいわけです。作者様には悪いと思いますが、正直メタセコイアの操作は直感的でない部分もあると感じ結構使いにくいです。Blenderを先に触ってしまうと、非常に使いづらいと感じました。
こんな事情もあって、Blenderからメタセコイアへデータを持っていきたかったですが、それくらい調べたら簡単に出てくると思ったのですが、なんと調べても逆のことしか出てこないではありませんか。
なので、自力で何とか方法を見つけないといけなかったのですが、今回はその紆余曲折を紹介しておきます。
目次
- 目的
- 環境
- BlenderからMetasequoiaへ移動させる方法を考える
- VRMファイルについて
- とりあえず思いつく方法でやってみた結果…
- 実際にMetasequoiaに移動できた方法
- 補足:ボーンのないもの場合
- まとめ
目的
目的はリード文にもある程度書いていますが、もう少し状況を詳しく書いておきます。別にそうでなければ苦労してやる必要もないかもしれませんからね。
まず私が最終的な目的は、メタセコイアでポーズを付けた人型モデルを配置し、その周りに別のモデルを置くことを目的としています。
そして、その過程としてやりたいことは以下のようになっていました。
- オリジナル人型のモデルを読み込みたい
- 人型モデルにポーズを付けたい
- 別のオブジェクトを後から一緒に配置
- 最終的に全てが配置されたメタセコイアファイルが欲しい
このように進めたいというのがあり、このプランに従って最初はBlenderでモデリングを行ったりしていました。
そして、いざメタセコイアに持っていこうというときに苦戦して、それなら頑張ってメタセコイアでモデリングしたほうが良かったのかなどと思いました。ですが、時間をかけて作ったので何としてもメタセコイアに持っていきたかったというのが背景にあります。
なので、1からやるなら別の方法の方が早いし効率が良い可能性もありますが、もうデータがあってどうしてもBlederのデータをメタセコイアに持っていきたい人向けの記事というわけです。
ちなみに、今回の話の軸は後に紹介する人型モデルデータのVRMについての話がメインですが、この理由としては、ボーンの入ったものにシーンを付けて正常にテクスチャを反映させるのが面倒なだけで、ボーンがない場合は非常に簡単に移動できるからです。これに関しては補足の項で説明します。
環境
あまり関係ないとは思いますが、BlenderとMetaseqoiaのバージョンやPC環境について簡単に触れておきます。
要らない情報だと思いますが、念のためにPCスペックを掲載しておきます。
項目 | 製品名 |
CPU | Ryzen 9 3900X |
マザーボード | ASRock X570 Taichi (Type-Cの向き修正済み) |
RAM | DDR4-3433 16GB*4 (F4-3600C19D-32GSXW) |
GPU | ELSA GTX 1650 GDDR5 4GB (GD1650-4GERS) |
電源 | RM850x 2017 |
SSD | M.2 512GB |
ケース | JONSBO U4 シルバー |
平たく書けば一応当時のハイエンドPCという感じで、スペック不足などは絶対にないと思って問題ありません。いわゆる「おま環」ではないので、同じことをすれば同じ状態になるはずです。
また、ソフトウェア類のバージョンは以下のようになっています。
- OS: Windows 10 Pro 21H1(build:19043.1165)
- Metasequoia4: 4.7.7d
- Blender: 2.93.2
PC構成は同じはあり得ないにしても、ソフトウェア類のバージョンが違えば挙動が違う可能性があるので悪しからず。
Blenderからmetasequoiaに移動させる方法を考える
BlenderからMetasequoiaに移動させる方法を考えてみます。
考えるとはいったものの、正直方針としては一つしかなく、何かしらの形式でBlenderエクスポートして、それを読み込むというのが基本方針になります。
メタセコイアとBlederで共通していて使えそうなのが以下の3つのファイル拡張子ですね。
- .fbx
- .glb
- .obj
ここらへんなら読み込めそうです。ですが、私の使わされているMetaseqoiaのエディションだとfbxが読み込めない残念仕様なので、.glbか.objでなんとかできないかを模索していくことになります。
VRMファイルについて
VRMファイルは人型モデルデータを扱うためのフォーマットでベースとなっているのはglTF2.0です。
VRMとglTFは座標系が異なっているぐらいのものなので、gltfとしてVRMを読み込むと後ろを向いた状態で読み込まれるような状態になります。これに関しては次の項ですぐに出てきます。
さて、こんなVRMファイルですが、実はBlederでも標準では読むことができないため、別途アドオンを入れて読み込む必要があります。
このVRMを読み込むためのアドオンは簡単に入れることができますし、解説しているサイトも多いので今回は割愛させていただきます。
「Blender VRM Importer」あたりで出てくると思います。
とりあえず思いつく方法で試してみた結果
とりあえずobjで出力してみました。すると以下のようになっていました。
テクスチャがありませんでした。でもobjってマテリアルライブラリがあるので、それを読めていないだけなのではと思ったのですが、どうもそうではないらしく、マテリアルライブラリにはそもそもテクスチャの情報が一切ありませんでした。テクスチャをこれに登録できるのかはわかりませんが、そもそもVRMファイル自体にテクスチャが内臓されているような状態なので、読み込むものが外部にな為このような出力になっていると考えられます。
実際にこのモデルのマテリアルライブラリ(.mtl)は以下のようになっています。
newmtl F00_000_00_EyeExtra_01_EYE
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_000_00_EyeHighlight_00_EYE
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_000_00_EyeIris_00_EYE
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_000_00_EyeWhite_00_EYE
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_000_00_FaceBrow_00_FACE
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_000_00_FaceEyelash_00_FACE
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_000_00_FaceEyeline_00_FACE
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_000_00_FaceMouth_00_FACE
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_000_00_Face_00_SKIN
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_000_Hair_00_HAIR
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_002_01_Shoes_01_CLOTH
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_002_01_Tops_01_CLOTH
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl F00_002_02_Body_00_SKIN
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
そしてマテリアルライブラリにテクスチャが設定されているとこんな感じです。一番下の行でテクスチャファイルが指定されていますね。
newmtl マテリアル
Ns 225.000000
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 2
map_Kd E:\\blender_data\\tex\\Heart1.png
なので、これを気軽に使うというのは難しそうですが、テクスチャさえ設定できればと思っていました。ただ、私はこのライブラリの見方を知らないため、テクスチャを設定しても正しい質感などが得られらない可能性が高いと考えています。
というより、解決法として紹介する方法を使って正しく設定した後に、メタセコイアでobj出力を行っても正しく読み込めないので、マテリアルライブラリの設定だけでは難しいようです。このとき、しっかりテクスチャの設定はしているんですがね。
さて、次にglTFで出力し、読み込んでみました。
色が薄くて見にくくて申し訳ないのですが、Windows標準のビュワーだとこんな感じに映ってしまいました。
実はこれでもポーズを付けた後で出力されているのですが、この棒立ちの状態になってしまいました。VRMとglTFはほぼ同じファイル形式であることからポーズのデータではなく、モデルのデータとして出力されているだけなのだと考えられます。
しかし、よく見ていただきたいのが顔ですね。顔に表情を付けたのですが、これだけはちゃっかり反映されています。もしかしたらglTFには顔の情報のデータがないのかもしれません。私はここらへんの内部にまでは詳しくないのでこれ以上はわかりかねる範囲です。
これをメタセコイアで読んでも同じ感じにしかならないのでどうしたものかと考えていたのですが、ふと思いついたある方法で解決できました。
実際にMetasequoiaに移動できた方法
では正しく移動できた方法を紹介します。
前提として、BlenderでVRMファイルを読みます。そして読み込めている状態から話を続けます。
はじめに、Blenderを使ってポーズを付けます。ボーンを選択してポーズモードにすればできます。そして、そのときに表情も含めて姿勢を決めてしまう必要があります。
理由としては、後々行うメタセコイアの設定は手動で面倒なので、ここで後でポーズを変えたりするとその設定をやり直さないといけないからです。
次に、このファイルをWaveFont(.obj)でエクスポートします。ことのき、Windows標準のビュワーでいいので、しっかり.objファイルにポーズがついているか確認します。ことのき、テクチャの設定がなされていないので、真っ白や真っ黒の状態で大丈夫です。
ここで、ベースとなっているVRMファイルを複製してください。複製した後、拡張子を「.glb」としてください。こんなことして大丈夫なのかと思うかもしれませんが、VRMについての項で書いた通り、glTF2.0をベースに作られているので座標軸が異なるだけなので問題はありません。
確認をしておくと今用意しておくべきデータは以下の二つです。
- ポーズをつけたWaveFont(.obj)ファイル
- 拡張子を「.glb」に変えたVRMファイル
これから上記二つをメタセコイアで開いて設定を行っていきます。
初めに、メタセコイアで拡張子を「.glb」に変えたVRMファイルを開きます。すると、正しく色のついたVRMモデルが読み込まれると思います。後ろを向いていると思いますが、問題ありません。
読み込むときは基本的にOKを押していけばいいのですが、「glTF Importer」が開くのでglTFシェーダを適用と、必ず内部テクスチャをファイルに出力を選んでください。この内部テクスチャを後々必ず使います。
次に、別のウィンドウでメタセコイアを開いて、そちらではポーズを付けたWaveFontファイルを開きます。こちらも特に指定とかしないでいいので、とりあえずOKボタンを押して読み込むだけです。
すると以下のような感じになると思います。
VRMモデルの方には色がついており、WaveFontの方には色がついていない状態ですね。
これに今からテクスチャを設定していきます。
メタセコイアの上部のボタンから「パネル」→「材質パネル」→右側に出てきたタブの「設定」を開きます。これで開ける「材質設定」画面でテクスチャの設定を行っていきます。
これをVRMモデルと、WaveFontのウィンドウの両方で開いてください。すると以下のようになっていると思います。
もうお気づきだと思いますが、「材質設定」のオブジェクトの名前が両方とも完全に一致しているはずなので、色がついているVRMデータのものをベースにして、色がついていないWaveFontモデルの方にテクスチャを設定していきます。
「材質設定」の画面でのオブジェクトの並び順はバラバラなので同じ項目の名前が全く同じ設定になるように手動で設定していきます。手動だから面倒なんですよ。
一応実際に途中まで設定すると以下のようになっているので問題なく色がついていることが確認できるでしょう。
そして、手動で全てのオブジェクトに設定を行うときっちり色が付きます。そしてあとは好きなものを付け加えたらしっかり色のついたsシーンを作ることができます。
これでVRMモデルにポーズをつけてメタセコイアに移動することができました。これでなんとか私の目的は達成できそうです。
ちなみに、ボーンの入っていないモデルならBlenderからMetasequoiaへの移動は非常に簡単なので次の項で簡単に説明します。
補足:ボーンのないもの場合
これはBlenderでglTF(.glb)で出力するだけです。この中にテクスチャファイルも同梱されているので非常に扱いやすいですね。
これをMetasequoiaで読み込んでサイズを調整すれば移動は完了です。
まとめ
BlenderでVRMファイルを読みこみポーズを付けた後に、Metasequoiaでそれをテクスチャを含めて読み込む方法を紹介しました。
手順としては手動の部分が多いので非常に面倒ですが、Metasequoiaに持っていけないことは無いですね。私は最初調べても出てこなかったためできないのかと思っていましたが、やってみるものですね。
まあ、実際のところ今の時代はMetasequiaからBlederに持っていきたいという人が大半だと思うので、この記事を見る人はそういないと思うのですが、私のような互換性の都合で…というニッチな方もいるかもしれないのでとりあえず自分の備忘録としても残しておきます。
他にもっといい方法があるよという方はコメントをいただけますと幸いです。ここがわかりにくいとかあれば加筆修正を行うかもしれないのでそこらへんもコメントでご指摘いただければ。
以上です。お読みいただきありがとうございました。