このライブラリは、江本康氏による iFacialMocap を Unity プロジェクトに追加するプロセスを、Unity Inspector を介した簡略化された設定プロセスで簡単に行うように設計されています。
処理時にキューに追加される UDP パケットをリッスンするためのスレッド。もう 1 つはキューから取得し、UnityEvent を介してメインスレッドに配布します。これにより、フレーム更新時に UDP リッスンを行う必要がなくなります。
必要な IFacialMocap コンパニオン アプリを使用せずに、IFacialMocap 通信プロトコルをより使いやすいパッケージに実装します。
Unity 2018.4.33f1 で開発され、Unity 2020.3.0 でテストされました。
リリース内の Unitypackage をプロジェクトにインポートします。
シーン内の空のゲームオブジェクトにIFMService
を追加し、 IFMPacket
引数を持つシーン内ハンドラー関数をバインドします。
ハンドラーを使用したサンプル スクリプトは次のことを行います。
public class Example : MonoBehaviour
{
public void OnMessage(IFMPacket packet)
{
//.. Do stuff ..
}
}
UnityIFMLib の動作例を確認するには、 Example/Scene
でシーンRiggedExample
またはStaticMeshExample
のいずれかを開きます。 Scene オブジェクトIFMService
、 CharacterFaceController
、およびシーンで使用されるサンプル アバター間の相互作用を参照してください。
iFacialMocap Companion アプリを使用する代わりに、iFacialMocap は Unity アプリケーションに直接接続する必要があります。
これを行うには、iFacialMocap アプリを開き、画面の右側にある歯車を押します。ここから、ローカル ネットワーク上でアプリが実行されているホストに宛先 IP を設定できます。
デフォルトでは、 IFMService
が有効になっている場合、最初のパケットが受信されるまで 5 秒ごとに IFM (デフォルト) ポート49983
をポーリングします。これを受信した場合は、iFacialMocap に接続確認パケットが送信され、そこに確認通知が表示されます。
タイムアウトが発生した場合、アプリは 5 秒ごとに再試行し、確認ダイアログが再度表示されます。
IFMService がオフになると、ポートの待機は無効になります。
IFM パケットは、UDP メッセージから構築された、すぐに解析されたオブジェクトです。
Blendshapes
- BlendshapeData
のオブジェクト配列が含まれます。Head
、 LeftEye
、 RightEye
はすべてIFMTransform
のオブジェクトです。Name
。注: プロトコルの略記_L
または_R
すべてのブレンドシェイプ全体で名前の一貫性を保つために、それぞれ ARKit 固有のLeft
Right
に置き換えられます。Value
。 SetBlendshapeForRenderers(SkinnedMeshRenderer[])
- 提供されたすべてのレンダラーをループし、該当する場合はブレンドシェイプを適用しますPosition
- カメラに対する Vector3 の位置。このセットはヘッドのみですEulerRotation
- Vector3 カメラに対するオブジェクトのオイラー度回転。迅速なプロトタイピングまたは実装のための静的ヘルパーを備えたユーティリティ クラス
ApplyBlendshapes(IFMPacket, SkinnedMeshRenderer[])
- 同じブレンドシェイプを持つすべてのSkinnedMeshRenderers
にIFMPacket.Blendshapes
を適用します。GetBlendshapeIndex(SkinnedMeshRenderer, string)
- 文字列に対して GetBlendShapeIndex を実行しますが、共有メッシュが null の場合、またはブレンドシェイプカウントが 1 未満の場合に検索全体をスキップするための短縮処理も行います。iFacialMocap Companion アプリのサンプル プロジェクトから引用