Настройка параметров межзрачкового расстояния (IPD) в коде игр

Наша компания по разработке видеоигр ведет независимые проекты, совместно с клиентом создает игры и оказывает дополнительные операционные услуги. Опыт нашей команды позволяет нам охватить все игровые платформы и разработать потрясающий продукт, соответствующий видению клиента и предпочтениям игроков.

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Настройка параметров межзрачкового расстояния (IPD) в коде игр
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

Настройка параметров межзрачкового расстояния (IPD) в коде игр

IPD — расстояние между центрами зрачков, в среднем 63–65 мм у взрослых, но реальный диапазон от 54 до 74 мм. VR-гарнитура, не учитывающая IPD конкретного пользователя, даёт размытое изображение, двоение, головную боль уже через 15–20 минут. Настройка IPD — не опциональная фича, а базовое требование к VR-приложению.

Как IPD реализован на аппаратном и программном уровне

Большинство VR-гарнитур решают IPD физически: Quest 3 и Index имеют механическое adjustable IPD (Quest 3 — три фиксированных позиции: 58, 63, 68 мм; Index — плавная регулировка 58–70 мм). PSVR2 — программная регулировка без механического слайдера.

Программная часть: даже при правильно выставленном физическом IPD, игровой движок должен корректно позиционировать виртуальные камеры. В Unity через OVR SDK физическое IPD читается автоматически через OVRPlugin.GetFloat(OVRPlugin.BoolType.ipd) и применяется к eye offset — расстоянию между левой и правой камерой. Трогать это вручную не нужно, если не используется нестандартный camera rig.

Проблема возникает в проектах с кастомным camera rig — например, когда разработчик сделал собственный VRCameraController поверх OVRCameraRig или XRRig, и жёстко прописал eye separation = 0.064f (стандарт). Пользователь с IPD 57 мм получает некорректное стерео, испытывает глазное напряжение. Через несколько дней — негативный отзыв «у меня болят глаза».

Программное чтение и применение IPD

Для Meta Quest через OVR SDK:

float ipd = OVRPlugin.GetEyeRecommendedResolutionScale() > 0
    ? OVRPlugin.ipd
    : 0.064f; // fallback к стандарту

leftCamera.transform.localPosition = new Vector3(-ipd / 2f, 0, 0);
rightCamera.transform.localPosition = new Vector3(ipd / 2f, 0, 0);

OVRPlugin.ipd возвращает актуальное значение в метрах, считанное с датчика или из настроек системы. Обновляется динамически при изменении физического IPD (на устройствах с механической регулировкой) — рекомендуется подписаться на OVRManager.DisplayRefreshRateChanged или проверять в Update() с дросселингом раз в 0.5 секунды.

Для OpenXR (XR Interaction Toolkit): eye offset управляется через XRCameraSubsystem, который получает данные от конкретного XR Provider. Прямой доступ к IPD через UnityEngine.XR.InputDevice.TryGetFeatureValue(CommonUsages.eyesData, out Eyes eyes) — возвращает позиции обоих глаз в мировых координатах, из которых IPD вычисляется как Vector3.Distance(leftEyePos, rightEyePos).

Настройка IPD в пользовательском интерфейсе

Для PSVR2 и других гарнитур с программным IPD — нужен экран настройки в приложении. Стандартный UX: горизонтальный слайдер от 54 до 74 мм с шагом 1 мм, preview в реальном времени. Применяется через vendor-специфичный API — для PSVR2 это Unity PS VR2 Plugin с VRSamples.IPDInterop.

Тест IPD: на экране настройки показываются две вертикальные линии или кресты — одна для левого глаза, одна для правого. При правильном IPD линии воспринимаются как одна. Это стандартный техника, используемая самими производителями гарнитур.

IPD и рендеринг: влияние на глубину восприятия

IPD в коде влияет не только на физический комфорт, но и на восприятие масштаба объектов. Eye separation в движке управляет параллаксом — разницей между изображениями для левого и правого глаза. При eye separation больше реального IPD объекты кажутся меньше (эффект «macro scale»). При меньшем — больше («gigantism effect»). Это используется художественно в играх — giant scale VR намеренно уменьшает eye separation.

Для реалистичных симуляторов и обучающих VR-приложений — отклонение eye separation от реального IPD пользователя недопустимо. Точность критична.

Частая ошибка в Unity-проектах: Camera.stereoSeparation и IPD — разные вещи. stereoSeparation — программный параметр, который добавляется поверх аппаратного IPD. Если оба ненулевые, происходит двойной сдвиг. Значение Camera.stereoSeparation должно быть 0.0f в большинстве VR-проектов, если не используется намеренное художественное смещение.

Задача Ориентировочные сроки
Аудит и исправление IPD в существующем camera rig 1 рабочий день
Реализация программного IPD UI с preview 2–4 рабочих дня
Кросс-платформенный IPD layer (Quest + OpenXR + PSVR2) 1–2 недели

Стоимость определяется после анализа текущего состояния camera rig и целевых платформ.