Если за кадр обрабатывается только фиксированное число полученных пакетов, при наплыве пакеты всё время переносятся на следующие кадры.
Почему В людном месте приходят тысячи обновлений в секунду → Следствие Главный поток упирается в лимит обработки на кадр и не успевает всё прочитать → На экране Движения других игроков отображаются всё позже и пачками
Основной ответственный Команда разработки · Разработка клиента · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Клиент: принимать и разбирать пакеты в отдельном потоке, устаревшие обновления позиции одного объекта схлопывать и применять только последнее. Сервер: в людных местах реже отправлять обновления дальних персонажей, чтобы уменьшить объём трафика.
Цифры для ориентира
Когда необработанные пакеты копятся, отставание на целую секунду набегает за несколько секунд.
На графике
Растёт вслед за онлайном и нагрузкой · число необработанных полученных пакетов, задержка от приёма до применения
Где смотреть
Писать в лог число пакетов, которые клиент не успел обработать за кадр, и задержку от прихода пакета до применения в игре, смотреть вместе с числом игроков поблизости
Подтверждает
В людных местах число необработанных пакетов и задержка применения постоянно растут, а пинг и интервал отправки с сервера в это время в норме
Опровергает
Если задержки применения нет, а сами пакеты приходят поздно, причина на участке сети. Если сильно растёт время кадра, это «Нагрузка на рендеринг при большом скоплении игроков»
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Источники
Actor Priority in Unreal EngineEpic Games Когда пропускной способности не хватает, акторы реплицируются не все и не каждый раз: приоритет определяется по расстоянию до наблюдателя и времени с последней репликации
Replication Graph in Unreal EngineEpic Games В играх с большим числом игроков и реплицируемых объектов (MMORPG и т. п.) объекты группируют по местоположению и отправляют только нужные, иначе CPU сервера становится узким местом