Настройка уровней детализации (LOD) для графики
LOD — не просто «сделай три версии модели». Неправильно настроенный LOD Group в Unity может дать обратный эффект: LOD0 переключается на LOD1 слишком рано, игрок видит резкий pop, и это воспринимается как баг. Или переходы настроены по Screen Relative Height без учёта реального расстояния, и на ортографической камере LOD вообще не работает.
Суть в том, что LOD — это система управления сложностью сцены в зависимости от видимости объекта. И она работает правильно только когда учтены: тип камеры, скорость движения игрока, освещение (отбрасываемые тени у LOD1 часто хуже, чем у LOD0), и то, как движок считает расстояние.
Реальные проблемы, которые ломают LOD в продакшене
LOD Pop — главная визуальная проблема. Происходит, когда геометрия и/или текстуры между уровнями отличаются слишком сильно. Классический случай: художник сделал LOD1 с на 60% меньшим количеством полигонов, но UV-развёртка поехала, и нормал-карта не компенсирует потерю формы. Переход с 10 метров — заметен невооружённым глазом. Решается через правильный LOD-генератор (Simplygon, Unity LOD Generator) с сохранением UV-seam'ов и проверкой normal projection.
Тени не следуют за LOD-переходами. В Unity Shadow Caster Culling работает независимо от LOD Group. Если у вас LOD2 — плоский billboard с 2 полигонами, а тень всё ещё считается от LOD0 mesh (потому что Force Shadow Casting = On), вы платите за рендер теней от полной геометрии объекта, которого визуально нет. Это легко пропустить — Frame Debugger показывает Shadow Pass с полным Draw Call-бюджетом.
HLOD (Hierarchical LOD) не настроен для больших сцен. В open-world проектах стандартный LOD Group не работает на расстоянии свыше 500 метров — объекты просто culled, но Scene не выгружается. Unity HLOD (через HLOD Creator пакет) объединяет дальние объекты в один mesh автоматически. Без этого у вас может быть 3000 Draw Calls от деревьев на горизонте.
Как настраиваем LOD в проектах
Начинаем с профиля игровой камеры: FOV, типичная дистанция до объектов, скорость перемещения. Для шутера от первого лица с FOV 90° и скоростью движения 6 м/с пороги LOD будут принципиально другими, чем для RTS с изометрической камерой.
Под каждую категорию объектов (персонажи, здания, пропсы, растительность) устанавливаем отдельную LOD-политику. Пример из практики — мобильная RPG, открытый мир 2×2 км. Деревья: LOD0 (500 полигонов) до 15 метров, LOD1 (80 полигонов) до 50 метров, LOD2 (billboard cross) до 150 метров, Culled за 150 метров. Здания: LOD0 до 30 метров, LOD1 до 80 метров, LOD2 до 200 метров. Такая настройка дала переход с 680 Draw Calls в центре города до 210.
Для Unreal Engine работаем с Nanite там, где это применимо — на статичных мешах с высоким poly count. Но Nanite не заменяет LOD для движущихся объектов и не работает с полупрозрачными материалами. HLOD в UE5 настраиваем через World Partition HLOD Layer.
Cross-фейдинг вместо hard pop. Unity LOD Group поддерживает Cross Fade mode — дитеринг-переход между уровнями. Работает через Dither Fade шейдерное ключевое слово. На мобильных платформах дитеринг дешевле, чем кажется — Adreno хорошо его параллелит. Включаем для крупных объектов на переднем плане, оставляем instant-переход для мелкого пропса вдалеке.
Растительность — отдельная история. SpeedTree LOD интегрируется в Unity через отдельный pipeline. Главная ловушка — billboard LOD SpeedTree рендерится через отдельный BatchRendererGroup, и его нужно профилировать отдельно от основного Draw Call счётчика. Видели проекты, где 40% GPU time уходило на 2000 billboard-деревьев, которые казались «уже оптимизированными».
Процесс настройки LOD
Аудит начинается с Profiler → GPU Usage и Frame Debugger с фильтром по Draw Calls. Смотрим, сколько объектов рендерится за пределами видимой детализации. Потом — Scene View в Overdraw mode, чтобы найти объекты с высоким overdraw без LOD.
После аудита готовим LOD-спецификацию: таблица с категориями объектов, количеством уровней, пороговыми дистанциями, политикой теней для каждого уровня. Это артефакт, который согласовываем с командой художников — им важно понимать, до какого расстояния нужно делать «красивую» геометрию.
Реализация: либо настройка существующих LOD Group, либо создание LOD-ассетов (если их нет), либо автоматическая генерация через Simplygon с последующей ручной правкой критичных объектов.
| Масштаб задачи | Ориентировочные сроки |
|---|---|
| Аудит LOD-настроек + отчёт | 1–3 дня |
| Настройка LOD для одной сцены (до 200 типов объектов) | 1–2 недели |
| Разработка LOD-политики + реализация для open-world | 3–6 недель |
| Интеграция HLOD/Nanite в существующий проект | 2–4 недели |
Стоимость определяется после анализа сцены и требований к целевым платформам.





