Налаштування параметрів міжзіничної відстані (IPD) у коді ігор

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

Від імерсивних застосунків до ігрових світів і 3D-сцен

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

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Налаштування параметрів міжзіничної відстані (IPD) у коді ігор
Проста
~2-3 робочих дні
Часті питання

Наші компетенції

Які етапи розробки гри?

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    685
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    866
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    492
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    534

Налаштування параметрів міжзрачкового розстояння (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 та цільових платформ.