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

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

Размер буфера ввода на игрока Per-player server input buffer (jitter buffer)

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

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

Если сервер немного накапливает ввод каждого игрока и берёт по одной команде за тик, на чужих экранах движение плавное, но момент, когда действие самого игрока подтверждается сервером, сдвигается на столько же.

Почему Сервер накапливает ввод тормозящего игрока в буфере и применяет по одной команде за тик → Следствие Маленький буфер часто пустеет, и персонаж встаёт на месте или сервер двигает его, угадывая по последнему вводу, а большой буфер задерживает подтверждение ввода самого игрока → На экране С маленьким буфером другие видят замирания, с большим результат умений самого игрока появляется поздно (задержка ввода)

Симптомы
Микрофризы, Задержка ввода
Факторы
Джиттер
У кого
Странно выглядит один персонаж, Только у меня
Когда
Всегда
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента
Команда разработки: задачи
Сервер: автоматически подстраивать размер буфера под состояние подключения каждого игрока, при отставании брать по две команды и догонять, клиентам игроков, у которых буфер часто пустеет, давать команду отправлять ввод раньше. Клиент: по команде сервера отправлять ввод немного раньше (подстройка времени клиента).
Цифры для ориентира
Зависит от игры, но обычно 1–3 тика. VALORANT на 128-тиковом сервере держит серверный буфер ещё короче, в среднем полкадра (около 4 ms). Часто используют адаптивный буфер, который увеличивается только у игроков с большим джиттером.
На графике
Высоко только у некоторых · длина буфера ввода и число опустошений по игрокам
Где смотреть
Писать на сервере для каждого игрока число команд в буфере ввода на каждом тике, число случаев, когда буфер опустел и был заполнен догадкой по последнему вводу, и время от прихода ввода до его применения
Подтверждает
У игроков с маленьким буфером много опустошений, и в эти моменты на чужих экранах они ненадолго замирают, а у игроков с большим буфером время от ввода до применения выросло на длину буфера
Опровергает
Если буфер почти не пустеет, а на чужих экранах видны микрофризы, проблема в интерполяции на стороне смотрящего. Если буфер короткий, а задержка ввода большая, причина в самом RTT или в двойном ожидании тика
Чем проверить
Нужны логи и метрики игрового сервера или клиента

Источники

  1. Peeking into VALORANT's Netcode Riot Games
    Сервер сдвигает отсчёт времени клиента так, чтобы очередь ввода давала минимальную задержку, но успевала поглотить неравномерный приход. Цель серверной буферизации: в среднем полкадра
  2. NetworkTimeSystem class (Netcode for GameObjects 2.5) Unity
    LocalBufferSec: сколько времени сервер буферизует сообщения клиента. Время клиента сдвигается вперёд, и сообщения приходят на сервер раньше
  3. NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
    Игрокам с плохим подключением можно увеличить значение буфера

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

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

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

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