今回は Blender を通して MMD に持っていくという内容です
恐らく大半の MMD モデルは、Blender を使って作られているんじゃないかと思っています
そんな中、自分は LightWave を使っています
なぜなのか?
理由は一番慣れているからに尽きます

じゃっく
結局慣れているものが一番早い
なので、LightWave で MMD モデルを作っているのですが、PMX 形式で吐き出す術がありません
そこで Blender をデータ変換ソフトとして使ってみました
つまずいたポイントはいくつかありましたが、最終的には MMD に持っていけました
今後もこの方法で作っていくと思うので、やり方を残していきます
準備
まずは準備をしないことには動けないので、作っているデータとBlender 側の準備を済ませておきます
Blender に SKkeeper を入れておく

Blender にアドオンをいくつか追加しておきます
一つ目が SKkeeper というものです
これはモーフ(シェイプキー)付きのオブジェクトにモディファイアを当てるものになります
標準の Blender だとできない仕様になっていますが、SKkeeper というアドオンを使うことによって、それを可能にします

じゃっく
ありがたく使わせて頂きます
このアドオンは以下のリンク先から導入できます
Blender に mmd_tools を入れておく

二つ目のアドオンが mmd_tools というものです
Blender も標準では PMX 形式へ変換ができないので、導入することで可能にします
MMD モデルを作る上では必須になります
リンク先は以下です
インストールしたら、ちゃんと画面に表示されるか確認

じゃっく
ちなみに Blender は ver.4.2.13LTS を使いました
各オブジェクトとボーンを一つにする

LightWave の方では、以下を一つのレイヤーにまとめます
- 全身のボーン
- 各オブジェクト
各オブジェクトはモーフとウェイトマップの作成が完了していることが前提です

じゃっく
各ボーンへのウェイトマップ適用も忘れずに
本体を正常な変形ができる状態にする

レイアウトではボーンを読み込んで「中心点回転記録」の実行と、全てのボーンのウェイトマップを「ウェイトのみ使用」に変更
「固定長の強さで乗算」のチェックを外して、正常に変形できる状態にしておきます
手順
レイアウト内で変形に問題が無いことが確認出来たら準備完了
Blender を通して MMD モデルに変換します
以下が手順です
A スタンスに変更する

モデルは T スタンスで作っていたので、A スタンスに変更します
これは MMD のモデルが A スタンスになっているからです
肩と腕の角度を変えて、A スタンスにしていきます
- 肩:5° くらい
- 腕:30° くらい
モデルの質感を変更する

モデルの質感も変えます
色・質感編集から「スムージング」を有効へ変更
MMD 上でも反映されることが分かったので、設定しました
モデルを FBX で出力する

「FBX ファイル出力」から FBX 形式のファイルを書き出します
設定項目がいっぱい出てきますが、デフォルトのままで OK
モデラー側にも FBX ファイルの書き出し項目がありますが、オブジェクトだけしか出せないので使わないです
Blender で FBX を読み込む

ここで Blender の出番
インポートから FBX を選んで、以下の設定にしてから先ほど出力したファイルを読み込みます
- アニメーション:解除
- プライマリーボーン:マイナス Z 軸
プライマリーボーンをマイナス Z 軸にするのは、LightWave 上でモデルが向いている方向がマイナス Z 軸方向だからです
mmd_tools で をPMX 化する

読み込むとモディファイアが一つだけある状態なので、これを適用する必要があります
このモディファイアを適用しないと、せっかく設定したポーズが無かったことになります

じゃっく
T スタンスに戻っちゃいます
標準ではモーフがあるモデルへの適用ができないので、ここで SKkeeper の機能を使います
オブジェクトモードで本体オブジェクトを選択
画面上部にあるオブジェクトタブから Apply All Modifiers (Keep Shapekeys) を実行します
これですべてのモディファイアが適用されます

次はボーンを選択して、ポーズモードへ切り替え
画面上部のポーズタブから、「レストポーズとして適用」を実行します
これもやっておかないと、ボーンだけ T スタンスという状態になっちゃいます

オブジェクトモードに戻って、モデル本体を選択
MMD タブから「モデルを変換」をクリックして、MMD モデルへ変換します
いくつか項目が出てきますが、とくにいじらずそのまま OK

このまま出力して PMX Editor で確認したところ、モデルがぐしゃぐしゃに崩壊しました

じゃっく
たまらず発狂
ボーンの並びに問題があったので、MMD メニューの「ボーン順序」という項目内を確認
中身はエラーまみれになっていました
並びが正しくなれば良いので、Fix Bone Order をクリック
並び順を変える定義を Rebuild:Path に変更すると、一発でエラーが修正されます

あとはエクスポートから PMX ファイルを書き出します
いっぱい項目が出てきますが、スケールの項目だけちょっと変更
デフォルトでは 12.50 ですが、ここを 10.0 にします
10.0 にするのは LightWave で作ったサイズと合わせるためです
PMX Editor で PMX を読み込む

