Система отслеживания рук использует ладони и пальцы человека в качестве входных данных. Доступны данные о положении и повороте каждого пальца, всего ладоня и жестов рук. Начиная с Unreal 4.26 отслеживание рук основано на подключаемом модуле Unreal HeadMountedDisplay и использует общий API на всех платформах и устройствах XR. Функции одинаковы для систем Windows Смешанная реальность и OpenXR.
Поза руки
Поза руки позволяет отслеживать и использовать руки и пальцы пользователей в качестве входных данных, доступ к которым можно получить как в схеме, так и в C++. API Unreal отправляет данные в виде системы координат, с галками, синхронизированными с Unreal Engine.
Вы можете получить все эти данные из рук пользователя с помощью функции получения данных контроллера движения. Эта функция возвращает структуру XRMotionControllerData . Ниже приведен пример скрипта схемы, который анализирует структуру XRMotionControllerData, чтобы получить совместное расположение рук и рисует отладочную систему координат в расположении каждого сустава.
Важно проверка, если структура действительна и что это рука. В противном случае вы можете получить неопределенное поведение в доступе к позициям, поворотам и массивам радии.
Перечисление EWMRHandKeypoint описывает иерархию костей руки. Вы можете найти каждую точку ключа руки, указанную в схеме:
GetHandJointTransform можно использовать для возврата пространственных данных из руки. Данные обновляют каждый кадр, но если вы находитесь внутри кадра, возвращаемые значения кэшируются. Не рекомендуется иметь тяжелую логику в этой функции по соображениям производительности.
Ниже приведена разбивка параметров функции GetHandJointTransform:
Рука — может быть пользователем слева или правой рукой.
Ключевой точкой — кости руки.
Преобразование — координаты и ориентация основы кости. Вы можете запросить базу следующей кости, чтобы получить данные преобразования для конца кости. Специальная кость чаевых дает конец дистальности.
**Radius — радиус основания кости.
**Возвращаемое значение — true, если кости отслеживаются этот кадр, значение false, если кости не отслеживаются.
Анимация динамической связи с рукой
Позы рук предоставляются для анимации с помощью подключаемого модуля Live Link.
Если подключаемые модули Windows Смешанная реальность и Live Link включены:
Выберите окно "Прямая ссылка" > , чтобы открыть окно редактора live Link .
Выбор источника и включение источника отслеживания рук в Windows Смешанная реальность
После включения исходного ресурса и открытия ресурса анимации разверните раздел "Анимация " на вкладке "Предварительный просмотр сцены " также см. дополнительные параметры.
Иерархия анимации рук совпадает с иерархией EWMRHandKeypoint. Анимация может быть перенацеливается с помощью WindowsMixedRealityHandTrackingLiveLinkRemapAsset:
Он также может быть подклассен в редакторе:
Сетка рук
Внимание
Для сетки рук требуется OpenXR.
Необходимо использовать подключаемый модуль Microsoft OpenXR, доступный в Unreal Marketplace или GitHub.
Сетка рук в виде отслеживаемой геометрии
Внимание
Получение сетки рук в качестве отслеживаемой геометрии в OpenXR требует вызова set Use Hand Mesh with Enabled Tracking Geometry.
Чтобы включить этот режим, необходимо вызвать параметр Set Use Hand Mesh with Enabled Tracking Geometry:
Примечание.
Невозможно включить оба режима одновременно. Если включить его, другой автоматически отключается.
Доступ к данным сетки рук
Прежде чем получить доступ к данным сетки рук, вам потребуется:
Выберите ресурс ARSessionConfig, разверните Параметры AR —> параметры сопоставления мира и проверка создать данные сетки из отслеживаемой геометрии.
Ниже приведены параметры сетки по умолчанию:
Использование данных сетки для Occlusion
Создание столкновения для данных сетки
Создание сетки навигации для данных сетки
Отрисовка данных сетки в Wireframe — параметр отладки, показывающий созданную сетку
Эти значения параметров используются в качестве сетки пространственного сопоставления и по умолчанию сетки рук. Их можно изменить в любое время в схеме или коде для любой сетки.
Справочник по API C++
Используется EEARObjectClassification для поиска значений сетки рук во всех отслеживаемых объектах.
enum class EARObjectClassification : uint8
{
// Other types
HandMesh,
};
Следующие делегаты вызываются, когда система обнаруживает любой отслеживаемый объект, включая сетку рук.
class FARSupportInterface
{
public:
// Other params
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};
Убедитесь, что обработчики делегатов следуют сигнатуре функции ниже:
Чтобы работать с сетками рук в схемах, выполните приведенные далее действия.
Добавление компонента ARTrackableNotify в субъект схемы
Перейдите на панель "Сведения" и разверните раздел "События ".
Перезапись при добавлении или обновлении или удалении отслеживаемой геометрии со следующими узлами в графе событий:
Визуализация сетки рук в OpenXR
Рекомендуемый способ визуализации сетки рук — использовать подключаемый модуль XRVisualization Epic вместе с подключаемым модулем Microsoft OpenXR.
Затем в редакторе схем следует использовать функцию Set Use Hand Mesh из подключаемого модуля Microsoft OpenXR с включенной XRVisualization в качестве параметра:
Для управления процессом отрисовки следует использовать контроллер движения отрисовки из XRVisualization:
Получаются такие результаты:
Если вам нужно что-либо более сложное, например рисование сетки рук с пользовательским шейдером, необходимо получить сетки в виде отслеживаемой геометрии.
Лучи рук
Получение позы рук работает для тесных взаимодействий, таких как захват объектов или нажатие кнопок. Однако иногда необходимо работать с голограммами, которые далеко от пользователей. Это можно сделать с помощью лучей рук, которые можно использовать в качестве указателей устройств как в C++, так и в схеме. Вы можете нарисовать луч от руки к далекой точке и, с некоторой помощью от Трассировки луча Unreal, выберите голограмму, которая в противном случае будет вне досягаемости.
Внимание
Так как все результаты функции изменяют каждый кадр, они все вызываются. Дополнительные сведения о чистых и небезопасных или вызываемых функциях см. в guid пользователя Blueprint для функций.
Чтобы получить данные для лучей рук, следует использовать функцию получения данных контроллера движения из предыдущего раздела. Возвращаемая структура содержит два параметра, которые можно использовать для создания луча руки — положение цели и поворот цели. Эти параметры формируют луч, направленный локотью. Их следует взять и найти голограмму, на которую указывает.
Ниже приведен пример определения того, попадает ли луч руки в мини-приложение и задает пользовательский результат попадания:
Чтобы использовать лучи рук в схеме, выполните поиск любого из действий в Windows Смешанная реальность HMD:
Чтобы получить доступ к ним в C++, добавьте WindowsMixedRealityFunctionLibrary.h в начало вызывающего файла кода.
Перечисление
У вас также есть доступ к входным случаям в EHMDInputControllerButtons, которые можно использовать в схеме:
Для доступа в C++используйте класс перечисления EHMDInputControllerButtons :
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
Ниже приведена разбивка двух применимых случаев перечисления:
Выберите — событие select с активированным пользователем.
HoloLens 2 отслеживает пространственные жесты, что означает, что эти жесты можно записывать в качестве входных данных. Отслеживание жестов основано на модели подписки. Вы должны использовать функцию "Настройка жестов", чтобы указать устройству, какие жесты нужно отслеживать. Дополнительные сведения о жестах см. в документе holoLens 2 Basic Usage .
Затем необходимо добавить код для подписки на следующие события:
OpenXR
В OpenXR события жестов отслеживаются через входной конвейер. С помощью взаимодействия с рукой устройство может автоматически распознавать жесты касания и удержания, но не другие. Они называются сопоставлениями OpenXRMsftHandInteraction Select и Grip. Вам не нужно включить подписку, следует объявить события в Project Параметры/Engine/Input, как показано ниже.
Функцию схемы можно найти в разделе Windows Смешанная реальность Пространственные входные данные и функцию C++, добавив WindowsMixedRealitySpatialInputFunctionLibrary.h в вызывающий файл кода.
Вы можете включить и отключить захват жестов CaptureGestures с помощью функции. Если включенный жест запускает входные события, функция возвращается true , если захват жеста выполнен успешно, и false если возникает ошибка.
Если вы следуете изложенным нами инструкциям по разработке для Unreal, вы как раз прошли половину в изучении основных стандартных блоков MRTK. Отсюда вы можете перейти к следующему стандартному блоку: