Поделиться через


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

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

Поза руки

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

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

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

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

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

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

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

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

Если подключаемые модули Windows Смешанная реальность и Live Link включены:

  1. Выберите окно "Прямая ссылка" > , чтобы открыть окно редактора live Link .
  2. Выбор источника и включение источника отслеживания рук в Windows Смешанная реальность

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

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

Анимация динамического канала

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

Анимация динамического канала 2

Он также может быть подклассен в редакторе:

Переназначение канала в режиме реального времени

Сетка рук

Внимание

Для сетки рук требуется 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 —> параметры сопоставления мира и проверка создать данные сетки из отслеживаемой геометрии.

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

  1. Использование данных сетки для Occlusion
  2. Создание столкновения для данных сетки
  3. Создание сетки навигации для данных сетки
  4. Отрисовка данных сетки в 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)
};

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

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

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

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лучи рук

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

Внимание

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

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

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

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

Жесты

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

Windows Mixed Reality

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

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

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

OpenXR

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

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

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

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

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

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