Если коротко:

WebXR hand tracking запрашивают как функцию `hand-tracking` при создании immersive-сессии. После согласия пользователя совместимый браузер добавляет источники ввода с объектом XRHand; позы 25 суставов читаются из XRFrame относительно выбранного пространства. Если функция, устройство или текущий кадр не дают данные руки, интерфейс должен продолжать работать с контроллерами.

WebXR hand tracking передаёт браузерной VR-сцене позы суставов рук. Браузер проверяет устройство, запрашивает согласие пользователя и может открыть сессию без данных рук. Поэтому контроллеры остаются запасным способом управления.

Как запросить функцию

Сначала проверьте navigator.xr и поддержку режима через isSessionSupported("immersive-vr"). Затем запросите руки как необязательную функцию:

const session = await navigator.xr.requestSession("immersive-vr", {
  optionalFeatures: ["hand-tracking"]
});

optionalFeatures позволяет открыть сцену без hand input. requiredFeatures уместен, если без рук она бесполезна, но запрос может завершиться отказом. Hand tracking доступен в immersive-vr и immersive-ar, не в inline-сессии.

Что находится в XRHand

В каждом кадре переберите session.inputSources. У источника руки inputSource.hand содержит XRHand, упорядоченную карту из 25 суставов: запястье, сегменты пальцев и кончики. Для нужного XRJointSpace вызовите frame.getJointPose(joint, referenceSpace). Результат содержит transform и приблизительный radius сустава.

Поза может быть null при потере наблюдения, поэтому жест нельзя строить на старых данных. Для множества суставов предусмотрены fillPoses() и fillJointRadii().

Разрешения, проверка и fallback

W3C требует согласия на сенсорные данные при создании сессии. Наличие XRHand в MDN или JS-движке не доказывает поддержку связки браузера и гарнитуры. После запуска у входного источника должен быть hand, а XRFrame должен возвращать позы.

Сохраните обработчики select и модели контроллеров. Кнопка, захват и навигация должны работать без распознавания пальцев; при исчезновении руки интерфейс переключается на доступный XRInputSource, не блокируя сцену. База WebXR описана в статье «WebXR: что это такое», а различия суставов и жестов на уровне runtime приведены в «OpenXR hand tracking extension».

Поделиться:TelegramВКонтакте

Источники

  1. W3C — WebXR Hand Input Module Level 1
  2. Meta Horizon OS Developers — WebXR Hands
  3. MDN — XRHand