Оптимизация: профайлер и LOD
Урок про то, как находить и устранять причины тормозов в игре на Unreal.
Профилирование — это измерение того, на что тратится время кадра, чтобы найти настоящую причину низкого FPS, а не угадывать её.
Сначала измерить, потом чинить
Главное правило оптимизации: не оптимизируйте вслепую. Сначала измерьте, где узкое место — в процессоре (CPU, игровая логика) или видеокарте (GPU, рендеринг). Иначе вы потратите дни на ускорение того, что и так быстро.
Инструменты профилирования
| Команда / инструмент | Что показывает |
stat fps | Текущий FPS и время кадра |
stat unit | Разбивку: Game (CPU), Draw, GPU |
stat game | Что тратит время в игровой логике |
| Unreal Insights | Подробный трейс всего кадра |
Команда stat unit — первый шаг: если велик Game — узкое место в CPU/логике; если велик GPU — в графике; если велик Draw — слишком много draw calls.
LOD и draw calls
Каждый видимый меш требует draw call — команду видеокарте отрисовать его. Чем их больше, тем медленнее. Снизить нагрузку помогают LOD (упрощённые версии моделей вдали), объединение мелких мешей и культинг (отсечение невидимого). Хотя Nanite во многом решает проблему геометрии, для не-Nanite объектов LOD по-прежнему важны.
Дешёвые победы
- Отключите Tick у объектов, которым он не нужен — это бесплатная экономия CPU.
- Уменьшите дальность и качество теней, если они бьют по GPU.
- Сократите число динамических источников света — они дороги.
- Не считайте тяжёлую логику каждый кадр; кешируйте результаты.
Как работает под капотом
Кадр делится на работу CPU (логика, подготовка сцены) и GPU (отрисовка). Они идут конвейером: пока GPU рисует один кадр, CPU готовит следующий. FPS ограничен тем из них, что медленнее. Профайлер показывает это разделение, и оптимизировать нужно именно «бутылочное горлышко» — ускорение быстрой части не даст прироста.
Частые ошибки
- Оптимизировать без замера. Угадывание узкого места — потеря времени.
- Ускорять не ту часть. Если упёрлись в GPU, оптимизация логики не поможет.
- Tick на всём. Сотни объектов с ненужным Tick тихо съедают CPU.
Бюджет кадра и память
У оптимизации есть ориентир — бюджет кадра. Чтобы держать 60 кадров в секунду, на каждый кадр отведено около 16 миллисекунд; для 30 FPS — около 33. Всё, что движок делает за кадр (логика, отрисовка, физика), должно уложиться в это время. Профайлер показывает, на что миллисекунды тратятся, и задача — уместить работу в бюджет. Думать в миллисекундах полезнее, чем в абстрактном «быстро/медленно»: вы сразу видите, сколько у вас есть и сколько уже занято.
Вторая ось — память. Огромные текстуры и несжатые звуки незаметно съедают видеопамять и оперативную память, и на машинах послабее игра начинает «свопиться» и заикаться. Инструменты вроде Texture Streaming и команды статистики памяти помогают найти прожорливые ассеты. Оптимизация — это всегда балансировка двух бюджетов, времени кадра и памяти, под целевое железо вашей аудитории, а не бесконечная погоня за абстрактной скоростью.
Итоги
- Сначала измеряйте профайлером, потом оптимизируйте.
stat unitпоказывает, где узкое место: Game (CPU), Draw или GPU.- LOD, объединение мешей и культинг снижают нагрузку на рендеринг.
- Отключение лишнего Tick и кеширование — дешёвые победы.