RealsenseSDKとWEBカメラでキャラクターになりきる

前回(http://qiita.com/akihiro01051/items/3146b9a377bf360f58f5) の続き

前回はRealsenseSDKの顔認識の情報をUnityで取得する方法を説明しました．
今回は実際にキャラクターになりきるために
- ユニティちゃんモデル
- MMD4Mecanimでインポートしたモデル
の設定について説明します．

なお各モデルの頭の移動には[FinalIK($90)](https://www.assetstore.unity3d.com/jp/#!/content/14290)を利用しています．
FinalIKがなくても自力で頑張ればなんとかなると思います．

# ユニティちゃんになりきる
## 下準備
1. [ユニティちゃん](http://unity-chan.com/)と[FinalIK](https://www.assetstore.unity3d.com/jp/#!/content/14290)をインポートする．

2. Realsen SDKとWEBカメラを使うためのunitypackageをインポートする．
ここに置いておきます．[Downloads](https://www.dropbox.com/s/7tt35lnk26ufm2x/RealsenseSDK_FaceTracking.unitypackage?dl=0)
注. sampleが動作するか確認してください．

3. ユニティちゃんを動かすためのスクリプトをインポートします．[FaceUnityChan.cs](https://www.dropbox.com/s/0hv5tqx6j03trx0/FaceUnityChan.cs?dl=1)
4. UnityChan/Modelsのunitychanを新しいSceneに配置して，先ほどダウンロードしたFaceUnityChan.csをunitychanに配置します．
![unitychan_model_set.png](https://qiita-image-store.s3.amazonaws.com/0/86283/b83b71c3-35af-e143-48d9-ce1339d9d9f9.png)


## 頭の位置の設定
FinalIKを利用してモデルの頭を移動させます．
しかしFinalIKでは頭だけの移動はできないため，FullBodyBipedIKの肩の移動によって頭を移動させます．
1. Scene上にunitychanの両肩を動かすためのGameObjectを2つ配置します．
　GameObjectはunitychanの両肩付近にそれぞれ配置し，その2つのObjectの親GameObjectをtargetとして配置します．
![unitychan_set_head_target.png](https://qiita-image-store.s3.amazonaws.com/0/86283/709dd6e2-818b-1dfd-01bb-dd2f63a499d8.png)
*見やすくするために肩のGameObjectにSphereを入れてます．

2. Scripts/RootMotion.FinalIK/IK/FullBodyBipedIKをunitychanに配置します．
3. 先ほど配置したFullBodyBipedIKのLeftArmとRightArmのShoulder EffectorのTargetに両肩に配置したGameObjectをそれぞれ割り当てます．
ついでにPosition Weightも1にしておきます．

4. 最後に両肩に配置したGameObjectの親ObjectをFaceUnityChanのTargetに配置します．
![unitychan_set_unitychan_target.png](https://qiita-image-store.s3.amazonaws.com/0/86283/7567fa10-e2c1-f013-b72e-529157dad48d.png)
　* RightArmも同様に設定します．

## 頭の回転の設定
HeadまたはNeckを回転させることで頭を回転させます．
頭の位置とは別の動きになるためFinalIKは使わずに動かします．
1. 顔を向ける方向を指定するためのObjectを顔の正面に配置します．
2. 配置したObjectをunitychanのFaceUnityChanのHeadtargetに配置します．
3. 顔を動かすためにFaceUnityChanのModelheadにunitychan以下のCharacter1_Neckを配置します．
![unitychan_set_unitychan_facetarget.png](https://qiita-image-store.s3.amazonaws.com/0/86283/870985ce-7182-09a9-6cdb-b5ed898d8b90.png)


## 表情
ユニティちゃんの表情はBlendShapeにて変化させます．
unitychanのFaceUnityChanの
- EyE_skinnedにEYE_DEF
- El_skinnedにEL_DEF
- Mo_skinnedにMTH_DEF
- Br_skinnedにBLW_DEF
を追加します．
![unitychan_set_unitychan_morph.png](https://qiita-image-store.s3.amazonaws.com/0/86283/fd751dc4-6631-e67e-353b-627846142c10.png)


なりきってください．
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ユニティちゃんにもなれた <a href="https://t.co/zPyX6MwK82">pic.twitter.com/zPyX6MwK82</a></p>&mdash; アキヒロ (@akihiro01051) <a href="https://twitter.com/akihiro01051/status/704592079385591808">2016年3月1日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

# MMD4Mecanimを使ってキャラクターになりきる
基本的にはユニティちゃんと同じです．
こちらがMMD4Mecanim用のコードです．[FaceMMD.cs](https://www.dropbox.com/s/8wypcrhdqjka6he/FeceMMD.cs?dl=0)

顔の移動と回転のために空のObjectを配置した後，ユニティちゃんと同様にFaceMMDに配置していきます．
FaceMMDのModelheadに関してはjoint_Headで大丈夫だと思います．
表情に関してはFaceMMD.csの中を見て適当なものに変更してください．

![unitychan_set_mmd.png](https://qiita-image-store.s3.amazonaws.com/0/86283/2ef65daf-d471-938c-4d04-1fc83038703d.png)

動きが速すぎたりした場合には，各Objectの配置やコードの中を変更したりしていい感じの動きにしてください．

なりきってください．
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">眠い <a href="https://t.co/sbYmHbjMpS">pic.twitter.com/sbYmHbjMpS</a></p>&mdash; アキヒロ (@akihiro01051) <a href="https://twitter.com/akihiro01051/status/703998000297676800">2016年2月28日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>


# まとめ
RealsenseSDkとWEBカメラを用いてUnity上でキャラクターになりきれました．
実況動画とかに使えると楽しそうです．
3DのモデルだけでなくLive2Dなどのモデルなどにも応用できそうです．
またハンドトラッキングが行えるLeapMotionを用いることで，さらになりきり度合いが高まります．
参考(http://qiita.com/afjk/items/e2c9617e937528feba6e)


<div><img src="http://unity-chan.com/images/imageLicenseLogo.png" alt="ユニティちゃんライセンス"><p>この作品は<a href="http://unity-chan.com/contents/license_jp/" target="_blank">ユニティちゃんライセンス条項</a>の元に提供されています</p></div>