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

Система отслеживания руки в качестве входных данных использует Палмс и пальцы человека.The hand tracking system uses a person’s palms and fingers as input. Данные по положению и повороту каждого пальца доступны все жесты Palm и руки.Data on position and rotation of every finger, the entire palm, and hand gestures is available. Начиная с нереального 4,26, отслеживание выполняется на основе нереального подключаемого модуля Хеадмаунтеддисплай и использует общий API на всех платформах и устройствах XR.Starting in Unreal 4.26, hand tracking is based on the Unreal HeadMountedDisplay plugin and uses a common API across all XR platforms and devices. Функции одинаковы для систем Windows Mixed Reality и Опенкср.Functionality is the same for both Windows Mixed Reality and OpenXR systems.

РукаHand pose

Рука руки позволяет относить и использовать руки и пальцы пользователей в качестве входных данных, к которым можно получить доступ как в чертежах, так и в C++.Hand pose lets you track and use the hands and fingers of your users as input, which can be accessed in both Blueprints and C++. Нереалный API отправляет данные в виде системы координат с тактами, синхронизированными с нереальным механизмом.The Unreal API sends the data as a coordinate system, with ticks synchronized with the Unreal Engine.

Схема руки

Иерархия описана в разделе EHandKeypoint enum:The hierarchy is described by EHandKeypoint enum:

Изображение параметров руки кэйпоинт хранится

Все эти данные можно получить из руки пользователя с помощью функции получения данных контроллера движения .You can get all this data from a user’s hands using the Get Motion Controller Data function. Эта функция возвращает структуру ксрмотионконтроллердата .That function returns an XRMotionControllerData structure. Ниже приведен пример скрипта схемы, который анализирует структуру Ксрмотионконтроллердата для получения Объединенных расположений и рисует отладочную систему координат в каждом расположении соединения.Below is a sample Blueprint script that parses the XRMotionControllerData structure to get hand joint locations and draws a debug coordinate system at each joint’s location.

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

Важно проверить, является ли структура допустимой, и что она является рукой.It's important to check if the structure is valid and that it's a hand. В противном случае вы можете получить неопределенное поведение в доступе к позициям, поворотам и массивам радиусов.Otherwise, you may get undefined behavior in access to positions, rotations, and radii arrays.

Руки, доступные для анимации, используют подключаемый модуль динамической компоновки.Hand poses are exposed to Animation using the Live Link plugin.

Если включены подключаемые модули Windows Mixed Reality и Live links:If the Windows Mixed Reality and Live Link plugins are enabled:

  1. Выберите окно > активная ссылка , чтобы открыть окно редактора динамической связи.Select Window > Live Link to open the Live Link editor window.
  2. Выбор источника и включение источника отслеживания Windows Mixed RealitySelect Source and enable Windows Mixed Reality Hand Tracking Source

Источник прямой связи

После включения источника и открытия ресурса анимации раскройте раздел " анимация " на вкладке " Предварительный просмотр ". Дополнительные параметры см. здесь.After you enable the source and open an animation asset, expand the Animation section in the Preview Scene tab too see additional options.

Динамическая анимация ссылки

Иерархия анимации руки такая же, как и в EWMRHandKeypoint .The hand animation hierarchy is the same as in EWMRHandKeypoint. Анимацию можно перенацелить с помощью виндовсмикседреалитихандтраккингливелинкремапассет:Animation can be retargeted using WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Анимация прямой связи 2

Он также может быть подклассом в редакторе:It can also be subclassed in the editor:

Сопоставление активных ссылок

Сетка рукиHand Mesh

Сетка "рука" в виде отслеживающей геометрииHand Mesh as a Tracked Geometry

Важно!

Для получения сеток в качестве отслеживаемой геометрии в Опенкср необходимо вызвать set use сетчатая сетка с включенной геометрией отслеживания.Getting hand meshes as a tracked geometry in OpenXR requires you to call Set Use Hand Mesh with Enabled Tracking Geometry.

Чтобы включить этот режим, следует вызвать set use сетчатая сетка с включенной геометрией отслеживания:To enable that mode you should call Set Use Hand Mesh with Enabled Tracking Geometry:

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

Примечание

