tags: [vr-ar]
Реалізація голосового чату у VR іграх
Голос у VR — це не просто «кнопка говорити». Це пространственний аудіо з точки, де знаходиться аватар співрозмовника. Голос має затухати з дистанцією, відбиватися від геометрії, та звучати справа, якщо аватар стоїть справа. Без цього мультиплеєрний VR-досвід втрачає половину присутності.
Два основних SDK для VR-голосу — Vivox (Unity Gaming Services, добре інтегрується з Lobby та Relay) та Dissonance Voice Chat (незалежний пакет для Unity, працює з Photon, Mirror, NGO). Кожен має свою модель роботи, і вибір залежить від решти мережевого стеку.
Dissonance: інтеграція з Photon Fusion
Dissonance працює поверх існуючого мережевого транспорту — голосові пакети йдуть через той же канал, що й ігрові дані. Для Photon Fusion є готова інтеграція DissonanceComms + PhotonFusionCommsNetwork. Встановлюється на окремий GameObject у сцені, підключається до NetworkRunner.
Критична настройка, яку часто пропускають: VoicePlaybackOrder. За умовчанням Dissonance ставить голос у чергу й відтворює з затримкою ~100 мс для згладжування джітеру. У VR це помітно: губи аватара рухаються (якщо є lipsync), голос приходить пізніше. Потрібно знижувати MinJitterBuffer до 20–30 мс — при хорошому з'єднанні джітер мінімальний, і можна дозволити собі менший буфер.
Пространственний звук у Dissonance: на кожному VoiceReceiptTrigger (компонент на аватарі) включаємо Use Positional Data — Dissonance передає позицію джерела через Unity Audio Source. Далі працює стандартний Unity 3D Audio з AudioRolloffMode.Logarithmic, MinDistance, MaxDistance. Для VR специфічно: AudioListener знаходиться на HMD, а не на Camera.main — потрібно убезпечитися, що він переміщується разом з головою користувача.
Vivox та пространственний аудіо: нюанси
Vivox — cloud-hosted SaaS. Голос йде не через ігровий сервер, а через сервери Unity (Epic Voice Service). Це зменшує навантаження на ігрову інфраструктуру, але додає залежність від зовнішнього сервісу та latency, яку не контролюємо.
Для пространственного аудіо у Vivox використовуємо VivoxUnity.IAudioSource3D — SDK передає позицію та орієнтацію в хмару, і сервер застосовує HRTF (Head-Related Transfer Function) обробку на стороні одержувача. Це дорожче обчислювально, але якість 3D-позиціонування краще, ніж у Unity Audio Source з лінійним rolloff.
Проблема Vivox на standalone Quest: SDK вимагає активного інтернет-з'єднання та додає 50–150 мс overhead порівняно з P2P або локальним транспортом Photon. Для ігор, де голосова комунікація — ключова механіка (переговори, командні команди), це помітно.
Шумозаглушення та кодеки
Користувачі Quest говорять у вбудований мікрофон шлема в домашній обстановці — шум побутової техніки, діти, телевізор. Без шумозаглушення голос у грі буде нечистим.
Dissonance підтримує WebRTC Noise Suppressor (VAD + NS) — підключається через DissonanceComms.MicrophoneCapture. WebRTC NS добре справляється зі стаціонарними шумами (гул холодильника, фоновий шум), гірше з різкими звуками.
Кодек для голосу: Opus — стандарт де-факто. Dissonance використовує Opus за умовчанням з бітрейтом 16–32 kbps — достатньо для розбірливої мови. Збільшення до 64 kbps не дає значного покращення якості для голосу. Vivox також Opus, але бітрейт та параметри не настройюються вручну.
Зонування голосу: команди та шепіт
У іграх з кількома командами або великими просторами потрібно зонування: гравець чує тільки тих, хто рядом або в його команді. Dissonance реалізує це через Rooms — кожен гравець підписується на кімнати й говорить у конкретну.
Для механіки «шепіту» (чути тільки вплотну) та «крику» (чути на всю карту) робимо три кімнати: Proximity (radius 5м, автоматично за дистанцією), Team (тільки своя команда), Broadcast (всі). Гравець підписується на всі три як слухач, але говорить тільки в одну, переключаючи активну через UI або жест.
Переключення через жест — специфіка VR. Немає клавіатури. «Шепіт» — рука у рот (proximity detection через дистанцію від HMD до правого контролера < 15 см). «Радіо» — натискання на іконку рації на предплічч аватара через лучевий інтерактор.
Строки та оцінювання
| Варіант інтеграції | Орієнтовні строки |
|---|---|
| Dissonance + Photon Fusion, базовий пространственний звук | 3–7 днів |
| Vivox + Unity Gaming Services, зонування | 1–2 тижні |
| Кастомне зонування + жестове управління + lipsync | 2–4 тижні |
Вартість розраховується після аналізу поточного мережевого стеку та вимог щодо функціональності голосового чату.





