Artean

Оптимизация графики в Unity игре: как поднять FPS и снизить нагрузку

С чего начать: как понять, что именно «ест» FPS в Unity

Перед тем как что‑то «крутить» в настройках рендеринга, зафиксируйте целевой FPS и ключевые платформы. Для мобильных игр на слабых устройствах честные стабильные 30 FPS часто важнее, чем нестабильные 45–60. Имеет смысл гнаться за 60 FPS, если вы делаете динамичный экшен, киберспорт или проект с камерой от первого лица. На ПК и консолях ориентируются на 60+ FPS, но главное — отсутствие просадок ниже выбранного порога.

Оптимизация графики в Unity игре: практическое руководство по FPS

Зафиксируйте targetFrameRate и ограничители в Quality Settings, чтобы измерения были сопоставимы. Без этого вы не поймёте, действительно ли изменения уменьшают нагрузку или просто попали в потолок мощности CPU или GPU.

Далее важно определить, упирается ли проект в CPU или GPU. Если игра CPU‑bound, один кадр задерживают логика, физика, скриптовая часть, огромное количество объектов и вызовов API. Если GPU‑bound — кадр «зависает» на отрисовке: тяжёлые шейдеры, высокое разрешение, переизбыток пост‑эффектов, draw calls и overdraw.

Откройте Unity Profiler и посмотрите вкладки:

  • — CPU Usage: много времени в Script, Physics, Animation — проблемы не в графике;
  • — GPU Usage: пики по Rendering, большие задержки на отдельных draw calls — упор именно в видеокарту;
  • — Rendering: подсмотр количества rendered objects, triangles, SetPass Calls.

Для детальной диагностики используйте Frame Debugger. По шагам просмотрите, что реально рендерится в кадре, какие объекты попадают в камеру, сколько раз меняются материалы и шейдеры. Частая ситуация: на сцене рендерится UI, который не виден, или далёкие детали городского фона, которые в кадре занимают пару пикселей.

Мини‑чек перед любыми правками качества:

  • — что рендерим лишнего в текущем кадре (невидимые слои, выключенные, но не снятые с рендеринга объекты);
  • — не слишком ли высока детализация моделей и текстур для дистанций, на которых их видно;
  • — нет ли дублирующихся эффектов (несколько слоёв Bloom, несколько текущих камер, конфликтующие пост‑процессы).

Если пустая сцена с теми же скриптовыми системами даёт стабильные 60 FPS, а в «красивых» локациях вы видите падения до 25–30, почти всегда приоритетна оптимизация графики в Unity игре. Быстрый тест: временно отключите пост‑обработку, тени и часть источников света; если FPS резко вырастает, вы упираетесь в GPU и настройки рендеринга.

Ключевые графические настройки Unity, которые реально влияют на FPS

Первое стратегическое решение — выбор Render Pipeline. Built‑in pipeline по‑прежнему подходит для простых, наследованных проектов и 2D‑игр, где важна минимальная сложность настройки. Universal Render Pipeline (URP) лучше сбалансирован под мобильные платформы и кроссплатформенные приложения: он даёт контролируемое количество draw calls, гибкую настройку качества и forward rendering, который нормально работает на большинстве GPU. High Definition Render Pipeline (HDRP) ориентирован на ПК и консоли с мощным железом, где приоритет — кинематографичность и реалистичное освещение.

Миграция между пайплайнами — отдельный проект. Ради +10 FPS на старых устройствах нет смысла переносить большую игру на URP в середине разработки, если те же +10 FPS можно получить грамотной оптимизацией текстур и освещения. Менять pipeline разумно, когда:

  • — проект только стартует и вы сразу выбираете стратегию рендеринга;
  • — текущий pipeline не даёт нужные фичи (deferred/forward mix, нужное количество lights, продвинутые пост‑эффекты);
  • — вы упёрлись в архитектурные ограничения и каждый фикс превращается в костыль.

