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

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

Нагрузка на рендеринг при большом скоплении игроков Render/animation cost of crowds

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

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

Когда в кадр попадают сотни игроков, как на осаде или у мирового босса, клиент не справляется уже с самой отрисовкой.

Почему В одном кадре сотни персонажей и наложенные друг на друга эффекты → Следствие Затраты на анимацию, тени, таблички с именами и эффекты растут пропорционально числу игроков → На экране 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 в норме, а запаздывают только движения других игроков, это «Узкое место: обработка пакетов в главном потоке»
Чем проверить
Проверка на стороне игрока

Источники

  1. Introduction to level of detail Unity
    Без LOD даже мелкие на экране объекты рисуются с той же детализацией, LOD снижает нагрузку на отрисовку
  2. Animation Budget Allocator in Unreal Engine Epic Games
    Динамически сокращает обновления (тики) анимации скелетных мешей и удерживает время на анимацию в пределах бюджета
  3. PresentMon Capture Application (README-CaptureApplication.md) Intel
    По FrameTime, CPUBusy и GPUBusy видно, что задерживает кадр: CPU или GPU
  4. Stat Commands in Unreal Engine Epic Games
    stat Unit: общее время кадра и время игрового потока, потока рендеринга и GPU

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

Тот же слой: L1 Процесс игрового клиента

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

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