Реализация LOD-системы для мобильной игры

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация LOD-системы для мобильной игры
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация LOD-системы для мобильной игры

Персонаж с 80 000 полигонов в 2 метрах от камеры выглядит отлично. Тот же персонаж в 50 метрах занимает 40×60 пикселей на экране — и GPU всё равно рендерит 80 000 полигонов. LOD (Level of Detail) — один из основных инструментов управления GPU-бюджетом в мобильных играх. Правильно настроенная LOD-система прозрачна для игрока и заметна в профайлере.

LOD в Unity (URP/Built-in)

Unity LOD Group — базовый компонент. Добавляем LOD Group к объекту, назначаем mesh-рендереры для каждого уровня:

Уровень Screen Space % Полигонов Назначение
LOD 0 >30% 80 000 Крупный план, кат-сцены
LOD 1 15–30% 20 000 Активные NPC средней дистанции
LOD 2 5–15% 5 000 Фоновые персонажи
LOD 3 1–5% 800 Дальние объекты
Culled <1% Объект не рендерится

Ключевой параметр: LOD Bias в QualitySettings. На мобильных платформах — 0.5–0.7 против 1.0 на PC. Это смещает переходы между LOD-уровнями ближе к камере:

// Устанавливаем в зависимости от производительности устройства
QualitySettings.lodBias = SystemInfo.graphicsMemorySize > 4096 ? 0.75f : 0.5f;

Cross-fade transitions

Резкое переключение между LOD заметно глазу — «поппинг». LOD Group → Fade Mode → Cross Fade включает плавный переход через dither. Стоит GPU-времени — используем только для LOD 0→1 (самый заметный переход), для LOD 2→3 поппинг незаметен.

lodGroup.fadeMode = LODFadeMode.CrossFade;
lodGroup.animateCrossFading = true;

На URP в шейдере добавляем #pragma multi_compile _ LOD_FADE_CROSSFADE и UNITY_APPLY_DITHER_CROSSFADE(i.pos).

LOD в Unreal Engine Mobile

StaticMeshComponent и SkeletalMeshComponent поддерживают LOD из коробки. Настройка в Static Mesh Editor: вкладка LOD Settings.

Auto LOD generation (Unreal 4.20+):

// В Static Mesh Editor → LOD Settings
Number of LODs: 4
LOD 1: Reduction Settings → Triangle Percent = 50%
LOD 2: Triangle Percent = 20%
LOD 3: Triangle Percent = 8%

Для мобильных проектов: r.StaticMeshLODDistanceScale 0.5 в DefaultEngine.ini → LOD переходы происходят вдвое ближе к камере.

Skeletal Mesh LOD — отдельная история. Кости, которые не видны на дистанции, удаляем из LOD 2+. LOD Reduction Settings → Remove Bones Below — убираем пальцы, мелкие кости лица для LOD 2+.

HLOD (Hierarchical LOD)

Для открытых миров с большим количеством объектов — HLOD объединяет несколько static mesh в один proxy mesh на дальних дистанциях. В Unity — HLOD System package (com.unity.hlod). В Unreal — встроен в World Settings → HLOD.

Принцип: 100 отдельных деревьев на дистанции 200м объединяются в один mesh с одним draw call. С 100 draw calls → 1 draw call для всего кластера.

Кейс: open world на Galaxy A34

Изометрическая RPG: при входе в город (400+ объектов) FPS проседал с 60 до 22. Draw calls: 680 в кадре. Статика без LOD, без batching.

Шаги оптимизации:

  1. LOD Group на все здания и деревья — 4 уровня, Culled на 2% screen space
  2. Static Batching для объектов без LOD (камни, бочки) — draw calls 680 → 220
  3. HLOD для дальних кварталов города — proxy mesh с 15K полигонов вместо 400 объектов
  4. LOD Bias 0.6 для Android в Quality Settings

Результат: 22 FPS → 54 FPS в том же районе карты.

Программный LOD для UI-элементов

LOD применяется не только к 3D-геометрии. Частицы, UI, тени — тоже требуют уровней детализации.

Particle System LOD (Unity): Particle System → LOD Level — уменьшаем Max Particles и emission rate для дальних частиц. Взрыв в 100 метрах — достаточно 10 частиц вместо 200.

Shadow Distance: тени дорогие. На мобиле — Shadow Distance = 30–50 meters вместо стандартных 150:

QualitySettings.shadowDistance = 40f; // метры от камеры
QualitySettings.shadowCascades = 2;   // 2 каскада вместо 4

Инструменты верификации LOD

Unity LOD Group Visualizer (Scene View → Debug Mode → LOD) — показывает цветом текущий активный LOD для каждого объекта. Зелёный = LOD 0, жёлтый = LOD 1, красный = LOD 2+.

// Программная проверка текущего LOD в runtime
var lodGroup = GetComponent<LODGroup>();
var lods = lodGroup.GetLODs();
// Camera.CalculateLODDistanceFactor используем для предварительного расчёта

Сроки

Настройка LOD для 20–30 объектов — 2–3 дня. Полная LOD-система для мобильной игры с HLOD — 1–2 недели.