#自己紹介
こんにちはゆずです。@Yuzu_Unity
##はじめに
これを使います…これで記事は終わりです。
https://github.com/Unity-Technologies/facial-ar-remote
キズナアイが使ってるらしい?ZIPで紹介されていたみたいです(自分は見ていないので…)
にじさんじの3Dはこれを使っていのかな?
##準備物
iPhoneX/XR/XS
Mac(iOSビルドを行うため)
最終的にiPhoneの表情データを取得させたい!
Windows/Mac
##使い方
https://github.com/Unity-Technologies/facial-ar-remote/releases
releasesから使いたいところですが
iPhoneXS/XRで使える記述がver1.1ではないみたいです。
なので最新版をクローンします!!
zipでダウンロードするといろんなデータが死んでしまうみたいなので
LFSが使えるGit等でクローンしましょう。
Githubに使い方等が書いています。
iOS Build Setup
Editor Animation Setup
の欄です。
iOSビルドを行った後
Win/MacのローカルLan内での接続です。
ファイアーウォールの設定を行わないと接続できないので注意
###インストールTips
ARKit pluginの場所 BitBucket
7.Enable "ARKit Uses Facetracking" on UnityARKitPlugin > Resources > UnityARKitPlugIn > ARKitSettingsの場所
このアセットに含まれている自分のメッシュへの適用なのですがセットアップがめんどくさい…
なのでそこは触れず自分は
tmp[i]=Mathf.Clamp(skin.GetBlendShapeWeight(i),0,100);
を用い
狸?のブレンドシェイプをそのままコピーすることにしました。
あとは自分の使いたいキャラクターにSetBlendShapeWeightを行うだけです。
//目線制御 こちらもブレンドシェイプから取得しボーンに回転値を割り当てします。
void Update()
{
debugRotL = EyeRot(tmp[1], tmp[4], tmp[3], tmp[2]);
debugRotR = EyeRot(tmp[8], tmp[11], tmp[9], tmp[10]);
eyeL.localRotation = Quaternion.Euler(debugRotL);
eyeR.localRotation = Quaternion.Euler(debugRotR);
}
Vector3 EyeRot(float valueL,float valueR,float valueUp,float valueDown)
{
float left = (valueL - valueR) * 45/100/4;
float up = (valueDown - valueUp) * 45/100/4;
return new Vector3(left, up, 0);
}
Unityの地味な便利機能Constraintでコード書かずボーンに割り当て…
Mayaとの連帯機能ですが便利です。
首や頭の傾き等もこれを用い設定します。
[【Unity】複数のオブジェクトの位置を元にオブジェクトを動かす、○○○Constraint系というオモシロ機能]
(http://tsubakit1.hateblo.jp/entry/2018/01/12/233522)
##表情レコード機能
このアセットにはレコード機能など含まれていますが
自分はこちらを使うため使わないことにします。
https://qiita.com/Yuzu_Unity/items/d891ecee64a164149167
##結果
リップシンクはOVRLipSyncを用いたので今回は瞬きのみ適用しました。
iPhoneで取得するとリアル差がかなり上がります。
人間の瞬きは奥が深いものですね…
OpenCV×Dlibで行うより簡単で高精度なのでおすすめかと…