한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Анатомия игровых лагов › Проблемы только у части игроков

Потеря опорного снапшота Lost baseline for delta compression

ID причины pt-baseline · Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента

Открыть карточку в основной версии с иллюстрациями и экспериментами →

Если сервер отправляет «только то, что изменилось с прошлого раза», то при потере первой полной посылки (опорного снапшота) последующие изменения применить невозможно.

Почему Пакет с полными данными объекта (опорный снапшот) теряется или отбрасывается до обработки → Следствие Клиенту не к чему применять последующие изменения, и он их игнорирует → На экране Объект не виден или внезапно появляется спустя долгое время

Симптомы
Невидимки / фантомы, Телепортация
Факторы
Потери
У кого
Один из клиентов на одном ПК, Только у меня
Когда
Изредка, случайно
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента
Команда разработки: задачи
Сервер: обязательно повторять отправку опорного снапшота, пока не придёт подтверждение (ACK), формировать изменения только относительно опорного снапшота, получение которого клиент подтвердил. Клиент: отправлять подтверждение (ACK) опорного снапшота только после его фактического применения, при получении изменений для неизвестного объекта запрашивать у сервера данные заново.
На графике
Случайные всплески · число полученных изменений для неизвестных объектов
Где смотреть
Сопоставить число отброшенных клиентом изменений без опорного снапшота и ID объектов со временем, когда сервер отправил опорный снапшот этого объекта и когда получил ACK. Воспроизвести в среде разработки, добавив потери (loss в tc netem, доля потерь пакетов в эмуляции сети Unreal)
Подтверждает
Для невидимого объекта сервер отправил опорный снапшот, ACK не получил, но продолжал слать только изменения, а клиент эти изменения отбрасывал
Опровергает
Если опорный снапшот подтверждён ACK и применён на клиенте, а объекта всё равно не видно, причина в потере уведомления об исчезновении или путанице из-за повторного использования ID объектов
Чем проверить
Нужны логи и метрики игрового сервера или клиента

Источники

  1. Snapshot Compression Gaffer On Games
    Изменения нужно формировать только относительно опорного состояния (baseline), получение которого подтвердила другая сторона (ack), а начальное состояние отправлять отдельно
  2. Quake III Arena source: code/server/sv_snapshot.c id Software
    Дельта-сжатие выполняется относительно снапшота, подтверждённого клиентом, а если опорный снапшот слишком старый, отправляется полный снапшот
  3. tc-netem(8) — Linux manual page iproute2
    Инструмент для тестирования, который добавляет к исходящим пакетам задержку и джиттер (delay TIME JITTER) и потери (loss random PERCENT), имитируя реальную сеть
  4. Using Network Emulation in Unreal Engine Epic Games
    Тестирование с минимальной и максимальной задержкой и долей потерь пакетов на сервере и клиенте, в консоли задаётся, например, как NetEmulation.PktLag

Смотрите также

Тот же слой: Проблемы только у части игроков

Причины с тем же симптомом (Невидимки / фантомы) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами