tags: [vr-ar]
Реализация голосового чата (VoIP) внутри 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 недели |
Стоимость рассчитывается после анализа текущего сетевого стека и требований по функциональности голосового чата.





