Техніки ефективної синхронізації VR-аватарів на сервері

Ми налаштовуємо серверну синхронізацію VR-аватарів — від базових трансформів до складних колізій. Позиції рук і голови оновлюються 72–120 разів на секунду; без оптимізації трафік на 8 гравців сягає 50–100 KB/s лише на позиції. Мережева синхронізація VR потребує ретельного налаштування, а досягти пла

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

Інші послуги студії

VR/AR/MR застосунки на замовлення

Вражайте клієнтів і навчайте команду у віртуальній реальності

Розробка ігор на Unity

Від ідеї до релізу — ігри, які запам'ятовуються

3D-моделювання та анімація

Оживимо ваш продукт в об'ємній графіці та анімації

VR-тренажери промислового обладнання

Тренуємо операторів на техніці без ризику і простою

AR-інструкції для виробництва

Покрокові підказки прямо на обладнанні — без паперу

Safety-тренажери

Відпрацювання НС і техніки безпеки без виходу на об'єкт

VR/AR-тренінги

Навчаємо персонал сервісу, адаптації та soft skills у VR

Навчальні вікторини

Перевірка знань у форматі гри — легко і без стресу

Корпоративні відеоінструкції

Зрозумілі ролики для навчання співробітників і клієнтів

Гейміфікація бізнес-процесів

Мотивуємо команду через ігрові механіки в KPI та HR

Застосунки для інфокіосків

Інтерактивні екрани для магазинів, стендів і офісів

VR/AR-інсталяції

Wow-ефект для брендів на виставках, івентах і в шоу-румах

Віртуальні виставки та музеї

Ваша експозиція доступна з будь-якої точки світу — 24/7

Event-квести та брендовані ігри

Незабутні ігри для конференцій та клієнтських івентів

Часті запитання

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

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    1504
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    1006
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    635
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    716
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Навчальна вікторина для дітей «Покупки в магазині»
    95

Ми налаштовуємо серверну синхронізацію VR-аватарів — від базових трансформів до складних колізій. Позиції рук і голови оновлюються 72–120 разів на секунду; без оптимізації трафік на 8 гравців сягає 50–100 KB/s лише на позиції. Мережева синхронізація VR потребує ретельного налаштування, а досягти плавної синхронізації без перевантаження мережі можна за допомогою ключових технік: Dead Reckoning, квантування, авторитетний сервер. Наша команда має 10+ років досвіду в геймдеві, 50+ реалізованих VR-проєктів та сертифікацію Unity і Photon. Ми надаємо гарантію на працездатність рішення протягом 30 днів після деплою. Вартість базової синхронізації — від 500$, повний пакет з оптимізацією — від 1200$.

Як працює Dead Reckoning для рук?

Техніка Dead Reckoning прийшла з морської навігації та авіасимуляторів. Для VR-аватарів вона працює так: замість позиції на кожен фрейм клієнт відправляє позицію + швидкість + кутову швидкість. Отримувач екстраполює наступну позицію на основі останнього відомого стану + фізичної моделі руху. Коли приходить наступний пакет — звіряємо з передбаченою позицією та коригуємо. Порівняно з відправкою кожного фрейму, Dead Reckoning дозволяє передавати дані в 5-10 разів рідше, що знижує частоту відправки на 70-90%.

У Photon Fusion це реалізується через кастомний NetworkBehaviour з [Networked] властивостями для позиції, ротації та похідних. Interpolation та Extrapolation налаштовуються в NetworkTransform через InterpolationDataSource:

  • Predicted — клієнт-авторитетне передбачення, мінімальна сприймана затримка для локального гравця
  • Interpolated — із затримкою, але гладко для remote гравців
  • Auto — Fusion обирає сам залежно від State Authority

Для рук VR принципово важливо, що Predicted режим застосовується лише до StateAuthority об'єкта. Віддалені руки завжди інтерполюються, і затримка неминуча — питання в тому, наскільки гладко вона ховається.

Що таке квантування та дельта-кодування?

Позиція руки у VR займає 3 × float32 = 12 байт. Ротація у вигляді кватерніона — 4 × float32 = 16 байт. Разом 28 байт на одну руку, 56 на дві + 28 на голову = 84 байти на гравця без урахування заголовків. Квантування знижує це до 15–20 байт на гравця — у 4–5 разів менше початкового розміру, що в 4-5 разів краще за некомпресовану передачу. Позиція в робочій зоні VR (3×3×3 м) з точністю 1 мм кодується в 15 бітів на вісь. Ротація через стиснутий кватерніон (три компоненти, четвертий відновлюється) — 10 бітів на компонент.

У Photon Fusion квантування вмикається через NetworkTransform.Precision та RotationPrecision. Для кастомних даних використовуємо INetworkStruct з ручним квантуванням через BitStream.