В Quality Settings главное влияние на FPS оказывают:

  • — Shadows: тип (Hard/Soft), разрешение, Shadow Distance и количество источников с тенями;
  • — Anti‑aliasing: MSAA на мобильных часто дороже, чем небольшое повышение разрешения рендера; TAA требует больше GPU и памяти, но даёт стабильную картинку на ПК;
  • — Texture Quality и Anisotropic Filtering: на мобильных используйте сниженные mip‑уровни и аккуратный anisotropic, особенно для больших поверхностей;
  • — VSync и ограничение FPS: отключите VSync при профилировании, чтобы видеть реальное поведение;
  • — Render Scale/Resolution: уменьшить internal resolution на 10–20% обычно дешевле, чем выключить половину эффектов.

Возьмите за правило: один проект — несколько пресетов качества под разные классы устройств. Например, на слабых платформах без теней от мелких объектов и с упрощёнными шейдерами, на средних — ограниченный Shadow Distance, урезанный SSAO, а на топовых — полный набор эффектов. Из практики: уменьшение Shadow Distance с 100 до 30 метров на мобильных сценах открытого мира легко возвращает 15–25 FPS.

Настройки камер тоже влияют на количество draw calls и общую нагрузку. Чем больше активных камер, тем чаще сцена рендерится. Проверьте:

  • — Culling Mask: камера не должна захватывать слои, которые ей не нужны;
  • — UI: лишние overlay‑камеры, которые каждый кадр пересобирают канвас, — частый источник проблем;
  • — Render Textures: они оправданы для мини‑карт, порталов, зеркал, но каждая RT — это отдельный кадр рендеринга в памяти.

Пост‑эффекты — классический скрытый потребитель GPU. В URP/HDRP аккуратно тестируйте каждый эффект отдельно: Bloom, SSAO, Motion Blur, Depth of Field, Chromatic Aberration. Отключайте по одному и смотрите в Profiler, сколько миллисекунд в среднем тратится на Post‑processing. Часто оказывается, что лёгкое снижение интенсивности Bloom и отказ от Motion Blur дают +20–30% к FPS почти без заметной потери качества.

Соберите «профили настроек» качества:

  1. 1) Low: минимальные тени или их отсутствие, урезанный Render Scale, простые шейдеры, отключенный SSAO и сложные эффекты;
  2. 2) Medium: ограниченный Shadow Distance, среднее разрешение текстур, упрощённый набор пост‑эффектов;
  3. 3) High/Ultra: полный графический пакет для устройств с мощным CPU/GPU.

Используйте определение класса устройства (по GPU, объёму памяти, платформам) для автоназначения профиля и дайте игроку возможность вручную сменить качество. Так вы не «убьёте» игру единственной универсальной настройкой, которая плохо работает и на слабых, и на топовых устройствах.

Оптимизация контента: текстуры, модели, освещение, эффекты

Дальше начинается работа с тем, что реально отрисовывается в каждом кадре. Именно контент чаще всего делает оптимизацию графики в Unity игре болезненной: красиво — значит дорого, если не контролировать параметры.

С текстур начинайте всегда. Базовые правила:

  • — не храните альфа‑канал, если он не используется (лишняя память и время чтения);
  • — переход с 4K на 2K или 1K для объектов второго плана почти всегда незаметен на мобильных платформах;
  • — подбирайте форматы под устройства: ETC2/ASTC для Android, PVRTC для iOS, DXT/BCn под ПК и консоли.

Атласы текстур помогают уменьшить количество draw calls, но усложняют пайплайн разработки. Используйте их:

  • — для UI и повторяющихся мелких объектов;
  • — для окружения со схожими материалами;
  • — осторожно — для персонажей, где часто меняются скины и костюмы (иначе придётся пересобирать атласы при каждом апдейте).

С моделями действует принцип: детализация соответствует дистанции. LOD Group позволяет задать несколько версий модели и автоматически переключаться по расстоянию до камеры. Настройте LOD для NPC, зданий, крупных элементов окружения. На дальних расстояниях оставляйте силует из тысяч, а не сотен тысяч полигонов.

Static Batching объединяет статические объекты с одинаковыми материалами в более крупные блоки рендеринга и уменьшает количество draw calls. Помечайте как static всё, что точно не будет двигаться: стены, дороги, скалы. Dynamic Batching полезен для множества мелких динамических объектов с одинаковыми материалами, но имеет ограничения по количеству вершин и не панацея. Главная ошибка — сотни материалов на похожих объектах: batching просто не срабатывает.

