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

Анатомия игровых лагов › Архитектура синхронизации

Воспроизведение сразу по приходу без меток времени Events played on arrival (no timestamps)

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

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

Если сервер не прикрепляет к событиям время, когда они произошли, а клиент проигрывает их сразу при получении, сетевой джиттер напрямую сбивает тайминг анимаций.

Почему События «начало атаки», «запуск эффекта» выполняются сразу по приходу → Следствие У каждого пакета своё время доставки, и интервалы скачут → На экране Серия атак то ускоряется, то замедляется, тайминг паттернов босса каждый раз разный

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

Источники

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    К каждому обновлению прикрепляется серверное время, и объект рисуется в позиции на момент «текущее время минус время интерполяции (100 ms)»
  2. Snapshot Interpolation Gaffer On Games
    Если рисовать снапшоты сразу по приходу, из-за джиттера картинка дёргается, а если ненадолго накапливать их в буфере интерполяции, движение плавное
  3. NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
    Пример, где в RPC кладётся время отправки, и получатель проигрывает эффект по серверному времени
  4. tc-netem(8) — Linux manual page iproute2
    Инструмент для тестирования, который добавляет к исходящим пакетам задержку и джиттер (delay TIME JITTER) и потери (loss random PERCENT), имитируя реальную сеть
  5. Using Network Emulation in Unreal Engine Epic Games
    Тестирование с минимальной и максимальной задержкой и долей потерь пакетов на сервере и клиенте, в консоли задаётся, например, как NetEmulation.PktLag

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

Тот же слой: Архитектура синхронизации

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

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