Если коротко:
Hand tracking передаёт Unreal Engine позы суставов и состояние отслеживания через OpenXR или SDK гарнитуры. Приложение должно сглаживать измерения, обрабатывать потерю рук из поля камер и защищать жесты от ложных срабатываний. Захват и интерфейс проверяют на реальном устройстве при разных положениях кистей, освещении и взаимном перекрытии рук.
Unreal Engine hand tracking получает через OpenXR или SDK устройства, а приложение превращает суставы и статусы в устойчивый ввод.
Hand tracking позволяет использовать руки без контроллеров, но данные камеры не равны идеальной анатомической модели. Unreal Engine получает позы суставов, состояние отслеживания и иногда распознанные жесты через OpenXR либо SDK производителя. Задача приложения — превратить нестабильные измерения в предсказуемое взаимодействие.
Выберите уровень интеграции
Если нужны базовые руки на нескольких устройствах, начинайте с OpenXR hand tracking. Специфические жесты, качество mesh или системные функции могут потребовать плагин Meta, VIVE, Varjo или другого производителя.
Смешивать API без слоя абстракции опасно. Создайте собственный интерфейс HandInput, который выдаёт приложению позу, уверенность и события, независимо от источника.
Скелет и координаты
Проверьте список суставов, ориентацию осей и масштаб. Не предполагайте, что bone names совпадают между моделью персонажа и OpenXR. Сопоставление лучше хранить в отдельном asset или таблице.
Сначала визуализируйте точки и оси простыми debug-сферами. Только после правильного положения запястья и пальцев подключайте красивый mesh. Это отделяет ошибку данных от ошибки рига.
Состояние трекинга
Рука может быть видима, частично закрыта или потеряна. Не оставляйте последнюю позу навсегда: пользователь воспримет зависшую кисть как активную. Введите состояния tracked, low confidence и unavailable, а переходы сглаживайте за короткое время.
При потере руки отменяйте захват только по понятному правилу. Мгновенный сброс предмета раздражает, но бесконечное удержание создаёт ошибку состояния. Небольшой grace period часто даёт лучший результат.
Жесты и ложные срабатывания
Pinch удобно использовать как основной ввод, однако порог должен иметь гистерезис: одно значение для начала и другое для отпускания. Иначе событие дрожит около границы. Для длительного действия учитывайте время удержания.
Сложные жесты плохо работают без обучения и обратной связи. Покажите пользователю, что система распознала, и предложите альтернативу для контроллера.
Захват объектов
Не привязывайте физический предмет непосредственно к одному суставу без фильтрации. Используйте целевую позу, ограничения и логику контакта. Маленькие кнопки увеличивайте невидимой зоной попадания; рука без тактильного клика нуждается в визуальном и звуковом подтверждении.
Общие принципы взаимодействия описаны в статье взаимодействие с объектами VR в Unreal Engine.
Производительность и приватность
Данные суставов обновляются часто, но не все вычисления нужно выполнять каждый кадр для каждого пальца. Разделите визуальное обновление, распознавание жестов и игровую логику. Профилируйте на автономной гарнитуре.
Приложение обычно получает производные данные, а не произвольное видео камер, однако разрешения и политика платформы всё равно обязательны. Запрашивайте только нужные функции и объясняйте их назначение.
Матрица тестирования
- левая и правая рука;
- разные размеры и оттенки кожи;
- рука перед рукой и близко к лицу;
- слабое и контрастное освещение;
- быстрые движения;
- переход контроллеры ↔ руки;
- временная потеря и восстановление трекинга.
Итог
Надёжный hand tracking начинается не с модели кисти, а с состояний данных. Сначала проверьте суставы и координаты, затем добавьте фильтрацию, гистерезис жестов и безопасное поведение при потере руки. После этого интерфейс можно адаптировать под естественные действия, сохранив контроллер как доступную альтернативу.