Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Система отслеживания рук использует ладони и пальцы человека в качестве входных данных. Доступны данные о положении и повороте каждого пальца, всего ладоня и жестов рук. Начиная с Unreal 4.26 отслеживание рук основано на подключаемом модуле Unreal HeadMountedDisplay и использует общий API на всех платформах и устройствах XR. Функции одинаковы для систем Windows Смешанная реальность и OpenXR.
Поза руки
Поза руки позволяет отслеживать и использовать руки и пальцы пользователей в качестве входных данных, доступ к которым можно получить как в схеме, так и в C++. API Unreal отправляет данные в виде системы координат, с галками, синхронизированными с Unreal Engine.
Иерархия описывается перечислением EHandKeypoint
:
Вы можете получить все эти данные из рук пользователя с помощью функции получения данных контроллера движения. Эта функция возвращает структуру XRMotionControllerData . Ниже приведен пример скрипта схемы, который анализирует структуру XRMotionControllerData, чтобы получить совместное расположение рук и рисует отладочную систему координат в расположении каждого сустава.
Важно проверка, если структура действительна и что это рука. В противном случае вы можете получить неопределенное поведение в доступе к позициям, поворотам и массивам радии.
Анимация динамической связи с рукой
Позы рук предоставляются для анимации с помощью подключаемого модуля 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)
};
Убедитесь, что обработчики делегатов следуют сигнатуре функции ниже:
void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)
Вы можете получить доступ к данным сетки UARTrackedGeometry::GetUnderlyingMesh
с помощью следующих методов:
UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()
Справочник по API схемы
Чтобы работать с сетками рук в схемах, выполните приведенные далее действия.
- Добавление компонента ARTrackableNotify в субъект схемы
- Перейдите на панель "Сведения" и разверните раздел "События ".
- Перезапись при добавлении или обновлении или удалении отслеживаемой геометрии со следующими узлами в графе событий:
Визуализация сетки рук в OpenXR
Рекомендуемый способ визуализации сетки рук — использовать подключаемый модуль XRVisualization Epic вместе с подключаемым модулем Microsoft OpenXR.
Затем в редакторе схем следует использовать функцию Set Use Hand Mesh из подключаемого модуля Microsoft OpenXR с включенной XRVisualization в качестве параметра:
Для управления процессом отрисовки следует использовать контроллер движения отрисовки из XRVisualization:
Получаются такие результаты:
Если вам нужно что-либо более сложное, например рисование сетки рук с пользовательским шейдером, необходимо получить сетки в виде отслеживаемой геометрии.
Лучи рук
Получение позы рук работает для тесных взаимодействий, таких как захват объектов или нажатие кнопок. Однако иногда необходимо работать с голограммами, которые далеко от пользователей. Это можно сделать с помощью лучей рук, которые можно использовать в качестве указателей устройств как в C++, так и в схеме. Вы можете нарисовать луч от руки к далекой точке и, с некоторой помощью от Трассировки луча Unreal, выберите голограмму, которая в противном случае будет вне досягаемости.
Внимание
Так как все результаты функции изменяют каждый кадр, они все вызываются. Дополнительные сведения о чистых и небезопасных или вызываемых функциях см. в guid пользователя Blueprint для функций.
Чтобы получить данные для лучей рук, следует использовать функцию получения данных контроллера движения из предыдущего раздела. Возвращаемая структура содержит два параметра, которые можно использовать для создания луча руки — положение цели и поворот цели. Эти параметры формируют луч, направленный локотью. Их следует взять и найти голограмму, на которую указывает.
Ниже приведен пример определения того, попадает ли луч руки в мини-приложение и задает пользовательский результат попадания:
Жесты
HoloLens 2 отслеживает пространственные жесты, что означает, что эти жесты можно записывать в качестве входных данных. Отслеживание жестов основано на модели подписки. Вы должны использовать функцию "Настройка жестов", чтобы указать устройству, какие жесты нужно отслеживать. Дополнительные сведения о жестах см. в документе holoLens 2 Basic Usage .
Windows Mixed Reality
Затем необходимо добавить код для подписки на следующие события:
OpenXR
В OpenXR события жестов отслеживаются через входной конвейер. С помощью взаимодействия с рукой устройство может автоматически распознавать жесты касания и удержания, но не другие. Они называются сопоставлениями OpenXRMsftHandInteraction Select и Grip. Вам не нужно включить подписку, следует объявить события в Project Параметры/Engine/Input, как показано ниже.
Следующий этап разработки
Если вы следуете изложенным нами инструкциям по разработке для Unreal, вы как раз прошли половину в изучении основных стандартных блоков MRTK. Отсюда вы можете перейти к следующему стандартному блоку:
Или перейдите к возможностям и API платформы смешанной реальности:
Вы можете в любой момент вернуться к этапам разработки для Unreal.