MMD4Mecanim コンバートオプション活用のススメ

この記事は [Oculus Rift Advent Calendar 2017](http://qiita.com/advent-calendar/2017/oculus-rift) の10日目の記事になります。


MMD4Mecanimには標準では隠されているものを含め、大量のコンバートオプションが存在します。しかしながら特にドキュメントは存在せず、「○○がしたいのですが何か方法はありますか？」とか「こんな機能はありますか？」とか、作者のNoraさんに問い合わせると「それならこのオプションを試してください」とか「機能追加しました」とか、バージョンアップを重なるにつれ、じわじわオプションが増えていったという開発の歴史の詰まったものになっております。

その中で自分が把握しているVR制作に是非活用して欲しい機能をいくつか紹介したいと思います。

(Unity2.017.1.2p2 / MMD4Mecanimは20170910版で検証)

注）MMD4Mecanimを使用してMMDモデルをUnityで利用する際は、配布モデルの利用規約をよく確認してください。MMD/MMM以外での利用を制限しているMMDモデルもありますのでご注意を。また、クリプトン・フューチャー・メディア社さんの管理するキャラクターを使用する際は、[ピアプロ・キャラクター・ライセンス（PCL）](http://piapro.jp/license/pcl/summary)の範囲内で利用する必要があります。


# Advanced Modeを有効にする
MMD4Mecanim設定ファイルを選択しInspectorに右上のチェックボックスるを有効にすると普段は隠されているコンバートオプションが表示されるようになります。大量に表示され、初見の方は驚かれるかと思いますがご安心ください。そのほどんどは機能追加の際の下位互換のために残っているもので、基本デフォルトのままで使用し編集する必要はありません。

![171209_AdvancedMode.png](https://qiita-image-store.s3.amazonaws.com/0/33572/abc3bcb1-4879-c435-caa0-f38452e53468.png)
(Advanced Modeを有効にするとPMX2FBXタブに大量のオプションが、新たにRig、Animationsタブが表示されるようになります)

## アニメ調にしたい
VRコンテンツ制作において「アニメの世界に入りたい」という要望はよく聞かれるものかと思います。実際VRでアニメ調のシェーダーを使用しても思いのほか違和感がなく、(ライティングが少し特殊にはなりますが)絵作りとして是非挑戦して欲しい分野だったりします。UnityのAssetStoreにもアニメ(カートゥーン)調のシェーダーはたくさんありますが、MMD4Mecanimにも影生成を調整するパラメータが存在しますので、まずはここから試してみては如何でしょうか。

![171210_Anime.png](https://qiita-image-store.s3.amazonaws.com/0/33572/6aae24dc-d67e-4e66-8abf-dd1c03d1c105.png)
※Materialタブはモデルコンバート前は空欄になっています。オプションを操作するには一度モデルコンバートを実行する必要があります。Materialタブのパラメータは即座に反映されます(UnityのMaterialファイルが書き換わる)ので、編集後再コンバートは必要ありません(ここでの編集はUndoされませんのでご注意を)。

影の境目のグラデーション幅を狭くなるように調整することでアニメっぽい影の入り方になります。影も濃く出るようにしてあげるとそれっぽく、輪郭線はカメラとの距離を意識して調整するのが良いでしょう。VRであればカメラがかなり寄ることを想定して(輪郭線が太いとカメラが近づいた時に、右目カメラと左目カメラで生成される輪郭線が変わってしまう)、少し細めに調整したりもします。対象のMMDモデルによって数値は変わってくるのですが、以下によ式初音ミクさんでの設定例を。

- Toon Tone ... 影の境目をハッキリさせる 1 ⇒ 5
- Shadow Lum ... 影を濃くする 1.5 ⇒ 3
- Edge > Scale ... 輪郭線を細くする 1 ⇒ 0.6

またLightの向きも少し水平にしてあげると顔に入る影がそれっぽくなります。


## 発光マテリアルをセットしたい
MMD(MikuMikuDance:樋口優さん作)にはMME(MikuMikuEffect:舞力介入Pさん作)でAutoLuminous(そぼろさん作)という定番エフェクトがあり、LEDなど発光素材に光輝くエフェクトを追加することができます。AutoLuminousセットアップ済みのMMDモデルであれば、MMD4MecanimにはUnity上でEmissive扱いのマテリアルに変換してくれるオプションがあります。

![171210_MMD_AutoLuminous_.png](https://qiita-image-store.s3.amazonaws.com/0/33572/32c73ddf-0ac8-78cd-dc1d-72c70f424c1d.png)


### 事前準備) Post-processing Stackを適応してBloomを有効にする
発光マテリアルをエフェクトとして機能させるには、あらかじめUnity上でポストエフェクトのBloomをカメラ適応しておく必要があります。Unity公式が配布しているPost-processingStackを適応してBloomエフェクトをカメラに適応しておきましょう（Emissive扱いのマテリアルを光らせるにはCameraコンポーネントのAllow HDRがONである必要があります。Unity2017.1.2p2ではデフォルトでONです）。
ここではポストエフェクト適応に方法については割愛させて頂きます、詳細はUnite2017TokyoのUTJ高橋 啓治郎さんの講演(下記URL)を見てもらえるとよろしいかと。ヤバい。

- Post-processing Stack 1.0.4 unitypackage Download
https://github.com/Unity-Technologies/PostProcessing/releases

- Bloom（ブルーム） 公式ドキュメント
https://docs.unity3d.com/ja/current/Manual/PostProcessing-Bloom.html

- 【Unite 2017 Tokyo】ゲームの見た目も盛ったら変わる！！！！ヤバい！！ポストプロセス！！入門！！！！！！！！！
https://youtu.be/r5mNmH68KPQ

### コンバートオプション Material > AutoLuminousをEmissiveにする

![171210_AutoLuminousPower2.5.png](https://qiita-image-store.s3.amazonaws.com/0/33572/8a3c987d-7214-3a83-da94-bfa006fa6ac5.png)

ここでは AutoLuminous Powerを5⇒2.5にして光具合を抑えめに調整してみましたが、BloomエフェクトのパラメータやMMDモデルによって最適な値は変わりますので各自調整してもらえればと。

- Auto Luminous ... Disable ⇒ Emissive
- Auto Luminous > Power ... 光る強さ 5 ⇒ 2.5


## VRアバターモデルの頭(前髪)を非表示にしたい
HMDとトラッキングデバイスを用いてIK処理を行うことで、キャラクターモデルを着ぐるみのように中に入るVRコンテンツを作ろうとしたときに、カメラがモデルの頭の中に入ることでポリゴンの内側が見えてしまい没入が削がれるという問題があります。

VRでは目の前のキャラクタに数cmの距離まで近づくことが可能な状況があり、カメラのNearClip小さな値(1~2cm)に設定することがあります。問題対処のためにカメラのNearClipの値を大きくし、カメラに近いポリゴンを描画しないようにする方法では、キャラクターモデルに近づいた時などカメラのNearClipが目の前のモデルに刺さってポリゴンの内側が見えてしまうようになり、なかなか調整が難しかったりします。

頭のMeshのみを非表示にできるとよいのですが、大抵のモデルは頭と身体が単一のSkinnedMeshになっているため、頭だけ非表示にしたくても身体ごと非表示になってしまいます。こうなるとプレイヤーが下を向いた時は自分の身体を見せたいという状況に対応できません。
![171210_DefaultNoSplit.png](https://qiita-image-store.s3.amazonaws.com/0/33572/4aa419d2-f54c-e9e7-f2a6-c26f104fc2f1.png)

ここでSplitBone Listオプションを使用することで、指定したボーン周辺のMeshが分割され、Meshの設定が個別に行えるようになります。Layer設定を利用してカメラカリングを行ったり、頭のMeshのみを非表示にすることができるようになります。そうすることでNearClipの値は小さいままでHMDカメラのみ頭(前髪)を非表示にする(他の第三者カメラには描画される)ような処理が可能になります。
![171210_SplitMeshBone.png](https://qiita-image-store.s3.amazonaws.com/0/33572/abe06243-a3aa-2a98-efde-453bcd557609.png)

- PMX2FBXタブ > SplitMeshBone List に「頭 / No Extend」項目を追加して再コンバート(Processボタン押下)



## 物理演算を焼き付けたモーションを使用したい
物理演算の荒ぶりでスカートなどが引っかかったり、突き抜け、裏返ったりしてしまうのは物理演算的にはよくあることではありますが、キャラクターのプレゼンスの低下を引き起こしてしまうためVRコンテンツでは制作側としても避けていきたいところではあります。ダンスモーションなど決まった動きを行うものであれば、MMD互換のアプリMikuMikuMoving(Moggさん作)を用いることで事前に物理演算を焼き付け、気になるところをモーション修正することでプレゼンスが下がるボーンの動きを抑制することができます。
しかしMMD4Mecanimデフォルト設定では、剛体が設定されているボーンはモーションコンバート時に物理演算をモーションとして焼き付け処理を自動で行ってくれるため、事前に物理演算を焼き付けたボーンのモーションが上書きされてしまい、MikuMikuMovingでの焼き付け～修正後のモーションを利用することができません。そのようなモーションデータを利用するために、MMD4Mecanimコンバートによる自動物理焼き付けをOFFにするためのオプションが存在します。

検証用に2フレームで立ち⇒しゃがむモーションを作成して、意図的にスカートを破綻(突き抜け)させ、MikuMikuMovingでスカートの物理演算を焼き付け後～手作業で修正したモーションデータを作成しました。
![171210_BakedMotion.png](https://qiita-image-store.s3.amazonaws.com/0/33572/89df969a-1506-8f71-27f5-09ce03f4f1f2.png)

Default設定でモーションをコンバートすると、物理演算が再計算されUnity上でまたスカートが再度破綻してしまうのですが、Freeze Rigid Body Listに焼き付け～修正したボーンを設定することで上書きされずモーションが出力されるようになります。

![171210_FreezeRigidBody.png](https://qiita-image-store.s3.amazonaws.com/0/33572/7b43246b-5710-ec16-6d7e-83d83b87f696.png)

- Freeze Rigid Body List にモーション焼き付けを行ったスカートの一部を指定。ボーン名はよ式ミクさんの場合は以下のように感じに。
「左ｽｶｰﾄ前1」「左ｽｶｰﾄ前2」「左ｽｶｰﾄ前3」「右ｽｶｰﾄ前1」「右ｽｶｰﾄ前2」「右ｽｶｰﾄ前3」

ロングスカートなどの連なったボーンは、RecursivelyオプションをONにすることで根本のボーン一つを指定するだけでOKです。

VRでは、キャラクターにこちらを見つめてもらう処理を行うとキャラクターのプレゼンスが上がるため、首から上のボーンをスクリプトで制御し物理演算はリアルタイム処理で行うことがよくあります。この機能を応用すると、髪の毛などはリアルタイム物理演算を行い、首から下は理演算焼き付けで処理を行うようなことが可能になり、剛体が大量にあってリアルタイム物理演算がフレームレート的に厳しい場合の一つの対処法とすることができます。


## モーションキャプチャデータを使いたい
モーションキャプチャされたモーションデータは足IKを無効にして使用する必要があります。MMDのモーションデータでもモーションキャプチャによって作成されたvmdファイルを使用することがあり、そのデータをMMD4Mecanimに与えると、足IKが有効な状態でコンバートされてしまい、両足が初期位置に引っ張られるようなモーションが出力されることがあります。これはモーションの足IK用のアンカーがずっと初期位置のあるのが原因で、このオプションが実装される前はMMDモデル側を改造し、足IK機能を削除してからコンバートする必要がありました。 EnableIKオプションをOFF（デフォルトON）にすることで、モーションキャプチャデータそのままの角度が足関節に正しく反映されるようになります。

![171210_EnableIK.png](https://qiita-image-store.s3.amazonaws.com/0/33572/a5297fac-dee1-95be-95ae-e7185e2adeaf.png)



# 最後に
MMD4Mecanimには本当に大量のオプションがあります。ここで紹介できなかった(使い方を自分も知らない)ものも含め、オプションを使用することで、今まで『できない』と諦めていた表現も可能になるかもしれません。是非調査～活用してみてください。

最後に、2013年クリスマス前、11月9日にNoraさんがVRアプリ制作者の問い合わせによりアップデートしてくれた時のツイートを紹介しておきます。気が付いたらしれっと機能が増えてたりするんですよ！　ありがとうNoraさん！

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">morphOppaiはPMX2FBXのAdvancedタグをクリックするとオプション一覧に出てきます。有効にすると、変換後にモデルにモーフがひとつ追加されます。 <a href="http://t.co/mMIfKXZTgt">pic.twitter.com/mMIfKXZTgt</a></p>&mdash; Nora (@Stereoarts) <a href="https://twitter.com/Stereoarts/status/402812254480904193?ref_src=twsrc%5Etfw">2013年11月19日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<br>

それでは皆さま、よきMMD4Mecanimライフを( ･ω･)ﾉｼ
<br>


----
使用モデル＞よ式初音ミク http://piapro.jp/t/QcRy
※この記事はピアプロ・キャラクター・ライセンスに基づいてクリプトン・フューチャー・メディア株式会社のキャラクター「初音ミク」を使用したものです。