Одновременное включение обоих режимов невозможно.It’s not possible for both modes to be enabled at the same time. Если включить один, то другой автоматически отключается.If you enable one, the other is automatically disabled.

Доступ к данным сеткиAccessing Hand Mesh Data

Сетка руки

Прежде чем можно будет получить доступ к данным сетки данных, необходимо:Before you can access hand mesh data, you'll need to:

  • Выберите свой ресурс арсессионконфиг , разверните параметры AR Settings-> мирового сопоставления и установите флажок создать данные сетки из отслеживающей геометрии.Select your ARSessionConfig asset, expand the AR Settings -> World Mapping settings, and check Generate Mesh Data from Tracked Geometry.

Ниже приведены параметры сетки по умолчанию.Below are the default mesh parameters:

  1. Использование данных сетки для перекрытияUse Mesh Data for Occlusion
  2. Создать конфликт для данных сеткиGenerate Collision for Mesh Data
  3. Создать сетку навигации для данных сеткиGenerate Nav Mesh for Mesh Data
  4. Отображение данных сетки в каркасе — параметр отладки, показывающий созданную сеткуRender Mesh Data in Wireframe – debug parameter that shows generated mesh

Эти значения параметров используются в качестве сетки пространственного сопоставления и по умолчанию для сетки.These parameter values are used as the spatial mapping mesh and hand mesh defaults. Их можно изменить в любой момент в проекте или коде для любой сетки.You can change them at any time in Blueprints or code for any mesh.

Справочник по API C++C++ API Reference

Используется EEARObjectClassification для поиска значений сетки в объектах, доступных для наблюдения.Use EEARObjectClassification to find hand mesh values in all trackable objects.

enum class EARObjectClassification : uint8
{
    // Other types
    HandMesh,
};

Следующие делегаты вызываются, когда система обнаруживает любой отслеживающий объект, включая сетку типа "рука".The following delegates are called when the system detects any trackable object, including a hand mesh.

class FARSupportInterface
{
    public:
    // Other params
    DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
    DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
    DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};

Убедитесь, что обработчики делегатов следуют сигнатуре функции ниже:Make sure your delegate handlers follow the function signature below:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Доступ к данным сетки можно получить с помощью UARTrackedGeometry::GetUnderlyingMesh :You can access mesh data through the UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Справочник по API-интерфейсам схемBlueprint API Reference

Для работы с сетчатыми сетками в схемах:To work with Hand Meshes in Blueprints:

  1. Добавление компонента артраккабленотифи в проект схемыAdd an ARTrackableNotify Component to a Blueprint actor

Уведомление Артраккабле

  1. Перейдите на панель сведений и разверните раздел события .Go to the Details panel and expand the Events section.

Артраккабле уведомление 2

  1. Перезаписать для добавления, обновления или удаления отслеживаний геометрии со следующими узлами в графе событий:Overwrite On Add/Update/Remove Tracked Geometry with the following nodes in your Event Graph:

Уведомление Артраккабле

Визуализация сетки руки в ОпенксрHand Mesh visualization in OpenXR

Чтобы визуализировать сетку, рекомендуется использовать подключаемый модуль Ксрвисуализатион в ситуации с подключаемым модулем Microsoft опенкср.The recommended way to visualize hand mesh is to use Epic’s XRVisualization plugin together with the Microsoft OpenXR plugin.

Затем в редакторе схем следует использовать функцию set use сетчатой функции из подключаемого модуля Microsoft опенкср с включенной ксрвисуализатион в качестве параметра:Then in the blueprint editor, you should use Set Use Hand Mesh function from the Microsoft OpenXR plugin with Enabled XRVisualization as a parameter:

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

Для управления процессом отрисовки следует использовать контроллер движения Render из ксрвисуализатион:To manage the rendering process, you should use Render Motion Controller from XRVisualization:

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

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

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

Если вам нужно нечто более сложное, например рисовать сетку руки с помощью пользовательского шейдера, необходимо получить сетки в виде отслеживающей геометрии.If you need anything more complicated, such as drawing a hand mesh with a custom shader, you need to get the meshes as a tracked geometry.

Лучи рукHand rays

