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

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

Короткое окно реакции, которое съедает пинг Timing window too short for latency + reaction

ID причины sy-short-window · Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента, Команда инфраструктуры · Серверная инфраструктура

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

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

Почему Короткие окна реакции, например предупреждение об атаке босса за 0,5 с или окно парирования 0,2 с → Следствие Предупреждение игрок видит поздно (задержка на пути к нему + интерполяция), и его ввод тоже приходит поздно (задержка на пути к серверу + ожидание тика) → На экране Точно увернулся, а удар прошёл, парирование «съело»

Симптомы
Съеденные действия / роллбэк, Задержка ввода
Факторы
Задержка
У кого
Только у меня, Только одна функция
Когда
При определённом действии
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента, Команда инфраструктуры · Серверная инфраструктура
Команда разработки: задачи
Сервер: планировать предупреждение об атаке по серверному времени и отправлять его заранее, расширять окно реакции на величину пинга (компенсация задержки). Клиент: проигрывать полученное предупреждение в запланированный момент по серверному времени.
Команда инфраструктуры: задачи
Размещать серверы ближе к регионам, где много игроков (региональные серверы), чтобы уменьшить сам пинг.
Цифры для ориентира
При пинге 150 ms и интерполяции 100 ms предупреждение появляется на экране игрока примерно через 0,18 с, а ввод игрока доходит до сервера примерно за 0,1 с. Если добавить 0,25 с на реакцию человека, увернуться от атаки с предупреждением за 0,5 с почти невозможно.
На графике
Высоко только у некоторых · доля неудачных уклонений и парирований (по диапазонам пинга)
Где смотреть
Писать в лог сервера время начала и конца окна реакции, время прихода ввода игрока на сервер и RTT этого игрока, смотреть долю неудач в разбивке по диапазонам пинга (например, с шагом 50 ms)
Подтверждает
Чем выше диапазон пинга, тем заметно выше доля неудач, а неудачный ввод приходит вскоре после закрытия окна (в пределах суммы RTT и времени интерполяции)
Опровергает
Если доля неудач примерно одинакова во всех диапазонах пинга, дело в сложности паттерна. Если ввод пришёл внутри окна, а засчитан как неудача, смотреть код проверки или серверную валидацию
Чем проверить
Нужны логи и метрики игрового сервера или клиента

Источники

  1. Factors influencing the latency of simple reaction time (Frontiers in Human Neuroscience, 2015) Frontiers
    Среднее время простой реакции около 231 ms (213 ms с поправкой на задержку оборудования), в недавних крупных исследованиях 233–400 ms
  2. Latency and Player Actions in Online Games (Communications of the ACM, 2006) ACM
    Чем точнее действие и чем короче срок на него, тем оно чувствительнее к задержке (предел около 100 ms для вида от первого лица, около 500 ms для вида от третьего лица, около 1 000 ms для всевидящей камеры сверху)
  3. NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
    Способ, при котором события планируются по серверному времени (ServerTime), и все клиенты проигрывают их в один и тот же момент

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

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

Причины с тем же симптомом (Съеденные действия / роллбэк) на других слоях

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