Интеграция SDK для отслеживания взгляда (Eye Tracking) в VR
Eye Tracking в VR — не просто «куда смотрит игрок». Это данные о direction gaze в мировых координатах, обновляемые со скоростью 90–120 Hz. Применений несколько: foveated rendering (рендерить дорого только там, куда смотрит глаз), интерактивность без контроллеров, аналитика внимания, NPС реакции. Каждое из применений требует разной точности и разной интеграции.
Платформы и 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 недели. Стоимость определяется после анализа требований.