出力した PMX ファイルを PMX Editor で読み込んで確認
確認は TransformView でやりました

じゃっく
良かった 大丈夫そう
修正
英語名から日本語名に変換する

ボーンとモーフは英語で書いてあるので、これらを日本語に置き換えていきます
編集タブから「名称の一括編集」をクリック

開いたら画面左上のリストからボーンを選んで、「和名」の中にある英語の名称を「英名変更」へコピペします
コピペしたら確定をクリックして、一旦「英名」に反映させます

次に編集から「辞書から英名→和名作成」を実行
すると、「和名変更」に日本語名が入るので、そのまま確定をクリック
これで日本語の名称に置き換わります
モーフの方も同じやり方で置き換えます
和名と英名は「和英変換」というテキストファイルで管理されているので、もし足りない名称や変更したい名称がありましたら、編集して変換項目を増やすことができます

PMX 編集に戻って確認
ちゃんと置き換わっていますね
先端が外れているボーンを修正する

あとは見た目上の不具合があるボーンを直していきます
例として頭から
PMX 編集から頭のボーンを探します

「表示先(>)」の内容を「ボーン」に切り替えて、項目の中を子である頭先に変更

これで直ります
ちなみにグレーアウトしている相対の数値ですが、ファイルを読み込み直すと全部ゼロになります
残りの部位も同じようにやれば OK
- 右手首
- 左手首
- 下半身
- 上半身2
- センター
動作確認
MikuMikuDance で確認

MMD (MikuMikuDance) に読み込んでみました
ボーンの表示登録をしていないのでセンターしか出ていませんが、ちゃんと日本語表記になっています
モーフも日本語になっていますし、変形も LightWave で見たものと同じであることが確認できました

じゃっく
これで完了です
まとめ
それではまとめになります
- SKkeeper のようなアドオンの導入は必須
- ポーズはレイアウトで A スタンスにしておく
- モディファイアを当ててからレストポーズを適用をする
- ボーン順序は Fix Bone Order の Rebuild:Path で直せる
- 先が外れているボーンは表示先のボーンを子にすれば直せる
- ボーン名の置換は PMX Editor の「名称の一括編集」を使う
今回は LightWave から Blender を通して MMD に持っていく工程を残しました
なぜかボーンの先端が外れたり、ボーンの順序がおかしくなったりなど、つまずいたポイントはありましたが、簡単に対処できる内容で良かったです
ただ、ふと思ったのは LightWave にも直接 PMX 出力できるプラグインがあればなぁ、なんて思ったりも・・・
ないものねだりですけどね
それでは、お疲れさまでした
おまけ
ボーン並びが違うとモデルが崩壊する

これはまだ安定した PMX 化への工程がはっきりしていなかったときに発生した出来事です
テストで出したモデルを PMX Editor で読み込んで、PMXView で確認した時は特に問題無いように見えました

じゃっく
あぁ よかった~!なんて思っていましたね
だが、しかしっ!・・・
TransformView で確認すると、モデルが崩壊しているではありませんかっ!

じゃっく
ガギギグギガガッ!!(発☆狂)

何が起こったのかボーンの状態を確認したところ、親ボーンの項目でエラーを出している箇所がいくつかありました
どうやら内部的に親子付けが正しくても、リスト内のボーンの並びがおかしいと崩壊するようです
ただ、これは上側に親ボーン、下側に子ボーンの順にすれば簡単に直せることが分かりました

「PMX データの状態確認」からエラーを出しているボーンへ飛ぶことができますが、一個一個修正するのはかなり大変です

じゃっく
これでは日が暮れます
そこで mmd_tools の中に、なんか一気に修正できるもの無いかな~と探していたところ、該当する機能があったのでそれで修正できました
こういった機能があるのはありがたいですね
Blender に読み込むと一部のボーンの先端が外れる

こちらは LightWave から出力した FBX を Blender に読み込んだ時の画像です
なぜかボーンの先端が外れちゃっています
この謎現象は読み込んだ直後から発生しました

じゃっく
なんこれ???
細かい原因は不明ですが調べた限りでは、離れた位置で親子付けされているボーンにだけ発生していることが分かりました
それでも修正が必要なボーンが少ないのが救いでしたね
Blender の標準機能ではモーフ付きオブジェクトにモディファイアを当てられない

冒頭からあったように、Blender は標準でモーフのあるオブジェクトにモディファイアを当てられません
個人的にこれはちょっと謎仕様です

じゃっく
なぜこんな仕様に?
手動でも一応適用することは可能なようですが手数が多くて、さらにモーフの数が多ければ多いほどかなりの時間を使ってしまいます
そこで SKkeeper というアドオンを今回使わせて頂きました
今後もありがたく活用していきたいと思います
参考資料
使用したソフト
- 3DCG
- Blender
- LightWave3D
- 画像
- CLIP STUDIO PAINT PRO
- 動画
- Bandicam
- ScreenToGif