Отслеживание рук в Unreal

Система отслеживания рук использует ладони и пальцы человека в качестве входных данных. Доступны данные о положении и повороте каждого пальца, всей ладони и жестов руки. Начиная с Unreal 4.26, отслеживание рук основано на подключаемом модуле Unreal HeadMountedDisplay и использует общий API на всех платформах XR и устройствах. Функциональные возможности одинаковы для систем Windows Mixed Reality и OpenXR.

Положение руки

Положение руки позволяет отслеживать и использовать руки и пальцы пользователей в качестве входных данных, доступ к которым можно получить как в Схемах, так и в C++. Api Unreal отправляет данные в виде системы координат с тактами, синхронизированными с Unreal Engine.

Изображение скелета руки с наложением суставовHand Skeleton

Иерархия описывается перечислением EHandKeypoint :

Изображение параметров отпечатки ключевой точки руки

Все эти данные можно получить из рук пользователя с помощью функции Получить данные контроллера движения . Эта функция возвращает структуру XRMotionControllerData . Ниже приведен пример скрипта схемы, который анализирует структуру XRMotionControllerData для получения расположений совместного расположения рук и рисует отладочную систему координат в расположении каждого соединения.

Схема функции получения данных взгляда, подключенной к трассировке линий по функции канала

Важно проверка, является ли структура допустимой и что это рука. В противном случае вы можете получить неопределенное поведение при доступе к позициям, поворотам и массивам радиусов.

Позы рук доступны для анимации с помощью подключаемого модуля Live Link.

Если включены подключаемые модули Windows Mixed Reality и Live Link:

  1. Выберите Окно > Динамическая ссылка , чтобы открыть окно редактора Live Link.
  2. Выберите Источник и включите Windows Mixed Reality источник отслеживания рук.

Источник динамической ссылки

После включения источника и открытия ресурса анимации разверните раздел Анимация на вкладке Предварительный просмотр сцены , чтобы просмотреть дополнительные параметры.

Анимация live link

Иерархия анимации рук такая же, как и в EWMRHandKeypoint. Анимацию можно перенацелить с помощью WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Анимация live Link 2

Его также можно классифицировать в редакторе:

Переназначение динамической ссылки

Сетка рук

Важно!

Для ручной сетки требуется OpenXR.

Необходимо использовать подключаемый модуль Microsoft OpenXR, доступный в Unreal Marketplace или GitHub.

Ручная сетка как отслеживаемая геометрия

Важно!

Чтобы получить сетки рук в виде отслеживаемой геометрии в OpenXR, необходимо вызвать команду Set Use Hand Mesh with Enabled Tracking Geometry.

Чтобы включить этот режим, необходимо вызвать команду Set Use Hand Mesh with Enabled Tracking Geometry (Задать использование ручной сетки с включенной геометрией отслеживания):

Схема события begin play подключена, чтобы задать использование функции сетки рук с включенным режимом отслеживания геометрии

Примечание

Невозможно включить оба режима одновременно. Если один из них включен, другой автоматически отключается.

Доступ к данным сетки рук

Сетка рук

Прежде чем получить доступ к данным сетки рук, необходимо выполнить следующие действия:

  • Выберите ресурс ARSessionConfig, разверните параметры AR Settings — World Mapping (Параметры AR —> сопоставление мира) и проверка Создать данные сетки из отслеживаемой геометрии.

Ниже приведены параметры сетки по умолчанию.

  1. Использование данных сетки для окклюзии
  2. Создание конфликтов для данных сетки
  3. Создание сетки навигации для данных сетки
  4. Отрисовка данных сетки в каркасе — параметр отладки, отображающий созданную сетку

Эти значения параметров используются в качестве сетки пространственного сопоставления и сетки рук по умолчанию. Их можно изменить в любое время в разделе Схемы или код для любой сетки.

Справочник по 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)
};

Убедитесь, что обработчики делегатов соответствуют сигнатуре функции ниже:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Получить доступ к данным сетки можно с UARTrackedGeometry::GetUnderlyingMeshпомощью :

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Справочник по API схемы

