Інтеграція SDK для відслідковування взгляду (Eye Tracking) в VR
Eye Tracking в VR – не просто "куди дивиться гравець". Це дані про direction gaze у світових координатах, оновлюваних зі швидкістю 90–120 Hz. Застосувань кілька: foveated rendering (рендерити дорого тільки там, куди дивиться вічко), інтерактивність без контролерів, аналітика уваги, NPC реакції. Кожне з застосувань потребує різної точності та різної інтеграції.
Платформи та SDK
Meta Quest Pro / Quest 3 надають Eye Tracking через Meta Movement SDK (або OVRPlugin). Доступний OVREyeGaze компонент та низькорівневий OVRPlugin.GetEyeGazesState(). Точність: ±1.5–3° кутових при хорошій калібровці. Потребує явного дозволу користувача (permission dialog).
OpenXR – кроссплатформенний шлях через розширення XR_EXT_eye_gaze_interaction. В Unity через Eye Gaze Interaction в XR Interaction Toolkit 2.3+. Перевага – один код для Quest Pro, Varjo, HTC Vive Pro Eye, Pico 4 Pro.
SteamVR (Valve Index не має Eye Tracking, Tobii інтегрований у деякі PC-гарнітури) – через Tobii XR SDK з окремим Unity пакетом.
Foveated Rendering: зачем це потрібне й як підключити
На Quest 3 GPU бюджет жорсткий. Fixed Foveated Rendering (FFR) – статичний варіант: краї екрану рендерються у зменшеній роздільності, центр – у повній. Це працює, але центр фіксований.
Dynamic Foveated Rendering (EyeTracked FFR) використовує дані Eye Tracking, щоб високоякісна зона слідувала за взглядом. Meta OpenXR SDK підтримує це через XR_FB_foveation + XR_FB_foveation_vulkan розширення. В Unity – через OVRManager.eyeTrackingEnabled = true та налаштування OVRManager.fixedFoveatedRenderingLevel у взаємозв'язку з OVRPlugin.useDynamicFixedFoveatedRendering.
Пририст продуктивності: 15–25% GPU у сценах з високою навантаженням. Для Quest 3 це іноді різниця між 72 та 90 fps.
Інтерактивний взгляд: gaze selection без рук
Gaze-based interaction – вибір об'єктів взглядом. Базова реалізація:
// OpenXR через XR Interaction Toolkit
var gazeInteractor = GetComponent<GazeInteractor>();
gazeInteractor.TryGetCurrentUIRaycastResult(out RaycastResult result);
Практична складність: gaze direction трясется. Навіть при хорошій калібровці raw gaze data має високочастотний шум ±0.5–1°. Це робить targeting нестабільним – об'єкт під взглядом мерцяє selected/unselected.
Рішення: smooth gaze cursor через експоненціальний фільтр. smoothedGaze = Vector3.Slerp(smoothedGaze, rawGaze, smoothFactor * Time.deltaTime), де smoothFactor ≈ 10–15. Це убирає дрижання, зберігаючи відзивчивість.
Додатково – dwell time activation: об'єкт активується тільки якщо взгляд утримувався на ньому довше за dwellDuration (0.5–1.5 секунди). Візуальний індикатор – arc/ring навколо об'єкта, що заповнюється як progress bar.
Дозволи та приватність
Eye Tracking потребує спеціальних permissions у Meta Developer Hub. Для публікації в Meta Store – окремий policy review: програма не повинна передавати raw eye data на сервер без явного consent. В Unity потрібно обробити OVRPermissionsRequester та перевірити OVRPlugin.eyeTrackingEnabled до спроби читати дані.
Для корпоративних VR-рішень (enterprise Quest Pro) eye tracking data може використовуватися для аналітики уваги – потрібна окрема юридична документація.
Терміни інтеграції Eye Tracking: базовий gaze cursor + selection – 2–4 робочих дні; Dynamic Foveated Rendering + gaze interaction + analytics – 1–2 тижні. Вартість визначається після аналізу вимог.





