Эта библиотека предназначена для упрощения процесса добавления iFacialMocap от Yasushi Emoto в проект Unity с помощью упрощенного процесса настройки через Unity Inspector.
Поток для прослушивания UDP-пакетов, которые при обработке добавляются в очередь. Другой берет из очереди и распределяет их через UnityEvents в основной поток. Это устраняет необходимость прослушивания 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 . Обратитесь к взаимодействию между объектами сцены IFMService , CharacterFaceController и примерами аватаров, используемых в сцене.
Вместо использования приложения iFacialMocap Companion iFacialMocap должен напрямую подключаться к приложению Unity.
Вы можете сделать это, открыв приложение iFacialMocap и нажав шестеренку в правой части экрана. Отсюда вы можете установить IP-адрес назначения для хоста, на котором приложение запускается в локальной сети.
По умолчанию, когда IFMService включен, он будет опрашивать порт IFM (по умолчанию) 49983 каждые 5 секунд, пока сначала не будет получен пакет. Если такой пакет получен, в iFacialMocap отправляется пакет подтверждения соединения, и в нем должно появиться уведомление о подтверждении.
Если произойдет тайм-аут, приложение будет повторять попытку каждые 5 секунд, и снова появится диалоговое окно подтверждения.
Когда IFMService выключен, прослушивание порта отключается.
Пакет IFM представляет собой готовую сборку анализируемого объекта из UDP-сообщений.
Blendshapes — содержит массив объектов BlendshapeData .Head , LeftEye , RightEye , которые являются объектами IFMTransform .Name , которое представляет собой строку, используя значения ARKit Blendshape. Примечание. Сокращения протокола _L или _R заменяются на специфичные для ARKit Left Right соответственно для обеспечения единообразия имен во всех формах смешивания.Value , представляющее собой целое число от 0 до 100. SetBlendshapeForRenderers(SkinnedMeshRenderer[]) — перебирает все предоставленные средства визуализации и применяет blendshape, где это применимо.Position — положение Vector3 относительно камеры. Этот набор есть только у головыEulerRotation — Vector3 Euler Степень вращения объекта относительно камеры.Служебный класс со статическими помощниками для более быстрого прототипирования или реализации.
ApplyBlendshapes(IFMPacket, SkinnedMeshRenderer[]) — применяет IFMPacket.Blendshapes ко всем SkinnedMeshRenderers , имеющим одинаковые Blendshapes.GetBlendshapeIndex(SkinnedMeshRenderer, string) — запускает GetBlendShapeIndex для строки, но также выполняет несколько коротких операций для пропуска всего поиска, если общая сетка равна нулю или если blendshapecount меньше 1Источник: пример проекта приложения iFacialMocap Companion.