Настройка трекінгу рук та жестів в AR-іграх
Коли користувач бачить свої реальні руки поверх AR-контенту і може взаємодіяти з віртуальними об'єктами без контролерів — це інший рівень занурення. Але під капотом це одна з найбільш технічно нетривіальних задач в AR-розробці: відстеження 21 точки на кожній руці в реальному часі, розпізнавання жестів з неперервного потоку поз, і все це при змінюючомуся освітленню, частковому перекритті рук та русі пристрою.
Апаратна та програмна основа
Для мобільного AR (iOS/Android) основний шлях — AR Foundation з XRHandSubsystem, поданий у AR Foundation 5.x. На iOS під капотом використовується ARKit Hand Tracking (доступний з iPhone X на A12 та новіше), на Android — ARCore, але з важливим обмеженням: ARCore не має вбудованого hand tracking в основному SDK. Для Android hand tracking потрібно або використовувати пристрій з підтримкою Qualcomm Snapdragon Spaces, або інтегрувати сторонні рішення — MediaPipe Hands (працює через plugin або нативну інтеграцію) або XR Hands package від Unity з користувацьким провайдером.
Для шолемів без контролерів: Meta Quest 2/3 — через компоненти OVR Hand з Meta XR SDK або через OpenXR Hand Tracking Extension (XR_EXT_hand_tracking). Другий шлях кращий для крос-платформних проектів — один код працює на Quest, Pico, HoloLens 2 без умовної компіляції під кожен SDK.
HoloLens 2 — через Microsoft Mixed Reality Toolkit (MRTK3), який забезпечує абстракцію над WMR hand tracking та вже включає готові компоненти для pinch, grab, poke-взаємодій.
Чому розпізнавання жестів складніше, ніж здається
Розпізнавання жестів — це не просто «перевірити, сжата ли долоня». Це класифікація часового паттерну поз з урахуванням переходних станів та шуму відстеження.
Проблема перша: дрижання суглобів. Навіть нерухома рука дає коливання позицій суглобів на ±2–5 мм через шум сенсора. Якщо перевіряти жест «щипок» (pinch) за raw-позиціями великого та указного пальця — триггер будуть спрацьовувати випадково. Рішення: low-pass фільтр на позиції кожного суглоба (Kalman filter або простий exponential moving average з alpha ≈ 0.3–0.5) перед класифікацією.
Проблема друга: гістерезис порогу. Один поріг для входу і виходу зі стану жесту — шлях до миготіння стану. Правильно: поріг для активації жесту (наприклад, pinch_distance < 15 мм), і окремий, ширший поріг для дезактивації (pinch_distance > 25 мм). Це стандартна техніка, але часто забувається.
Проблема третя: часова послідовність. Жест повинен утримуватися мінімум N кадрів (зазвичай 3–5 при 30 fps) перед тим, як вважатися розпізнаним. Це фільтрує випадкові збіги при переходах між позами.
У XR Interaction Toolkit з XR Hands package є компоненти HandShape та GestureDetector, які реалізують частину цієї логіки. Але для нестандартних жестів (наприклад, «намалювати коло в повітрі» або «подвійний щипок») потрібна користувацька логіка — скінченний автомат або sequence recognizer з часовими вікнами.
Інтеграція трекінгу рук з ігровими об'єктами
Після налаштування трекінгу потрібно привязати руки до ігрової логіки. Типові взаємодії в AR: near interaction (торкнутися/натиснути об'єкт рукою) та far interaction (ray з долоні або пальця).
Для near interaction ключовий компонент — правильне налаштування Poke Interactor з MRTK або користувацький колайдер на кінчику пальця з isTrigger = true. Головна проблема: швидкість переміщення кінчика пальця при швидкому русі може бути такою, що за один кадр він переміщується на 5–10 см, проходячи крізь тонкі об'єкти без спрацювання триггера. Рішення: sweep test (SphereCast вздовж вектору руху пальця) замість простого колайдера.
Для AR-ігор на мобільних пристроях важливо враховувати, що рука періодично виходить з поля зору камери. Потрібно реалізувати graceful degradation: при втраті трекінгу руки перервати поточну взаємодію коректно, а не залишати об'єкт «зависшим» у повітрі з останньою відомою позиціонуванням.
Етапи настройки
Починаємо з вибору SDK під цільові платформи та пристрої. Це визначає 80% подальшої архітектури.
Потім настройка базового hand tracking: імпорт суглобів, візуалізація скелета для отладки, перевірка якості відстеження на цільових пристроях при різних умовах освітлення.
Далі: реалізація жестів (починаючи з pinch як базового interaction trigger), інтеграція з interactable-об'єктами, тонка настройка фільтрів та порогів.
Фінальний етап — тестування на реальних користувачах. Жоден розробник не передбачить всі варіанти того, як люди тримають руки.
| Задача | Орієнтовні терміни |
|---|---|
| Базовий hand tracking (pinch + grab) | 1–2 тижні |
| Користувацький набір жестів (5–10 жестів) | 2–4 тижні |
| Повна система взаємодії без контролерів | 4–8 тижнів |
Вартість розраховується після аналізу платформ та необхідних взаємодій.





