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

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

Проверка попадания без компенсации задержки Server-now hit validation

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

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

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

Почему Противник на экране игрока стоит там, где был примерно 0,2 с назад (при пинге 150 ms и интерполяции 100 ms) → Следствие Сервер проверяет по текущей позиции, и там, куда целился игрок, цели уже нет → На экране Точно попал, а промах. По движущейся цели приходится стрелять с упреждением

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

Источники

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    Без компенсации задержки приходится стрелять с упреждением на величину задержки. Компенсация задержки: сервер проверяет попадание, отматывая время назад на задержку и время интерполяции
  2. Peeking into VALORANT's Netcode Riot Games
    Сервер отматывает время назад к состоянию игры, которое видел игрок в момент выстрела, и проверяет попадание. Клиент вместе с выстрелом отправляет время симуляции, которое он видел
  3. Source SDK 2013: player_lagcompensation.cpp Valve
    Глубина отмотки в движке Source = сетевая задержка + время интерполяции

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

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

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

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