This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Браузер SDK 2
Лицензирование и типы лицензий
Дополнения (Add-Ons)
Демонстрационные проекты
API Samples
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
Справочник API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

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

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.

Примечание
In the OpenXR Specification, tracked hand elements are referred to as joints. In UNIGINE, these elements are called bones, consistent with the VRBone class used in API. Conceptually, each bone corresponds to a tracked joint defined by XR_EXT_hand_tracking.В спецификации OpenXR отслеживаемые элементы кисти называются суставами (joints). В UNIGINE эти элементы называются костями (bones) в соответствии с классом VRBone, используемым в API. Концептуально, каждая кость соответствует отслеживаемому суставу, определяемому параметром XR_EXT_hand_tracking.

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.В отличие от других пальцев, у большого пальца отсутствует промежуточная фаланга, что делает его на одну кость меньше - как в настоящей человеческой руке.

Примечание
The bone structure in the native OpenXR system differs from that used in the Ultraleap plugin.Структура костей в нативной системе OpenXR отличается от структуры, используемой в плагине Ultraleap.

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 API
API для отслеживания рук#

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)

vr_hand_tracking_visualizer_enabledФайл конфигурации: *.boot
Описание:
  • Переменная.   Отображает значение показывающее, включена ли опция, контролируемая описанной ниже командой.
  • Команда.   Переключает value indicating if the visualizer for hands is enabled. This option requires the visualizer mode to be enabled.
Аргументы:
0 - выкл. (по умолчанию)
1 - вкл.
vr_hand_tracking_show_basisФайл конфигурации: *.boot
Описание:
  • Переменная.   Отображает значение показывающее, включена ли опция, контролируемая описанной ниже командой.
  • Команда.   Переключает value indicating if the visualizer for the basis of each hand bone is enabled. This option requires the hand visualizer to be enabled.
Аргументы:
0 - выкл. (по умолчанию)
1 - вкл.
vr_hand_tracking_show_bone_sizesФайл конфигурации: *.boot
Описание:
  • Переменная.   Отображает значение показывающее, включена ли опция, контролируемая описанной ниже командой.
  • Команда.   Переключает value indicating if the visualizer for the size of each hand bone is enabled. This option requires the hand visualizer to be enabled.
Аргументы:
0 - выкл. (по умолчанию)
1 - вкл.
vr_hand_tracking_show_velocityФайл конфигурации: *.boot
Описание:
  • Переменная.   Отображает значение показывающее, включена ли опция, контролируемая описанной ниже командой.
  • Команда.   Переключает value indicating if the visualizer for the velocity vectors of each hand bone is enabled. This option requires the hand visualizer to be enabled.
Аргументы:
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.

Последнее обновление: 19.05.2025
Build: ()