Если сервер не прикрепляет к событиям время, когда они произошли, а клиент проигрывает их сразу при получении, сетевой джиттер напрямую сбивает тайминг анимаций.
Почему События «начало атаки», «запуск эффекта» выполняются сразу по приходу → Следствие У каждого пакета своё время доставки, и интервалы скачут → На экране Серия атак то ускоряется, то замедляется, тайминг паттернов босса каждый раз разный
Основной ответственный Команда разработки · Разработка клиента · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Клиент: проигрывать по времени, прикреплённому к событию (планирование событий, буфер интерполяции). Сервер: прикреплять к событиям время, когда они произошли (серверное время).
На графике
Случайные всплески · интервалы воспроизведения событий, интервалы прихода пакетов
Где смотреть
Сопоставить по номеру события время из лога сервера с временем прихода и воспроизведения из лога клиента и сравнить интервалы. В development-сборке воспроизвести, добавив джиттер (значение джиттера в tc netem, минимальная и максимальная задержка в эмуляции сети Unreal)
Подтверждает
На сервере события происходят с равными интервалами, а интервалы воспроизведения повторяют неравномерные интервалы прихода
Опровергает
Если пакеты приходят ровно, а воспроизведение скачет, проблема с кадрами на клиенте (всплески времени кадра). Если неравномерны уже интервалы на сервере, это превышение бюджета тика
Snapshot InterpolationGaffer On Games Если рисовать снапшоты сразу по приходу, из-за джиттера картинка дёргается, а если ненадолго накапливать их в буфере интерполяции, движение плавное
tc-netem(8) — Linux manual pageiproute2 Инструмент для тестирования, который добавляет к исходящим пакетам задержку и джиттер (delay TIME JITTER) и потери (loss random PERCENT), имитируя реальную сеть
Using Network Emulation in Unreal EngineEpic Games Тестирование с минимальной и максимальной задержкой и долей потерь пакетов на сервере и клиенте, в консоли задаётся, например, как NetEmulation.PktLag