Освещение — одна из самых дорогих частей рендеринга. Запекайте всё, что можно (Baked lighting), особенно для статичных сцен. Реaltime‑источники оставляйте только там, где игрок действительно чувствует их влияние. Light Probes и Reflection Probes позволяют недорого симулировать сложное освещение и отражения для динамических объектов, не заставляя GPU пересчитывать всё в реальном времени.

Ограничьте количество источников света с тенями. Обычно достаточно 1–2 ключевых источников с качественными тенями и пару без теней для «подсветки» сцен. Shadow Distance под открытые пространства выставляйте экспериментально: иногда визуально приемлемы 40–50 метров, а производительность выигрывает десятки кадров.

Частицы, прозрачность и шейдеры — ещё один частый виновник провалов FPS. Частицы генерируют много мелких объектов и overdraw: слои дыма, огня, магии перекрывают друг друга, и GPU несколько раз перерисовывает одни и те же пиксели. Используйте текстурные листы (flipbook) с заранее запечённой анимацией вместо сложных процедурных эффектов, ограничивайте количество активных эмиттеров.

Прозрачные материалы не участвуют в стандартном z‑culling, поэтому их нужно особенно экономить. Большие стеклянные купола, густой туман, прозрачные UI‑элементы на пол‑экрана легко убивают FPS на мобильных устройствах. Там, где возможно, переходите на opacity cutout или непрозрачные материалы.

Выбор шейдеров: используйте Unlit и упрощённые варианты там, где не нужен полный лайтинг: интерфейс, фоновые объекты, дальний план. Сложные PBR‑шейдеры оставляйте для героев сцены и объектов, на которые игрок действительно смотрит.

Приоритизируйте работу так:

  • — сначала самые тяжёлые сцены по данным Profiler и Frame Debugger;
  • — затем глобальные настройки текстур, общие шейдеры и материалы;
  • — в конце — точечная настройка под конкретные устройства и платформы, где ещё остаются просадки FPS.

Рабочий чек‑лист и когда стоит привлечь внешнюю команду

Сведите всё в короткий алгоритм действий.

  1. 1) Определите целевой FPS и основные платформы (мобильные, ПК, консоли).
  2. 2) Через Profiler и Frame Debugger убедитесь, что вы упираетесь именно в рендер, а не в логику скриптов или физику CPU.
  3. 3) Настройте и протестируйте минимум 2–3 профиля качества: минимальный, средний, высокий.
  4. 4) Проработайте контент в порядке влияния на FPS: текстуры → модели и LOD объектов → освещение и тени → эффекты и шейдеры.
  5. 5) Замерьте результат на реальных устройствах и разных графических API (например, Vulkan/Metal/DirectX), чтобы понять, где игра работает лучше.

Если оптимизация затягивается, легко попасть в «болото»: вы постоянно вносите хаотичные изменения, не фиксируя эффект, команда неделями правит FPS, а фичи и контент стоят, узкие места в шейдерах и пайплайне рендеринга остаются непонятными. В такой ситуации уже не очевидно, что именно необходимо уменьшить: количество draw calls, сложность материалов или вообще архитектуру сцены.

Наша команда занимается разработкой мобильных приложений, веб‑сервисов, CRM‑систем, игр и интернет‑магазинов и изначально проектирует графический стек с учётом производительности. В контексте Unity мы можем:

  • — провести аудит и оптимизацию графики в Unity игре с разбором сцен и конкретных узких мест;
  • — помочь с переходом на URP/HDRP, настройкой профилей качества и подбором оптимальных настроек под разные устройства;
  • — взять на себя дальнейшую разработку и поддержку игры или другого приложения с целевым FPS под выбранные платформы.

Если чувствуете, что у вашей команды закончились идеи, как ещё ускорить кадр, а Profiler и инструменты rendering только пугают количеством данных — пригласите нас на аудит или подключите к проекту. Часто несколько дней целенаправленной работы опытной команды дают больший прирост производительности, чем месяцы стихийных правок.