Эта библиотека предназначена для упрощения процесса добавления 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.