MMD4Mecanimで表情を作り込む

この記事は[Oculus Rift Advent Calendar 2013](http://atnd.org/events/45316)の8日目の記事になります。

UnityでMMDモデルを表示できるようになったら、是非とも挑戦して欲しいのが表情の作り込み。
今回の記事ではMMDモデルの表情モーフとMMD4MecanimのMorphHelperの使い方を説明をしたいと思います。
（Unity4.2.2f1 + MMD4Mecanim 2013/12/03版を使用）

MMD4Mecanimとは？
============
Nora([@Stereoarts](https://twitter.com/Stereoarts))さんが公開しているUnityでMMDモデルを表示するためのツール[[Download]](http://stereoarts.jp/)です。
MMDモデルをFBX形式に変換するため、Unity上でFBXで出来ることはMMDモデルでも出来るようになり、Unity上の機能や資産が利用できるようになります。

MMD4Mecanimの導入方法や基本操作は今回は説明しませんので、キャラ付けが安定しないUnity仮面のツイートを貼っておきますね｜･ω･)つ

<blockquote class="twitter-tweet" lang="ja"><p>Oculus Rift用のVRコンテンツをたった15分で作るチュートリアル動画アップした！出すだけなら1分もかからないかもしれん。初音ミクをUnityで表示するところもあるので是非見てくれい！ <a href="http://t.co/NxA7j00n4u">http://t.co/NxA7j00n4u</a></p>&mdash; Unity仮面 (@unitymask) <a href="https://twitter.com/unitymask/statuses/391398470185005058">2013, 10月 19</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ではOculusRiftでの体験を一段引き上げるための表情を作ってみましょう。


表情モーフの操作方法
============
Assets>MMD4Mecanim>Scripts>MMD4MecanimMorphHelper.csを使用して表情モーフを操作してみます。大抵のMMDモデルが持っているであろう「照れ」モーフをONにしてみましょう。

HierarchyのMMDモデルのInspectorにスクリプトをDrga&Dropするか、Inspectorの[Add Componet]ボタンからMMD4MecanimMorphHelperを追加してください。

![131204_add_compnent.png](https://qiita-image-store.s3.amazonaws.com/0/33572/7041cd6d-6fd9-383f-4a5e-ad60d4c160a9.png "Add Compnent")

次にパラメータを設定します。

![131204_morph_helper.png](https://qiita-image-store.s3.amazonaws.com/0/33572/1ad44baa-206c-d049-9d19-f41756f73604.png)


* **Morph Speed** は小さい値だと速く、大きな値だとゆっくりと変化する指定になります。今回は一瞬で指定値にしたいので **0.01** を
* **Morph Name** は **照れ** を入力
* **Morph Weight** は **1** で

設定したら再生してみましょう。頬に赤みが表示されて健康的な感じになったかと。

![131204_morph_hoho.png](https://qiita-image-store.s3.amazonaws.com/0/33572/196d01ba-58f1-0697-7d2e-715011e5a57a.png)


かわいいですね。続きます。


目の表情を柔らかく
============
標準状態から少しモーフを操作して目の表情を柔らかくしてみましょう。オススメは「笑い」を10%～20%くらい適応することです。「まばたき」でもいいのですが、下まぶたの動きが大きいので多くのモデルで「笑い」の方がより柔らかい感じになります。

もう一つMMD4MecanimMorphHelperコンポーネントを追加します。

![131204_morph_eye_param.png](https://qiita-image-store.s3.amazonaws.com/0/33572/dafa3193-05df-bc24-6114-9967621e2d54.png)


設定したら再生してみましょう。

![131204_morph_eye.png](https://qiita-image-store.s3.amazonaws.com/0/33572/267637dc-f3b3-e90f-dc6c-a66640cab935.png)


いい感じですね。潤いのある表情になってきました。次はカメラ目線にしてみます。


「ｺｯﾁﾐﾝﾅ」モーフで自動カメラ目線
============
文章では説明が難しいのですが、MMDモデルには瞳ポリゴンを奥方向に移動させるモーフを持っているモデルが数多く存在し、目ボーンを操作すること無くある程度カメラ目線が実現できるようになっています。遠近法を逆手に取った騙し絵な感じでしょうか。

「目が合う」という状態はそれがVR空間のキャラクターであっても承認要求が満たされ脳汁が出るようで、OculusRiftならばより高い効果が期待できます。使用モデルが「ｺｯﾁﾐﾝﾅ」モーフを持っているなら是非活用して頂きたいモーフの一つです。

![131204_eye_look_param.png](https://qiita-image-store.s3.amazonaws.com/0/33572/8d89a226-7db7-1dff-3d46-7cfdae8fb5c1.png)

パラメータを設定したら再生して確認しましょう。

![131205_eye_look.gif](https://qiita-image-store.s3.amazonaws.com/0/33572/142eeada-4ac9-d0af-ba4f-96a56e08b888.gif) ※ボーン操作していません

静止画では分かりにくいのでgifアニメーションにしてみました。カメラを動かしても目線がカメラについてきます。この仕組み考えた人すごいですね。


色々なモーフを使ってみよう
============
再生中であればInspectorのMMD4Mecanim Model>Morphで表情モーフがリアルタイムに操作できます（Unity4.3では再生中でなくても操作可能になったっぽい）ので、色々な表情を試してみるとよろしいかと。あと、OculusRiftが使えるということはUnityPRO専用のImageEffectが使えます。Bloomエフェクトとかオススメです。

![131205_final.png](https://qiita-image-store.s3.amazonaws.com/0/33572/572f49ce-f35d-7039-4eca-4576a16681ab.png)

今回の説明はここまでになります。後は各自お気に入りのキャラクターとVR空間で好きなだけ見つめ合って頂ければいいんじゃないですかね？

それではみなさま良きOculusRiftライフを！(\*´Д`)b
<br/>
**使用モデル＞**よ式初音ミク：よっさん氏制作 [http://piapro.jp/t/QcRy](http://piapro.jp/t/QcRy) 
※このモデルはピアプロ・キャラクター・ライセンスに基づいてクリプトン・フューチャー・メディア株式会社のキャラクター「初音ミク」を作成したものです。


最後に
============
今回使ったMorphHelperですが、実はモーション再生中はモーフ値が上書きされてスクリプトからの表情操作が出来なかったんですよね。

出来なかったんですが…

<blockquote class="twitter-tweet" lang="ja"><p><a href="https://twitter.com/Stereoarts">@Stereoarts</a> MorphHelperを試してて思ったのですが、これvmd再生中のモーフも上書きできると嬉しい気がします。vmd再生の頂点変形に割り込むにはMMD4MecanimModel.csの_UpdateMorph()あたりに介入しないとダメですかね？( ･ω･)</p>&mdash; Segawa Yoshihisa (@mkt_) <a href="https://twitter.com/mkt_/statuses/407841853258485760">2013, 12月 3</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

90分後…

<blockquote class="twitter-tweet" lang="ja"><p>MMD4Mecanimを更新しました。BlendShapesに対応、MMD4MecanimModelの初期化最適化、MorphHelperのウェイト値のオーバーライド追加 <a href="http://t.co/mLSrjixmSE">http://t.co/mLSrjixmSE</a></p>&mdash; Nora (@Stereoarts) <a href="https://twitter.com/Stereoarts/statuses/407864853332627457">2013, 12月 3</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

**出来るようになりました！** 
**Noraさんいつも対応ありがとうございます！！**