Оптимизация 3D-графики в играх под слабое железо
Когда игра «тянет» только на мощном ПК, она автоматически теряет часть аудитории. То же самое происходит с интерактивными 3D-турами и VR-просмотрами недвижимости: если сцена фризит на бюджетном ноутбуке покупателя или в недорогом шлеме, интерес к объекту падает мгновенно. Оптимизация под слабое железо — это не про урезание картинки любой ценой, а про правильный баланс между визуалом, производительностью и читаемостью сцены. Хорошо оптимизированная игра (или виртуальный тур) выглядит достойно даже на скромных устройствах и при этом держит стабильный FPS, а значит — удерживает внимание и ускоряет принятие решений.
Почему оптимизация начинается не с графики, а с измерений
Главная ошибка — пытаться «на глаз» отключать тени, текстуры и постобработку, не понимая, где именно узкое место. Сначала нужно определить, что тормозит игру: процессор, видеокарта, память или загрузка данных. В Unity и Unreal подход одинаковый: сперва профилирование, потом точечные правки. В нашей практике при создании VR-туров по квартирам мы обязательно прогоняем сцену через встроенные профайлеры на целевых конфигурациях — например, на ноутбуке с интегрированной графикой, который часто используют риелторы на выезде. Без этого можно потратить недели на снижение разрешения теней, а настоящая проблема окажется в сотне лишних draw calls от декора.
Что проверить в первую очередь
- FPS в самых тяжелых сценах, а не в меню.
- Время кадра отдельно по CPU и GPU.
- Количество draw calls.
- Нагрузку от теней, постобработки, прозрачностей и частиц.
- Упор в память и размер текстур.
- Долгие загрузки ассетов и подтормаживания при подгрузке сцен.
Если не измерять, легко потратить неделю на оптимизацию того, что почти не влияет на производительность. Например, в одном из проектов мы грешили на сложные шейдеры отделки, а профайлер показал, что 40% кадра съедал volumetric fog, который клиент даже не замечал.
Основные принципы оптимизации под слабое железо
1. Сокращайте количество draw calls
Draw call — это команда, с помощью которой движок отправляет объект на отрисовку. Чем их больше, тем выше нагрузка на CPU. Особенно это заметно на слабых ПК и мобильных устройствах. В интерактивных турах по интерьерам мы часто сталкиваемся с тем, что каждый предмет мебели, каждая рамка на стене тянет за собой отдельный материал и вызов. Решение — объединять похожие объекты, использовать batching и атласы текстур. Например, все картины в гостиной можно запечь в один атлас и подать как единый меш, сократив draw calls в несколько раз.
Что помогает:
- объединение похожих объектов;
- использование batching;
- уменьшение числа материалов;
- применение атласов текстур вместо россыпи отдельных картинок.
2. Упрощайте материалы и шейдеры
Сложный шейдер может съедать больше ресурсов, чем сама модель. На слабом железе лучше использовать простые шейдеры без лишней математики, лишних эффектов и дорогих операций в пиксельной стадии. В архитектурной визуализации часто хочется применить PBR с картами отражений и шероховатости везде, но на бюджетном устройстве такой подход быстро упирается в GPU. Мы для VR-просмотров создаём облегчённые версии материалов: убираем лишние текстурные сэмплы, заменяем сложные вычисления на вершинные, а для дальних планов используем unlit-шейдеры с заранее запечённым светом.
Что делать:
- убрать тяжелые функции вроде сложных вычислений в каждом пикселе;
- заменить дорогие материалы на более простые версии;
- по возможности использовать вершинные вычисления вместо пиксельных;
- сделать отдельные уровни качества для разных устройств.
3. Контролируйте текстуры
Большие текстуры быстро съедают память и грузят видеокарту. Для слабых устройств важны размер, формат и сжатие. В турах по новостройкам мы часто видим, как застройщики хотят показать фактуру плитки в 4K, но на экране планшета разница с 1K незаметна, а VRAM расходуется впустую. Правило простое: не использовать 4K-текстуры там, где хватает 1K или 2K, сжимать текстуры, применять атласы и по возможности переходить на 16-битные форматы для масок и карт окружения.
Полезные правила:
- не использовать 4K-текстуры там, где хватает 1K или 2K;
- сжимать текстуры;
- применять атласы;
- уменьшать количество уникальных материалов;
- отдавать предпочтение 16-битным текстурам там, где это допустимо.
4. Снижайте стоимость освещения и теней
Освещение часто становится самой дорогой частью кадра. На слабом железе динамические тени, несколько источников света и тяжелые эффекты дают сильную просадку. Когда мы делаем виртуальный тур по коттеджу, то почти всегда запекаем свет в текстуры — это даёт фотореалистичную картинку без расчёта теней в реальном времени. Динамические источники оставляем только там, где они действительно нужны: например, для лампы, которую пользователь может включить/выключить. Ограничиваем дальность теней, снижаем разрешение shadow maps и отключаем volumetric-эффекты на low-пресете.
Рабочие меры:
- уменьшить число динамических источников света;
- по возможности использовать запеченное освещение;
- ограничить дальность теней;
- снизить качество shadow maps;
- отключить лишние отражения и volumetric-эффекты.
Таблица: что сильнее всего влияет на производительность
| Элемент | Чем опасен на слабом железе | Что сделать |
|---|---|---|
| Тени | Высокая нагрузка на GPU | Уменьшить дальность, качество, число источников |
| Текстуры | Быстро забивают VRAM | Сжать, уменьшить разрешение, собрать в атласы |
| Материалы | Увеличивают draw calls и стоимость рендера | Объединять, упрощать, использовать меньше вариантов |
| Шейдеры | Дороги на пиксельном уровне | Упростить логику, убрать лишние эффекты |
| Частицы | Перегружают сцену прозрачностями и overdraw | Сократить плотность и длительность эффектов |
| Постобработка | Создает лишнюю нагрузку без пользы для геймплея | Отключать на low preset |
| Физика и скрипты | Забивают CPU | Ограничивать частоту, оптимизировать логику |
Практический порядок оптимизации
Шаг 1. Найдите самое тяжелое место
Не оптимизируйте всю игру сразу. Возьмите сцену, где FPS падает сильнее всего, и проверьте:
- что именно занимает больше времени — CPU или GPU;
- в какой момент кадр проседает;
- связана ли проблема с конкретным объектом, эффектом или сценой.
Шаг 2. Уберите самые дорогие визуальные эффекты
Обычно быстрее всего дают эффект:
- постобработка;
- motion blur;
- bloom;
- depth of field;
- сложные отражения;
- объемный свет;
- избыточные частицы;
- MSAA и другие дорогие режимы сглаживания, если они не критичны.
Шаг 3. Упростите геометрию
Если сцена перегружена полигонами:
- сделайте LOD-версии моделей;
- уменьшите детализацию дальних объектов;
- объединяйте мелкие меши;
- убирайте невидимые или редко заметные детали;
- снижайте плотность декора, особенно на фоне.
Шаг 4. Настройте отрисовку дальних объектов
Для слабых ПК особенно важны:
- culling — не рисовать то, что не видно;
- distance culling — отключать мелкие объекты на расстоянии;
- фрустум-куллинг — не отрисовывать то, что находится вне кадра;
- отключение лишних прозрачных элементов вдали.
Шаг 5. Оптимизируйте физику и логику
Если GPU не перегружен, а FPS все равно низкий, узкое место может быть в CPU. Тогда нужно:
- сократить частоту тяжелых вычислений;
- не обновлять все объекты каждый кадр;
- ограничить количество дорогих проверок;
- уменьшить объем работы в Update/Tick;
- следить за максимальным временем, которое физика может занимать в худшем случае.
Unity: что особенно важно
В Unity для слабых устройств обычно начинают с базового набора:
- уменьшение разрешения рендера;
- отключение или упрощение постобработки;
- снижение качества MSAA;
- более простые шейдеры;
- уменьшение плотности частиц;
- использование атласов текстур;
- batching и static batching для неподвижных объектов.
Типовые настройки, которые помогают
- Убрать лишние эффекты из high-quality профиля.
- Разделить качество на несколько пресетов.
- Проверить, где реально нужен анизотропный фильтр.
- Снизить количество источников света на сцене.
- Заменить тяжелые материалы на упрощенные мобильные аналоги.
Unreal Engine: на что смотреть в первую очередь
В Unreal путь тот же: сначала профилирование, потом точечные изменения. Практически полезно начать с анализа статистики кадра и понять, что именно тормозит: Game, Draw или GPU. В нашей работе с VR-турами на Unreal мы часто сталкиваемся с тем, что Blueprint-логика интерактивных элементов (открывание дверей, включение света) может неожиданно создавать микрофризы, если не ограничить частоту опроса.
Что обычно дает быстрый результат
- отключение лишних post-process эффектов;
- уменьшение качества теней;
- снижение разрешения текстур;
- объединение мешей;
- использование LOD;
- сокращение прозрачностей и overdraw;
- проверка, не перегружены ли Blueprint-скрипты.
Если сцена слишком тяжелая, иногда помогает переход на более легкий режим рендеринга, но это уже зависит от проекта и визуального стиля.
Чек-лист оптимизации под слабое железо
- Проверить профилирование в самой тяжелой сцене.
- Выяснить, CPU это или GPU-упор.
- Сократить число draw calls.
- Упростить материалы и шейдеры.
- Уменьшить размер и количество текстур.
- Добавить LOD для моделей.
- Ограничить тени и динамическое освещение.
- Отключить дорогую постобработку.
- Сократить прозрачности и частицы.
- Оптимизировать скрипты и физику.
- Протестировать на реальном слабом устройстве, а не только в редакторе.
Типовые ошибки
Пытаться лечить всё снижением графики
Если просто отключить половину эффектов, картинка может стать бедной, а производительность — почти не измениться. Нужно бить по настоящему узкому месту. В одном из туров мы убрали все отражения, но FPS не вырос, потому что проблема была в сотне динамических теней от точечных светильников.
Игнорировать тест на слабом устройстве
Редактор на мощном ПК почти всегда показывает более мягкую картину, чем реальный бюджетный ноутбук или старый десктоп. Мы обязательно держим под рукой пару «слабых» машин — например, ноутбук с Intel HD Graphics — и тестируем на них каждый билд тура.
Перегружать сцену мелкими объектами
Много мелких декоративных деталей часто вреднее, чем несколько крупных, если они создают массу draw calls и материалов. В интерьерах это особенно заметно: десятки книг на полках, посуда, статуэтки — каждый такой объект может требовать отдельного вызова на отрисовку.
Ставить дорогие эффекты «на всякий случай»
Постобработка и сложные тени должны работать только там, где они реально дают ценность. Для виртуального просмотра квартиры глубина резкости в коридоре не нужна, а motion blur только раздражает при поворотах.
Когда оптимизация уже достаточна
Игра (или интерактивный тур) считается хорошо оптимизированной под слабое железо, если она:
- держит стабильный FPS в ключевых сценах;
- не имеет резких фризов при повороте камеры;
- быстро загружает уровни;
- не упирается в память;
- сохраняет читаемость и визуальную цельность.
Именно стабильность часто важнее максимального FPS. Пользователь скорее простит среднюю картинку, чем рывки и лаги. В недвижимости это критично: если потенциальный покупатель испытывает дискомфорт при перемещении по туру, он быстрее закроет вкладку, чем задумается о покупке.
FAQ
С чего начинать оптимизацию 3D-графики?
С профилирования. Сначала нужно понять, что тормозит: CPU, GPU, память или конкретный эффект.
Что сильнее всего нагружает слабый ПК?
Обычно тени, постобработка, сложные шейдеры, большое число draw calls и тяжелые текстуры.
Нужно ли всегда снижать качество текстур?
Нет. Если текстуры не упираются в память и не создают проблему, лучше сохранить качество. Оптимизация должна быть точечной.
Что важнее: LOD или batching?
Оба подхода важны, но LOD сильнее помогает при удалении лишней геометрии, а batching — при сокращении draw calls. Обычно нужны оба.
Можно ли сделать красивую игру для слабого железа?
Да. За счет грамотного стиля, хорошей композиции, правильного света и аккуратной оптимизации можно получить визуально сильный проект без тяжелого рендера. Это в полной мере относится и к виртуальным турам: фотореализм достигается не только «тяжёлыми» эффектами, но и продуманной работой с запечённым освещением и текстурами.
Вывод
Оптимизация 3D-графики под слабое железо — это не набор универсальных «выключателей», а системная работа с узкими местами. Сначала измерения, потом приоритизация, затем аккуратные изменения в рендере, материалах, текстурах, освещении, геометрии и логике. Такой подход позволяет сохранить визуальное качество и сделать игру доступной для гораздо более широкой аудитории. Перенос этих принципов в PropTech даёт нам возможность создавать VR-просмотры и интерактивные 3D-туры, которые плавно работают даже на устройствах клиентов пятилетней давности, ускоряя принятие решений и сокращая цикл сделки.