Cette bibliothèque est conçue pour faciliter le processus d'ajout d'iFacialMocap de Yasushi Emoto à un projet Unity grâce à un processus de configuration simplifié via l'inspecteur Unity.
Un thread pour écoute les paquets UDP qui, une fois traités, sont ajoutés à une file d'attente. Un autre extrait de la file d'attente et les distribue via UnityEvents sur le thread principal. Cela supprime le besoin d’effectuer des écoutes UDP lors de la mise à jour de la trame.
Implémente le protocole de communication IFacialMocap dans un package plus utilisable sans l'application compagnon IFacialMocap requise.
Développé sur Unity 2018.4.33f1 Testé dans Unity 2020.3.0.
Importez le package Unity dans les versions de votre projet.
Ajoutez IFMService
à un GameObject vide dans la scène et liez une fonction de gestionnaire dans la scène qui a un argument IFMPacket
.
Un exemple de script avec le gestionnaire ferait ce qui suit
public class Example : MonoBehaviour
{
public void OnMessage(IFMPacket packet)
{
//.. Do stuff ..
}
}
Pour voir un exemple de UnityIFMLib en action, dans Example/Scene
ouvrez la scène RiggedExample
ou StaticMeshExample
. Reportez-vous aux interactions entre les objets Scene IFMService
, CharacterFaceController
et les exemples d'avatars utilisés dans la scène.
Au lieu d'utiliser l'application iFacialMocap Companion, iFacialMocap doit se connecter directement à l'application Unity.
Vous pouvez le faire en ouvrant l'application iFacialMocap et en appuyant sur l'engrenage à droite de l'écran. À partir de là, vous pouvez définir l'adresse IP de destination sur l'hôte sur lequel l'application est exécutée sur le réseau local.
Par défaut, lorsque IFMService
est activé, il interrogera le port IFM (par défaut) 49983
toutes les 5 secondes jusqu'à ce que le paquet soit d'abord reçu. Si tel est reçu, un paquet de confirmation de connexion est envoyé à iFacialMocap et un avis de confirmation devrait y apparaître.
Si un délai d'attente se produit, l'application réessayera toutes les 5 secondes et la boîte de dialogue de confirmation réapparaîtra.
Lorsque IFMService est désactivé, l'écoute du port est désactivée.
Le paquet IFM est un objet prêt à être analysé à partir des messages UDP.
Blendshapes
- Contient un tableau d'objets de BlendshapeData
.Head
, LeftEye
, RightEye
qui sont tous des objets de IFMTransform
.Name
qui est une chaîne, utilisant les valeurs ARKit Blendshape. Remarque : les raccourcis de protocole _L
ou _R
sont remplacés respectivement par Left
Right
spécifique à ARKit pour la cohérence des noms dans toutes les formes de mélange.Value
qui est un entier compris entre 0 et 100. SetBlendshapeForRenderers(SkinnedMeshRenderer[])
- Parcourt tous les moteurs de rendu fournis et applique la forme de mélange le cas échéantPosition
- Position du Vector3 par rapport à la caméra. Seule la tête a cet ensembleEulerRotation
- Vector3 Euler Degré de rotation de l'objet par rapport à la caméra.Classe utilitaire avec assistants statiques pour un prototypage ou une mise en œuvre plus rapide
ApplyBlendshapes(IFMPacket, SkinnedMeshRenderer[])
- Applique IFMPacket.Blendshapes
à tous les SkinnedMeshRenderers
qui ont les mêmes BlendshapesGetBlendshapeIndex(SkinnedMeshRenderer, string)
- exécute GetBlendShapeIndex sur une chaîne, mais effectue également quelques raccourcis pour ignorer toute la recherche si le maillage partagé est nul ou si blendshapecount est inférieur à 1Provenant de l'exemple de projet de l'application iFacialMocap Companion