Чтобы работать с сетками рук в схемах, выполните приведенные далее действия.

  1. Добавление компонента ARTrackableNotify в субъект схемы

Уведомление ARTrackable

  1. Перейдите на панель Сведения и разверните раздел События .

Уведомление ARTrackable 2

  1. Перезапишите при добавлении, обновлении или удалении отслеживаемой геометрии следующими узлами в графе событий:

On ARTrackable Notify

Визуализация сетки рук в OpenXR

Рекомендуемый способ визуализации сетки рук — использовать подключаемый модуль XRVisualization epic вместе с подключаемым модулем Microsoft OpenXR.

Затем в редакторе схем следует использовать функцию Set Use Hand Mesh из подключаемого модуля Microsoft OpenXR с включенной XRVisualization в качестве параметра:

Схема события begin play подключена для настройки функции сетки рук с включенным режимом xrvisualization

Для управления процессом отрисовки следует использовать контроллер движения отрисовки из XRVisualization:

Схема функции получения данных контроллера движения, подключенная к функции контроллера движения отрисовки

Получаются такие результаты:

Изображение цифровой руки, наложенной на реальную человеческую руку

Если вам нужно что-то более сложное, например рисование ручной сетки с помощью пользовательского шейдера, необходимо получить сетки в виде отслеживаемой геометрии.

Лучи рук

Получение позиции руки работает для близкого взаимодействия, например захвата объектов или нажатия кнопок. Однако иногда приходится работать с голограммами, которые находятся далеко от пользователей. Это можно сделать с помощью лучей рук, которые можно использовать в качестве указывающих устройств в C++ и Blueprints. Вы можете нарисовать луч из руки в дальней точке и с помощью трассировки лучей Unreal выбрать голограмму, которая в противном случае была бы недоступна.

Важно!

Так как все результаты функции изменяют каждый кадр, все они стали вызываемыми. Дополнительные сведения о чистых и нечистых или вызываемых функциях см. в разделе Guid пользователя схемы в функциях.

Чтобы получить данные для лучей рук, следует использовать функцию Получить данные контроллера движения из предыдущего раздела. Возвращаемая структура содержит два параметра, которые можно использовать для создания луча руки: положение цели и поворот цели. Эти параметры образуют луч, направленный на локоть. Вы должны взять их и найти голограмму, на которую указывает.

Ниже приведен пример определения того, попадает ли луч руки в мини-приложение, и настройки результата пользовательского попадания:

Схема функции получения данных контроллера движения

Жесты

HoloLens 2 отслеживает пространственные жесты, что означает, что вы можете записать эти жесты в качестве входных данных. Отслеживание жестов основано на модели подписки. Используйте функцию "Настроить жесты", чтобы сообщить устройству, какие жесты вы хотите отслеживать. Дополнительные сведения о жестах см. в HoloLens 2 документе "Базовое использование".

Windows Mixed Reality

Схема воспроизведения начала события подключена к функции настройки жестов

Затем необходимо добавить код для подписки на следующие события:

Схема жестов удерживания, касания и левого ввода WindowsСнимок экрана: параметры жестов касания пространственного ввода Windows на панели сведений

OpenXR

В OpenXR события жестов отслеживаются через входной конвейер. При взаимодействии с рукой устройство может автоматически распознавать жесты касания и удержания, но не другие. Они называются сопоставлениями OpenXRMsftHandInteraction Select и Grip. Вам не нужно включать подписку, следует объявлять события в разделе Параметры проекта/Подсистема/Входные данные, как показано ниже:

Снимок экрана: сопоставления действий OpenXR

Следующий этап разработки

Если вы следуете изложенным нами инструкциям по разработке для Unreal, вы как раз прошли половину в изучении основных стандартных блоков MRTK. Отсюда вы можете перейти к следующему стандартному блоку:

Или перейдите к возможностям и API платформы смешанной реальности:

Вы можете в любой момент вернуться к этапам разработки для Unreal.