MMD4Mechanimを使わずにmmd用モデルをUnityに取り込んでWebGL向けにビルドする

#はじめに

mmdモデルをUnityで扱いたい場合はMMD4Mecanimを利用させて頂くのが一番楽で良いですが、MMD4MecanimはWebGL向けのビルドで使用することを利用規約で禁じています。そこでMMD4Mecanimを使わずにmmdモデルをUnityに取り込む方法について調べてみました。

#注意点
WebGL向けにビルドしてインターネット上に公開する行為は、”再配布”扱いになるので利用規約で明確に再配布可能とされているmmdモデルを利用するようにしましょう。またインターネット上には２次創作物のmmdモデルが溢れていますが、権利関係の問題があるので安易に利用するには避けましょう。

##1.モデルの入手
今回はニコニコ立体ちゃんのmmdモデルを利用したいと思います。
https://3d.nicovideo.jp/works/td14712
<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101808/cf2e9cb8-405c-3115-90fd-82073273a68b.png">


そもそもニコニコ立体ちゃんにはUnityPackageが含まれているので、今回紹介する方法でmmdモデルをUnityに取り込む意義は本来ありません。今回は利用規約の問題でニコニコ立体ちゃんを使います。

##2.モデルの基本ポーズをTポーズにする
Unityで利用するにはキャラクターのモデルがTポーズである必要があります。
https://docs.unity3d.com/jp/460/Manual/ConfiguringtheAvatar.html

しかし多くのmmdモデルの基本ポーズはAポーズに設定されています。そこでPmxEditorを使ってmmdモデルのポーズを編集してTポーズにします。
http://kkhk22.seesaa.net/category/14045227-1.html

<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101808/b4938e5d-1f6b-ebfc-e813-018749b3bab0.png">
<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101808/acd5f220-def0-3fea-7bbc-c6b35a5e065a.png">

##3.Blenderに取り込む
Blenerでmmdモデルをimportできるようにするアドオン"mmd_tools"を利用します。
https://github.com/powroupi/blender_mmd_tools
<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101808/54f21c22-c998-35dd-54eb-c8370ede0cf8.png">

importしたときに見た目がおかしいですが、これらはUnity上で修正するので気にせずfbx形式でエクスポートします。

##4.Unityに取り込む

Blenderでエクスポートした.fbxファイルを取り込みます。

<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101808/a613386f-0cd1-61f9-482b-3b10e7d44acb.png">

ただ取り込んだだけだと、見た目がおかしいので修正していきます。

###4.1 変なメッシュの非表示とテクスチャの設定

衝突判定のために設定されているコライダーがメッシュとして表示されてしまっているのでこれを非表示にします。
次にテクスチャが設定されていないので、fbxファイルのimport setttingsからExtract Materials..をクリックして、生成されたマテリアルに手作業でテクスチャを設定していきます。

<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101808/4ddc4b08-de7a-223b-8ac4-47226a8d46d2.png">

頑張ってマテリアルにテクスチャを設定するとこんな感じです。あんまり可愛くないですね...

###4.2 シェーダーの設定
ということで可愛くなるようにシェーダーを変更します。VRM/Mtoonシェーダーが手軽に良い感じになるのでマテリアル全部に適用させます。シェーダーは以下で配布されているUniVRMパッケージの中に含まれています。
https://github.com/vrm-c/UniVRM

<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101808/74d9e749-3a66-bbbf-b2b1-b051fb4fc93d.png">

###4.3 Rigの設定
以上で見た目はだいたい整えることができたので、次にRigの設定を行います。fbxのimport settingのRig/Animation TypeをHumanoidに変更します。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101808/00154aed-7a59-eeb9-d1fe-468ba29d2e18.png">

ある程度はUnity側がやってくれますが、エラーが出てるので手動でひとつひとつ修正します。Configure...をクリックして編集画面に移動し、エラーを吐いてる部分を修正していきます。この作業が一番大変です。エラーを吐かないように設定できても、アニメーションを再生させてみると変な動きをすることがあります。その場合はRigの設定が間違ってるので、修正する必要があります。

##5.揺れものの設定
MMD4Mecanimでは揺れものなどの設定もimportしてくれるので、普通は特に設定する必要もありませんが、fbxからimportした場合は手動で設定が必要になります。
とりあえず適当に揺らしたいならUnityChanSpringBoneが良い感じに揺れるのでこれを設定してみましょう。
https://github.com/unity3d-jp/UnityChanSpringBone

手軽なところだと...UnityChanに含まれているSpringBoneが可愛く揺れてくれます。
https://assetstore.unity.com/packages/3d/characters/unity-chan-model-18705

##6.まとめ
手動でやろうとすると、手間がかかってしょうがない。1度だけ1体だけなら許容できる作業だけど、複数のモデルをimportする作業はしんどい。あとUnityにimportしたあとでmmdモデルに何らかの変更を加えたくなったりしたら、作業を最初からやり直すことになるのでしんどい。
結論、MMD4Mecanimは神。