1.きっかけ
研究のためにMMDをUnityで読み込む必要があった。しかし、MMDのファイルであるpmxを読み込むためのUnityの追加パッケージを使うと個人的な理由で都合が悪かった。そのため、MMDファイルをBlenderで編集したのちにfbx、もしくはblendファイルとしてUnity(URP)に読み込ませる方法と詰まった部分について説明する。
2.Blenderでの操作
2.1 MMDモデルをBlenderで読み込む
MMDモデルを読み込むためには外部のアドオンが必要になる。
自分はこちらのアドオンを使った。具体的なインストール方法はリンク先のページに書いてあるのでそれを参照してほしい。
インストールが終わったらBlenderを再起動し3Dビュー画面の右側にある表示からMMDのインポートを押し、pmxをBlenderで開く
2.2 骨格の設定
UnityでMMDを動かすには骨格が正しく設定されている必要がある。
具体的にはボーンの構造が以下のようになっていることが推奨されている。
.
└── 腰
└── 下半身
├── 上半身
│ └── 上半身2
│ ├── 肩.L
│ │ └── 腕.L
│ │ └── ひじ.L
│ │ └── 手首.L
│ │ ├── 親指0.L
│ │ │ └── 親指1.L
│ │ │ └── 親指2.L
│ │ ├── 人差し指1.L
│ │ │ └── 人差し指2.L
│ │ │ └── 人差し指3.L
│ │ ├── 中指1.L
│ │ │ └── 中指2.L
│ │ │ └── 中指3.L
│ │ ├── 薬指1.L
│ │ │ └── 薬指2.L
│ │ │ └── 薬指3.L
│ │ └── 小指1.L
│ │ └── 小指2.L
│ │ └── 小指3.L
│ ├── 肩.R
│ │ └── 腕.R
│ │ └── ひじ.R
│ │ └── 手首.R
│ │ ├── 親指0.R
│ │ │ └── 親指1.R
│ │ │ └── 親指2.R
│ │ ├── 人差し指1.R
│ │ │ └── 人差し指2.R
│ │ │ └── 人差し指3.R
│ │ ├── 中指1.R
│ │ │ └── 中指2.R
│ │ │ └── 中指3.R
│ │ ├── 薬指1.R
│ │ │ └── 薬指2.R
│ │ │ └── 薬指3.R
│ │ └── 小指1.R
│ │ └── 小指2.R
│ │ └── 小指3.R
│ └── 首
│ └── 頭
│ ├── 目.L
│ ├── 目.R
│ └── 口
├── 足.L
│ └── ひざ.L
│ └── 足首.L
│ └── つま先.L
└── 足.R
└── ひざ.R
└── 足首.R
└── つま先.R
これ以外に骨格があっても問題ない。また、モデルによっては各名称が異なることがある。
推奨の骨格はこれだが、上半身、上半身2、肩、つま先、首、口、目、各指はなくても動作が可能なようだ。
2.2.1 骨格の追加
モデルによっては必要な部位が存在しない場合がある。その際にはボーンを追加する必要があるのだが、その一例を紹介する。今回はないことが結構多い腰について説明する。
モデルのボーンを選択した状態でBlenderの左上の画面から[編集モード]に切り替える。その後下半身のボーンが選択された状態で[Shift]+[E]キーを押し自分は何も考えず適当にやったが適切な長さと方向にボーンを伸ばしてから左クリックをする。
2.2.2 骨格の階層構造を作る
モデルによっては階層構造が推奨の状態になっていないものがある。この場合Unityで正しく読み込めないため階層構造を作る必要がある。具体的には子にしたいボーンを選択した状態で[Shift]キーを押しながら親にしたいボーンを選択し右クリック、ペアレント→作成→オフセットを維持を選択する。
2.3 不必要な部分を削除する
Blenderの右上の項目を見ると、joints、rigidbodyという項目が視認不可状態で存在していることがわかる。これらはUnityにインポートする際には邪魔なので[階層を削除]をして削除することが望ましい
2.4 エクスポート
今回はpmxとしてではなくfbx、またはblendとしてエクスポートをする。
3 Unityでの操作
3.1 モデルのインポート
今回はUnityのURPを想定している。また自分のバージョンは2019.4.5f1である。
まず左下にあるAssetにモデルをインポートする。ドラッグ&ドロップでできる。
3.2 モデルの骨格の操作
Assetからモデルを選択し、Rigタブで以下のような状態になるように選択をする。
そうしたら、Configureボタンを押し、骨格の設定に入る。デフォルトで骨格はぐちゃぐちゃになっていると思うので、以下の画像になるように各項目を設定し直す。
Character not in T-pose と表示される場合がある。その場合は左下にあるメニューからenforce T-poseを入力すると自動でT-poseを取るようになる。
3.3 モデルのテクスチャの修正
なぜかURPだとテクスチャがきちんと反映されないためおかしな見た目になっている。そこでテクスチャを修正する必要がある。
Assetからモデルを選択し、Materialから以下の表示になるように設定をする。
その後、モデルをシーンに追加し、各部位のテクスチャの修正を行う。
3.3.1 blender側の設定
再度Blenderでモデルを開き、左上の画面で[{モデルの名前}__mesh]と書かれた項目を選択する。
そして3Dビューの右側にあるMMDの設定画面で[マテリアルに分解]をクリックする。
するとメッシュがマテリアルごとに分解される。
3.3.2 テクスチャの用意
テクスチャは元のMMDファイルの中に存在しているためまとめてAssetにドラッグ&ドロップする。
3.3.3 テクスチャの修正
Unityのシーン内でモデルのメッシュを選択すると、画面右下にShaderという項目があることがわかる。各マテリアルごとに以下の画像のようになるように[Universal Render Pipeline/Unlit]を選択し、base Mapにテクスチャをドラッグする。
この際どのテクスチャをどのマテリアルに適用させればいいかわからないと思うが安心して欲しい。 blender側で対象のマテリアルを選択し、画面右下から以下のような画面を開くと、マテリアルにテクスチャが用意されている場合には、そのテクスチャの名称が表示される。 それを元にテクスチャを再設定すれば良い。
以上の操作が完了すればモデルのインポートは終了となる。次回はモーションファイルを読み込んで実際にUnityでモデルに動きをつける。