Esta biblioteca está diseñada para facilitar el proceso de agregar iFacialMocap de Yasushi Emoto a un proyecto de Unity con un proceso de configuración simplificado a través de Unity Inspector.
Un hilo para escuchar paquetes UDP que, cuando se procesan, se agregan a una cola. Otro toma de la cola y los distribuye a través de UnityEvents en el hilo principal. Esto elimina la necesidad de realizar escuchas UDP en la actualización del marco.
Implementa el protocolo de comunicación IFacialMocap en un paquete más utilizable sin la aplicación complementaria IFacialMocap requerida.
Desarrollado en Unity 2018.4.33f1 Probado en Unity 2020.3.0.
Importe el paquete Unity en las versiones a su proyecto.
Agregue IFMService
a un GameObject vacío en la escena y vincule una función de controlador en la escena que tenga un argumento IFMPacket
.
Un script de ejemplo con el controlador haría lo siguiente
public class Example : MonoBehaviour
{
public void OnMessage(IFMPacket packet)
{
//.. Do stuff ..
}
}
Para ver un ejemplo de UnityIFMLib en acción, en Example/Scene
abra la escena RiggedExample
o StaticMeshExample
. Consulte las interacciones entre los objetos de escena IFMService
, CharacterFaceController
y los avatares de ejemplo utilizados en la escena.
En lugar de utilizar la aplicación iFacialMocap Companion, iFacialMocap debería conectarse directamente a la aplicación Unity.
Puede hacer esto abriendo la aplicación iFacialMocap y presionando el engranaje a la derecha de la pantalla. Desde aquí puede configurar la IP de destino para el host donde se ejecuta la aplicación en la red local.
De forma predeterminada, cuando IFMService
está habilitado, sondeará el puerto IFM (predeterminado) 49983
cada 5 segundos hasta que se reciba el paquete por primera vez. Si se recibe, se envía un paquete de confirmación de conexión a iFacialMocap y debería aparecer un aviso de confirmación en él.
Si se agota el tiempo de espera, la aplicación volverá a intentarlo cada 5 segundos y aparecerá nuevamente el cuadro de diálogo de confirmación.
Cuando IFMService está desactivado, la escucha del puerto está desactivada.
El paquete IFM es una compilación de objetos ya analizada a partir de mensajes UDP.
Blendshapes
: contiene una matriz de objetos de BlendshapeData
.Head
, LeftEye
, RightEye
, todos ellos objetos de IFMTransform
.Name
que es una cadena, utilizando los valores de ARKit Blendshape. Nota: las abreviaturas del protocolo _L
o _R
se reemplazan con Right
Left
específica de ARKit, respectivamente, para la coherencia de los nombres en todas las formas de combinación.Value
que es un int de 0 a 100. SetBlendshapeForRenderers(SkinnedMeshRenderer[])
: recorre todos los renderizadores proporcionados y aplica la forma de mezcla cuando corresponda.Position
: posición del Vector3 relativa a la cámara. Sólo la cabeza tiene este conjunto.EulerRotation
- Vector3 Euler Grado de rotación del objeto en relación con la cámara.Clase de utilidad con ayudas estáticas para una implementación o creación de prototipos más rápida
ApplyBlendshapes(IFMPacket, SkinnedMeshRenderer[])
: aplica IFMPacket.Blendshapes
a todos los SkinnedMeshRenderers
que tienen los mismos BlendshapesGetBlendshapeIndex(SkinnedMeshRenderer, string)
: ejecuta GetBlendShapeIndex en una cadena, pero también realiza algunas operaciones breves para omitir toda la búsqueda si la malla compartida es nula o si blendshapecount es menor que 1Procedente del proyecto de ejemplo de la aplicación iFacialMocap Companion