Когда в кадр попадают сотни игроков, как на осаде или у мирового босса, клиент не справляется уже с самой отрисовкой.
Почему В одном кадре сотни персонажей и наложенные друг на друга эффекты → Следствие Затраты на анимацию, тени, таблички с именами и эффекты растут пропорционально числу игроков → На экране FPS падает с 60 до 15, микрофризы во всех движениях, ввод тоже запаздывает
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Упрощать по расстоянию (LOD), ограничить число отображаемых персонажей, добавить опцию упрощённых эффектов, реже обновлять анимацию.
Цифры для ориентира
Даже если на одного персонажа уходит 0,02–0,1 ms, на 300 персонажей это 6–30 ms. При 60 FPS бюджет кадра составляет 16,7 ms, так что уже одно это занимает больше 1/3 бюджета, а в худшем случае превышает его.
На графике
Растёт вслед за онлайном и нагрузкой · время кадра, число персонажей в кадре
Где смотреть
Сравнить в PresentMon время кадра и CPUBusy, GPUBusy до и во время осады или боя с мировым боссом. В development-сборке Unreal смотреть stat Unit (время игрового потока, потока рендеринга и GPU)
Подтверждает
Чем больше персонажей в кадре, тем выше время кадра, а ограничение числа отображаемых персонажей или упрощённые эффекты сразу помогают
Опровергает
Если всплески не зависят от числа персонажей, это «Всплески времени кадра» или «Сборка мусора на клиенте». Если FPS в норме, а запаздывают только движения других игроков, это «Узкое место: обработка пакетов в главном потоке»
Чем проверить
Проверка на стороне игрока
Источники
Introduction to level of detailUnity Без LOD даже мелкие на экране объекты рисуются с той же детализацией, LOD снижает нагрузку на отрисовку