Функция руки работает для замкнутых взаимодействий, таких как извлечение объектов или нажатие кнопок.Getting hand pose works for close interactions like grabbing objects or pressing buttons. Однако иногда требуется работать с голограммами, которые находятся далеко от пользователей.However, sometimes you need to work with holograms that are far away from your users. Это можно сделать с помощью луча, которые можно использовать в качестве указывающих устройств как в C++, так и в чертежах.This can be accomplished with hand rays, which can be used as pointing devices in both C++ and Blueprints. Вы можете нарисовать луч от руки до дальнего времени и с помощью некоторой помощи от нереальной трассировки лучей выбрать голограмму, которая в противном случае будет недоступна.You can draw a ray from your hand to a far point and, with some help from Unreal ray tracing, select a hologram that would otherwise be out of reach.

Важно!

Поскольку все результаты всех функций изменяются каждый кадр, все они становятся вызываемыми.Since all function results change every frame, they're all made callable. Дополнительные сведения о чистом и нечистом или вызываемых функциях см. в статье GUID пользователя в функциях.For more information about pure and impure or callable functions, see the Blueprint user guid on functions.

Чтобы получить данные для луча, следует использовать функцию получения данных контроллера движения из предыдущего раздела.To get the data for the hand rays, you should use the Get Motion Controller Data function from the previous section. Возвращаемая структура содержит два параметра, которые можно использовать для создания руки луча — нацеленности и ротации.The returned structure contains two parameters you can use to create a hand ray – Aim Position and Aim Rotation. Эти параметры формируют луч, направленный уступом.These parameters form a ray directed by your elbow. Вы должны взять их и найти голограмму, на которую указывает.You should take them and find a hologram being pointed by.

Ниже приведен пример того, как определить, попадает ли рука-Ray в мини-приложение, и задать пользовательский результат попадания:Below is an example of determining whether a hand ray hits a Widget and setting a custom hit result:

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

ЖестыGestures

HoloLens 2 отслеживает пространственные жесты, что означает, что эти жесты можно записать в качестве входных данных.The HoloLens 2 tracks spatial gestures, which means you can capture those gestures as input. Отслеживание жестов основано на модели подписки.Gesture tracking is based on a subscription model. Используйте функцию "Настройка жестов", чтобы сообщить устройству, какие жесты необходимо отслеживанию. Дополнительные сведения о жестах можно найти в документе об использовании HoloLens 2 .You should use the “Configure Gestures” function to tell the device which gestures you want to track. You can find more details about gestures are the HoloLens 2 Basic Usage document.

Windows Mixed RealityWindows Mixed Reality

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

Затем следует добавить код для подписки на следующие события:Then you should add code to subscribe to the following events:

Снимок экрана с графическими жестами для сохранения данных на пространственном входе  в WindowsBlueprint of Windows spatial input hold, tap, and left manipulation gestures Screenshot of Windows spatial input tap gesture options in the details panel

OpenXROpenXR

В Опенкср события жестов отправляются через входной конвейер.In OpenXR, gesture events are tracked through the input pipeline. Используя взаимодействие с руки, устройство может автоматически распознать жесты касания и удерживания, но не другие.Using hand interaction, the device can automatically recognize Tap and Hold gestures, but not the others. Они именуются в виде Опенксрмсфсандинтерактион выбора и сопоставлений с захватом.They are named as OpenXRMsftHandInteraction Select and Grip mappings. Вам не нужно включать подписку, вы должны объявить события в параметрах проекта/подсистеме/входе, как в следующем:You don’t need to enable subscription, you should declare the events in Project Settings/Engine/Input, just like this:

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

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

Если вы следуете изложенным нами инструкциям по разработке для Unreal, вы как раз прошли половину в изучении основных стандартных блоков MRTK.If you're following the Unreal development journey we've laid out, you're in the midst of exploring the MRTK core building blocks. Отсюда вы можете перейти к следующему стандартному блоку:From here, you can continue to the next building block:

Или перейдите к возможностям и API платформы смешанной реальности:Or jump to Mixed Reality platform capabilities and APIs:

Вы можете в любой момент вернуться к этапам разработки для Unreal.You can always go back to the Unreal development checkpoints at any time.