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

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

Ошибки предсказания в роллбэк-неткоде Rollback misprediction

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

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

Игра предсказывает ввод соперника и показывает результат заранее, а при ошибке отматывает назад и пересчитывает. Чем больше пинг, тем глубже отмотка.

Почему Соперник сменил ввод (не так, как предсказано) → Следствие Реальный ввод приходит с опозданием на половину пинга, и на столько же приходится отматывать назад и пересчитывать → На экране Движение соперника проскакивает несколько кадров или внезапно меняется

Симптомы
Телепортация
Факторы
Задержка, Джиттер
У кого
Только у меня
Когда
При определённом действии, Изредка, случайно
Ответственные
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Добавить задержку применения ввода (input delay) в 1–3 кадра, чтобы уменьшить глубину отмотки, ограничить глубину отмотки.
Цифры для ориентира
При пинге 100 ms (50 ms в одну сторону) и 60 fps отматывается около 3 кадров. Если задержать применение ввода на 2 кадра, отмотка сократится до 1 кадра.
На графике
Случайные всплески · число отмотанных кадров, RTT (пинг)
Где смотреть
Записывать на клиенте при каждой отмотке число отмотанных кадров, RTT в этот момент, настройку задержки применения ввода и время, ушедшее на отмотку и пересчёт
Подтверждает
В моменты, когда движение соперника дёрнулось, число отмотанных кадров большое, средняя глубина отмотки примерно равна (задержка в одну сторону − задержка применения ввода) ÷ время кадра и растёт с пингом
Опровергает
Если отмотка небольшая, а микрофризы есть, это проблема производительности: пересчёт не укладывается в один кадр. Если и после отмотки результаты на двух экранах расходятся, это рассинхронизация (desync)
Чем проверить
Нужны логи и метрики игрового сервера или клиента

Источники

  1. GGPO Rollback Networking SDK GGPO
    Ввод соперника предсказывается, игра идёт вперёд, а если реальный ввод другой, всё пересчитывается от момента расхождения до текущего
  2. 8 Frames in 16ms: Rollback Networking in 'Mortal Kombat' and 'Injustice 2' GDC
    Роллбэк убирает локальную задержку применения ввода в lockstep, за 16 ms отматывается и пересчитывается до 8 кадров

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

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

Причины с тем же симптомом (Телепортация) на других слоях

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