Если выяснять, кто кого видит, сравнивая всех со всеми, то при росте числа игроков в 10 раз расчёты растут в 100 раз.
Почему Расстояние сравнивается между всеми персонажами, или карта разбита на сетку, но вокруг одной ячейки собираются сотни игроков → Следствие Для 100 игроков около 10 000 сравнений, для 1 000 около 1 000 000 → На экране Там, где все собрались вместе (мировой босс, осада), время тика взлетает: слоумо, микрофризы
Основной ответственный Команда разработки · Разработка сервера
Команда разработки: задачи
Разбить мир на сетку или области и сравнивать только соседей, реже обновлять дальние объекты, ограничить число игроков, которых видит один игрок.
Цифры для ориентира
Если на каждую пару игроков с учётом сравнения расстояния и обновления списков видимости заложить 0,1 µs (одна десятимиллионная секунды), то для 1 000 игроков (около 1 000 000 пар) это 100 ms на тик. Вдвое больше бюджета 20-тикового сервера (50 ms).
На графике
Растёт вслед за онлайном и нагрузкой · время тика сервера, число игроков в одном месте
Где смотреть
Вывести на один график число игроков по зонам и каналам и время тика, а также отдельно измеренное время расчёта видимости внутри тика. Если отдельного замера нет, смотреть долю CPU по функциям игрового процесса через perf top -p
Подтверждает
Когда игроков в одном месте становится вдвое больше, время тика растёт почти в 4 раза, а большую часть процессорного времени занимают функции расчёта видимости и расстояний
Опровергает
Если время тика растёт пропорционально числу игроков или велика доля функций отправки и сериализации, дело во взрывном росте рассылки или в затратах на сериализацию и сжатие
Replication Graph in Unreal EngineEpic Games Стандартный подход, при котором для каждого актора перебираются все подключения, при большом числе игроков и акторов упирается в CPU сервера. В MMORPG и подобных играх мир делят на сетку и переиспользуют списки по ячейкам
perf-top(1) — Linux manual pageperf В реальном времени показывает долю CPU работающего процесса (-p) или потока (-t) по функциям (символам)