Отслеживание движения рук
Hand tracking is a technology that allows mixed reality (MR) systems to accurately detect and track the user's hand movements and finger positions in real time. By using depth sensors and computer vision algorithms, MR devices can identify the position, orientation, and articulation of each hand.Отслеживание движения рук - это технология, которая позволяет системам смешанной реальности (MR) точно определять и отслеживать движения рук пользователя и положение пальцев в режиме реального времени. Используя датчики глубины и алгоритмы компьютерного зрения, MR-устройства могут определять положение, ориентацию и артикуляцию каждой руки.
With hand tracking, users interact with virtual environments using natural gestures, such as pointing, pinching, or grabbing, mirroring how they would manipulate objects in the real world. This allows for a more intuitive and immersive user experience, reducing the learning curve and increasing the sense of presence.С помощью функции отслеживания движения рук пользователи взаимодействуют с виртуальной средой, используя естественные жесты, такие как указание, щипок или захват — так же, как они взаимодействуют с объектами в реальном мире. Это обеспечивает более интуитивно понятный и захватывающий пользовательский опыт, снижает порог вхождения и усиливает эффект присутствия.
The system continuously captures and interprets hand poses and movements in real time, providing a detailed model of the user's hand. Hand tracking supports a wide range of use cases, including user interface navigation, direct manipulation of virtual objects, and execution of gesture-based commands.Система непрерывно фиксирует и интерпретирует позы и движения рук в реальном времени, формируя детализированную модель руки пользователя. Отслеживание рук поддерживает широкий спектр сценариев: навигацию по интерфейсу, прямое взаимодействие с виртуальными объектами и выполнение команд на основе жестов.
Hand Tracking in UNIGINEОтслеживание движения рук в UNIGINE#
UNIGINE provides built-in, native support for hand tracking based on the OpenXR Standard. This allows VR applications created with UNIGINE to track user's hands and fingers in real time. The native hand tracking system supports the following OpenXR Extensions:UNIGINE предоставляет встроенную нативную поддержку отслеживания движения рук на основе стандарта OpenXR. Это позволяет VR-приложениям, созданным в UNIGINE, отслеживать движения рук и пальцев пользователя в режиме реального времени. Система нативного отслеживания рук поддерживает следующие расширения OpenXR:
- XR_EXT_hand_tracking - core extension for tracking hand joints and providing their positions and orientations.XR_EXT_hand_tracking - основное расширение для отслеживания суставов кисти и предоставления информации об их положении и ориентации.
- XR_EXT_hand_interaction - enhances the basic tracking by providing interaction-specific hand data.XR_EXT_hand_interaction - расширяет базовое отслеживание, предоставляя данные, специфичные для взаимодействия.
- XR_EXT_hand_joints_motion_range - offers additional control over the reported range of motion for joints, useful for improved realism and precision.XR_EXT_hand_joints_motion_range - предлагает дополнительный контроль над диапазоном движения суставов, что полезно для повышения реалистичности и точности.
- XR_EXT_hand_tracking_data_source - provides information about the source or method used for hand tracking data.XR_EXT_hand_tracking_data_source - предоставляет информацию об источнике или методе получения данных отслеживания рук.
This feature is integrated into the engine's VR system (no extra plugin needed) and supports any OpenXR - compatible device that offers hand tracking capabilities.Эта функция интегрирована в систему виртуальной реальности движка (дополнительный плагин не требуется) и поддерживает любое устройство, совместимое с OpenXR, которое поддерживает отслеживание рук.
When a UNIGINE VR-based application with OpenXR backend starts, the engine checks for an available OpenXR runtime provided by the user's VR device or a platform. Then the engine automatically initializes native hand tracking and retrieves all the hand related data via the OpenXR API.Когда запускается VR-приложение UNIGINE с OpenXR-бэкендом, движок проверяет наличие доступного OpenXR-рантайма, предоставляемого устройством пользователя или платформой. После этого движок автоматически инициализирует нативное отслеживание рук и получает все данные, связанные с руками, через OpenXR API.
To use hand tracking, make sure to launch the engine with the OpenXR backend:Чтобы использовать отслеживание рук, убедитесь, что движок запущен с бэкендом OpenXR:
-vr_app openxr
Native hand tracking is only available in this mode. Other VR backends (such as OpenVR or Varjo Native SDK) do not support it and require external plugins to function. In this cases, hand tracking can still be enabled through the LeapMotion or Ultraleap plugins, but only if the necessary hardware is connected.Нативное отслеживание рук доступно только в этом режиме. Другие VR-бэкенды (такие как OpenVR или Varjo Native SDK) не поддерживают эту функцию и требуют для работы внешних плагинов. В этом случае отслеживание движения рук все еще можно включить через плагины LeapMotion или Ultraleap, но только при наличии необходимого оборудования.
Note that some Varjo headsets (Varjo XR-3, VR-3, VR-2 Pro) include built-in Ultraleap sensors, but to access them, either the OpenXR runtime must be used or the Ultraleap plugin must be manually enabled in the application.Обратите внимание, что некоторые гарнитуры Varjo (Varjo XR-3, VR-3, VR-2 Pro) имеют встроенные датчики Ultraleap, но для доступа к ним необходимо использовать либо OpenXR-рантайм, либо вручную включить плагин Ultraleap в приложении.
To confirm that the required OpenXR extensions have been recognized, check the engine's startup logs or console. The following entries indicate that hand tracking and its related extensions are properly detected and initialized:Чтобы убедиться, что необходимые расширения OpenXR распознаны, проверьте логи запуска движка или консоль. Следующие записи подтверждают, что отслеживание рук и связанные с ним расширения были корректно обнаружены и инициализированы:
OpenXRExt::init(): Extension "XR_EXT_hand_tracking" found
OpenXRExt::init(): Extension "XR_EXT_hand_interaction" found
OpenXRExt::init(): Extension "XR_EXT_hand_joints_motion_range" found
OpenXRExt::init(): Extension "XR_EXT_hand_tracking_data_source" found
If none of these extensions are listed, hand tracking won't be available as its support depends on the selected OpenXR runtime. If one or more extensions are missing, certain functionality may be limited or unavailable. In such cases, the engine will try its best to emulate the missing behavior.Если ни одно из этих расширений не указано, отслеживание рук не будет доступно, так как его поддержка зависит от выбранного рантайма OpenXR. Если одно или несколько расширений отсутствуют, часть функционала может быть недоступна или ограничена. В таких случаях движок постарается эмулировать недостающее поведение.
Hand HierarchyИерархия рук#
All hand tracking data is spatially relative to the main camera (i.e. the player's HMD - head-mounted display). This means that hand positions follow the headset, when the user moves or rotates their head, the hands move accordingly in the same local tracking space. They are not positioned in world space independently of the HMD.Все данные отслеживания рук задаются в пространстве относительно основной камеры (то есть, шлема пользователя — HMD). Это означает, что положение рук следует за движением и поворотом головы пользователя — руки перемещаются в той же локальной системе отсчёта, что и шлем. Они не позиционируются в мировой системе координат независимо от HMD.
Each hand's skeletal model consists of 26 bones organized in a hierarchy under a single root. The bones include the Wrist, Palm, and Finger bones for all five fingers (thumb, index, middle, ring, little). The finger bones, except the tips, are named after the corresponding bone at the further end of the bone from the fingertips.Скелетная модель каждой руки состоит из 26 костей, организованных в иерархию под одной корневой нодой. В неё входят кости Wrist, Palm и Finger для всех пяти пальцев (большой, указательный, средний, безымянный, мизинец). Названия костей пальцев (кроме кончиков) соответствуют более удалённым от кончиков участкам.
The Wrist is considered as the root of the hierarchy for the hand - it's the point where the hand would connect to the forearm. Under the Wrist, all finger bones are arranged.Запястье (Wrist) является корнем иерархии — точкой, где кисть соединяется с предплечьем. Все кости пальцев вложены под ноду Wrist.
The Palm bone is located at the center of the middle finger's metacarpal bone, representing a convenient central point (the middle of the palm area), which can be useful for certain calculations or attaching objects to the user's hand.Кость ладони Palm расположена в центре пястной кости среднего пальца и представляет собой удобную центральную точку (середину ладони), которая может быть полезна для определенных вычислений или привязки предметов к руке пользователя.
Unlike the other fingers, the thumb lacks an intermediate phalanx, resulting in one less bone - just like in a real human hand.В отличие от других пальцев, у большого пальца отсутствует промежуточная фаланга, что делает его на одну кость меньше - как в настоящей человеческой руке.
Coordinate System OrientationОриентация системы координат#
All the hand tracking data is given in UNIGINE’s native coordinate system, which is a right-handed Cartesian coordinate system: X and Y form a horizontal plane, Z axis points up. When looking at a hand from the back (palm facing downward), the axes of each bone are aligned as follows:Все данные отслеживания рук задаются в нативной системе координат UNIGINE, которая представляет собой правостороннюю декартову систему координат: X и Y образуют горизонтальную плоскость, ось Z направлена вверх. Если смотреть на руку с тыльной стороны (ладонь вниз), то оси каждой кости ориентированы следующим образом:
- X-axis points to the leftОсь X направлена влево
- Y-axis points backwards, along the wristОсь Y направлена назад, вдоль запястья
- Z-axis points upward, out of the back of the handОсь Z направлена вверх, за пределы тыльной стороны ладони
This consistent basis orientation applies to all bones in the hand.Эта последовательная базовая ориентация применима ко всем костям кисти.
Hand Tracking APIAPI для отслеживания рук#
Hand tracking feature is accessible through a set of specialized classes in the engine's VR API. These classes provide a structured way to get hand and finger bone information, and to control debug visualization. The main classes involved are:Функция отслеживания рук реализована в виде набора специализированных классов в VR API движка. Эти классы предоставляют структурированный способ получения информации о костях рук и пальцев, а также управление режимами визуализации отладки. Основные классы:
-
VRHandTracking - The manager class for the hand tracking system. Through VRHandTracking you can access the two tracked hands and configure global settings related to hand tracking visualization.VRHandTracking - управляющий класс системы отслеживания рук. С помощью VRHandTracking осуществляется доступ к обеим отслеживаемым рукам и глобальным настройкам визуализации.
-
VRHand - This class represents a single hand (either left or right) being tracked. Each VRHand contains the set of bones (as VRBone objects) for that hand. The class also provides access to state information such as whether the hand is holding a controller or whether the controller is active. It also includes methods for querying individual bones and rendering a debug visualizer.VRHand - класс, представляющий одну отслеживаемую руку (левую или правую). Каждая VRHand содержит набор костей (в виде объектов VRBone) для этой руки. Класс также предоставляет информацию о текущем состоянии, например, удерживает ли рука контроллер и активен ли он. Также содержит методы для получения отдельных костей и отображения отладочной визуализации.
-
VRBone - This class represents a single bone in the hand’s skeletal model. Each VRBone provides the position and orientation of itself and additional information like its radius (approximate thickness) and velocity. It also includes a method for rendering a debug visualizer for the specific bone.VRBone - класс, представляющий отдельную кость в скелетной модели кисти. Каждая VRBone предоставляет информацию о своем положении и ориентации, а также дополнительную информацию, такую как ее радиус (приблизительная толщина) и скорость. Он также содержит метод для отображения отладочной визуализации для конкретной кости.
The system updates the VRBone transforms every frame in sync with the VR loop, so at any time you can query these classes to get the latest hand pose.Система обновляет трансформации всех VRBone каждый кадр синхронно с VR-циклом, поэтому вы всегда можете получить актуальное положение руки, обратившись к этим классам.
Debugging and Visualization ToolsИнструменты для отладки и визуализации#
The following console commands control the hand tracking debug visualizer. They can be entered into the Console (or set in configuration files or called via the API).Следующие консольные команды управляют режимом отладки отслеживания рук. Их можно вводить вручную через консоль (либо задать в конфигурационных файлах или вызвать через API)
Файл конфигурации: | |
---|---|
Описание:
| Аргументы: 0 - выкл. (по умолчанию) 1 - вкл. |
Файл конфигурации: | |
Описание:
| Аргументы: 0 - выкл. (по умолчанию) 1 - вкл. |
Файл конфигурации: | |
Описание:
| Аргументы: 0 - выкл. (по умолчанию) 1 - вкл. |
Файл конфигурации: | |
Описание:
| Аргументы: 0 - выкл. (по умолчанию) 1 - вкл. |
Alternative Hand Tracking PluginsАльтернативные плагины для отслеживания рук#
With the introduction of native OpenXR hand tracking, UNIGINE supports a unified and preffered approach for hand and finger tracking. However, the LeapMotion and the Ultraleap plugins are available and functional for cases where OpenXR is not an option or specific hardware configurations (such as Varjo Native SDK or OpenVR) require them.С появлением нативной поддержки отслеживания рук через OpenXR, UNIGINE предоставляет единый и предпочтительный способ отслеживания рук и пальцев. Тем не менее, плагины LeapMotion и Ultraleap по-прежнему доступны и могут использоваться в случаях, когда OpenXR недоступен или требуется специфическая конфигурация оборудования (например, при использовании Varjo Native SDK или OpenVR).
LeapMotion Plugin (Legacy)Плагин LeapMotion (устаревший)#
UNIGINE provides a plugin for the Leap Motion (now Ultraleap) hand-tracking sensor. This plugin connects to the Leap Motion Controller device and its SDK, delivering hand and finger tracking data into the engine.UNIGINE предоставляет плагин для сенсора отслеживания рук Leap Motion (теперь Ultraleap). Этот плагин подключается к устройству Leap Motion Controller и его SDK, передавая данные об отслеживании рук и пальцев в движок.
The LeapMotion plugin exposes classes such as LeapMotion Hand, LeapMotion Finger, and LeapMotion Bone to represent the tracked hand skeleton. It requires the external Leap Motion hardware and the appropriate Leap Motion SDK installed.Плагин LeapMotion предоставляет такие классы, как LeapMotion Hand, LeapMotion Finger и LeapMotion Bone, представляющие структуру скелета отслеживаемой руки. Для его работы требуется внешнее устройство Leap Motion и соответствующий Leap Motion SDK.
This plugin is considered legacy and is no longer actively maintained, as the Leap Motion hardware and SDK have been replaced ny newer Ultraleap solutions.Этот плагин считается устаревшим и больше активно не поддерживается, так как оборудование Leap Motion и SDK были заменены более новыми решениями от Ultraleap.
Ultraleap Plugin (for Specific Use Cases)Плагин Ultraleap (для специфических случаев)#
To support newer Ultraleap devices, UNIGINE includes a separate Ultraleap plugin. While OpenXR is the preferred method for hand tracking, the Ultraleap plugin remains relevant for certain configurations and use cases, especially when using Varjo Native SDK or when OpenXR-based hand tracking is not available.Для поддержки новых устройств Ultraleap в UNIGINE предусмотрен отдельный плагин Ultraleap. Несмотря на то, что OpenXR является рекомендуемым методом отслеживания рук, плагин Ultraleap остается актуальным для определенных конфигураций и сценариев использования, особенно при использовании Varjo Native SDK или когда отслеживание рук через OpenXR недоступно.
This plugin uses Ultraleap's tracking software and provides hand data via an API similar to the older Leap Motion interface.Этот плагин использует программное обеспечение отслеживания Ultraleap и предоставляет данные о руках через API, аналогичный интерфейсу старого плагина Leap Motion.
While these plugins are deprecated in favor of native OpenXR hand tracking, they are still functional and can be used with specific runtimes such as Varjo Native SDK and OpenVR.Хотя эти плагины считаются устаревшими в пользу нативного отслеживания через OpenXR, они по-прежнему функциональны и могут использоваться с определенными средами выполнения, такими как Varjo Native SDK и OpenVR.
Additionally, if you need to use a Leap Motion or Ultraleap device with OpenXR, but your current runtime does not support the XR_EXT_hand_tracking extension (or lacks full compatibility), you can configure Ultraleap's OpenXR API Layer. This layer injects or overrides the required hand tracking extensions and takes priority during runtime initialization.Кроме того, если вам нужно использовать устройство Leap Motion или Ultraleap с OpenXR, но ваша текущая среда выполнения не поддерживает расширение XR_EXT_hand_tracking (или не имеет полной совместимости), вы можете настроить OpenXR API Layer от Ultraleap. Этот слой внедряет или переопределяет необходимые расширения для отслеживания рук и имеет приоритет при инициализации во время выполнения.
Информация, представленная на данной странице, актуальна для версии UNIGINE 2.20 SDK.