Дельта-кодування — наступний рівень: передаємо лише зміну відносно попереднього стану. Рука, яка не рухалася (гравець тримає об'єкт нерухомо), відправляє майже нульову дельту, яка компресується до кількох біт. На практиці для VR це дає 30–60% зниження трафіку порівняно з повними позиціями кожен тік, і є в 2-3 рази ефективніше за звичайне квантування.

Клієнтська чи серверна авторитетність: що обрати?

Це архітектурний вибір з прямими наслідками для геймплею. Клієнтська авторитетність для рук — позиція приймається як є від клієнта — мінімальна затримка, максимальна чуйність. Але відкриває можливість для читів: клієнт може надсилати «руку» в позицію, куди фізично неможливо дотягнутися.

Серверна авторитетність — сервер валідує кожне переміщення руки проти фізичних обмежень (максимальна швидкість, зона досяжності від торса) — стійка до читів, але вимагає RTT-компенсації для відчуття чуйності. Для VR-ігор без змагальної складової (спільний досвід, кооперативи) — клієнтська авторитетність з базовою серверною валідацією аномалій. Для змагальних VR — серверна авторитетність з агресивним клієнтським передбаченням та rollback.

Параметр Клієнтська авторитетність Серверна авторитетність
Затримка Мінімальна Вища, потребує компенсації
Захист від читів Низька Висока
Де застосовувати Кооператив, синглплеєр Змагальні, PvP
Деталі реалізації квантування в Photon Fusion Для ручного квантування використовуйте `INetworkStruct` з полями типу `byte`, `short` або кастомними структурами. Наприклад, позицію можна упакувати в три `short` (15 біт + знак) і розпакувати через `BitStream.Read/Write`. Ротацію — через три `ushort` по 10 біт, відновлюючи четвертий компонент. Такий підхід дає максимальний контроль над точністю та трафіком.

Як ми вирішували проблему розсинхронізації рукостискання: кейс з практики

Наш клієнт — студія, що розробляє соціальний VR-простір, — зіткнулася з проблемою: гравці «тиснуть руки», але при RTT 80–120 мс позиції розходилися на 5–12 см. Рукостискання виглядало як порожній жест у повітрі.

Рішення: спеціальний snap-протокол. Коли одна рука входить у колайдер іншої (перевіряється на сервері), сервер повідомляє обох клієнтів про подію захоплення. Обидва клієнти переходять у режим anchor: один стає ведучим, другий — веденим. Ведений інтерполює свою позицію до ведучої з Lerp по 80 мс. Візуально — плавне з'єднання без телепортації.

Відповіді на поширені запитання

Що таке Dead Reckoning і як він застосовується для синхронізації рук у VR? Dead Reckoning — техніка передбачення позиції на основі останнього відомого стану та швидкості. У VR-синхронізації клієнт відправляє позицію та швидкість, отримувач екстраполює рух, а при отриманні нового пакета коригує. Це знижує частоту відправки даних без втрати плавності.

Які методи компресії використовуються для передачі трансформів у мультиплеєрних VR-іграх? Основні методи — квантування (стиснення float32 до меншої кількості біт) та дельта-кодування (передача лише змін). Квантування позиції в робочій зоні VR до 15 біт на вісь, ротації до 10 біт на компонент. Дельта-кодування дає додаткову економію 30–60% трафіку.

Чи варто використовувати клієнтську чи серверну авторитетність для синхронізації рук? Клієнтська авторитетність дає мінімальну затримку, але вразлива до читів. Серверна авторитетність стійка до злому, але вимагає компенсації затримки. Для кооперативних VR-ігор достатньо клієнтської з базовою валідацією, для змагальних — серверна з передбаченням і rollback.

Як вирішити проблему розсинхронізації рук при взаємодіях (наприклад, рукостискання) у VR? У таких сценаріях використовується snap-протокол: сервер визначає момент контакту та переводить один з об'єктів у режим веденого з інтерполяцією до ведучого (Lerp ~80 мс). Це забезпечує плавне з'єднання без телепортації.

Які терміни розробки типової серверної синхронізації для VR-гри? Базова синхронізація трансформів на Photon Fusion або Netcode займає 1–2 тижні. Оптимізація трафіку (квантування, дельта-кодування) додає 3–5 днів. Реалізація авторитетного сервера з rollback — 3–6 тижнів. Кастомні інтерактивні механіки — від 1 до 3 тижнів додатково.

Що входить у роботу з налаштування?

Ми постачаємо повний комплект:

  • Аналіз поточної мережевої архітектури та виявлення вузьких місць
  • Проектування кастомного NetworkBehaviour під ваші механіки
  • Реалізація з використанням квантування та дельта-кодування
  • Навантажувальне тестування з симуляцією 100+ гравців
  • Документація з підтримки та подальшого доопрацювання
  • Підтримка протягом місяця після деплою, гарантія на працездатність — 30 днів

Процес роботи: покроково

  1. Аналітика — вивчаємо поточне мережеве рішення, заміряємо трафік, визначаємо вимоги до точності та затримки.
  2. Проектування — обираємо архітектуру (клієнтська/серверна авторитетність), визначаємо схему стиснення.
  3. Реалізація — пишемо код: кастомні NetworkBehaviour, квантування, дельта-кодування, snap-протокол при необхідності.
  4. Тестування — перевіряємо на різних RTT (20–200 мс), вимірюємо FPS budget, навантаження на сервер.
  5. Деплой — викочуємо на продакшн, налаштовуємо моніторинг (логіювання затримок, помилок синхронізації).

Орієнтовні терміни

Тип задачі Терміни
Базова синхронізація трансформів (Photon Fusion / Netcode) 1–2 тижні
Оптимізація трафіку (квантування + дельта) +3–5 днів
Авторитетний сервер з rollback 3–6 тижнів
Кастомні взаємодії (захоплення, рукостискання) +1–3 тижні

Вартість базової синхронізації — від 500$, повний пакет з оптимізацією — від 1200$. Отримайте консультацію — і ми підберемо оптимальне рішення під ваш бюджет.