Разработка системы освещения мобильной игры от идеи до оптимизации

Разработка системы освещения мобильной игры Реальтайм освещение на мобильных устройствах — это постоянный торг. Один динамический Point Light в URP с тенями на Adreno 640 стоит около 1.5-2.5 мс на кадр. При целевых 60 FPS весь бюджет кадра — 16.6 мс, и два таких источника уже занимают треть бюдже

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Разработка системы освещения мобильной игры от идеи до оптимизации
Средний
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    880
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    764
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1188
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1060
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    985
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    583

Разработка системы освещения мобильной игры

Реальтайм освещение на мобильных устройствах — это постоянный торг. Один динамический Point Light в URP с тенями на Adreno 640 стоит около 1.5-2.5 мс на кадр. При целевых 60 FPS весь бюджет кадра — 16.6 мс, и два таких источника уже занимают треть бюджета только на свет. Мы перебирали десятки конфигураций, пока не нашли золотую середину: запекать всё, что не движется, и оставлять 1-2 реалтаймовых источника для игровых событий.

Стратегия освещения под мобильный GPU

Фундаментальный выбор — соотношение запечённого (baked) и динамического (realtime) света. Для большинства мобильных игр правило простое: всё статичное освещение запекаем, динамическое — минимум.

В Unity URP это: Mixed Lighting со Subtractive или Shadowmask режимом. Subtractive быстрее — тени от статики запекаются в lightmap, динамические объекты отбрасывают тень на статику через mixed light. Shadowmask точнее, но требует дополнительную текстуру на GPU.

Lightmap resolution — типичная ошибка завышения. Texels per unit = 20 для детальной геометрии и 4-8 для фонового окружения. Гигантский lightmap 2048×2048 за один атлас на всю локацию — хорошо. Двадцать мелких lightmap по 256×256 — плохо, это двадцать texture binds. Чтобы избежать этого, группируем статику в один атлас и повторно используем материалы.

Когда оправданы динамические источники?

Динамический свет нужен для игровых событий: взрыв, выстрел, интерактивные факелы. Реализация через короткоживущий Light с интерполяцией Range:

IEnumerator FlashLight(Light light, float intensity, float duration) { float elapsed = 0f; while (elapsed < duration) { light.intensity = Mathf.Lerp(intensity, 0f, elapsed / duration); elapsed += Time.deltaTime; yield return null; } light.enabled = false; } 

Такой вспышечный свет можно не включать в shadow casting — визуально разница минимальна, а производительность значительно лучше.

Ограничение количества Per-Object lights. В URP Light настройку Additional Lights > Per Object Limit выставляем в 1-2 для мобильных пресетов. По умолчанию 8 — это десктопное значение. Наш опыт: на Adreno 618 два реалтаймовых источника без теней дают 0.8 мс дополнительного времени.

Как работают Light Probes?

Персонажи и враги двигаются через запечённые зоны и должны получать правильное ambient-освещение. Light Probe Group расставляем в точках смены освещения: вход в тень, зона факела, темный коридор. LightProbeProxyVolume для крупных динамических объектов — заменяет интерполяцию между пробами на объёмную выборку.

Без Light Probes персонаж в тёмном углу светится, как будто стоит на солнце — ambient из Skybox применяется без учёта позиции.

Ambient Occlusion: мобильные альтернативы

Screen Space AO (SSAO) на мобиле — нет. Дорого и не нужно при правильных lightmap. Альтернативы:

  • Запечённый AO в lightmap — бесплатно в рантайме, настраивается в Generate Lighting настройках.
  • Vertex AO — запекается в vertex color, сэмплируется в шейдере, полностью бесплатно.
  • GTAO в URP 15+ — экспериментально, на топовых мобильных GPU допустимо при низком radius.

Godot 4: освещение в 2D

В 2D-играх на Godot: CanvasItemMaterial с Light Mode = Normal Map Only позволяет использовать normal maps на спрайтах и получать псевдо-3D освещение без реального 3D. PointLight2D с Shadow Enabled = false стоит дёшево. DirectionalLight2D для имитации солнца в top-down играх.

Нормал-маппинг в 2D — мощный инструмент: игра выглядит объёмно, а рендерится как flat sprites. На мобиле это существенно выгоднее, чем переход в 3D ради визуальной глубины.

Как профилировать освещение?

Unity Frame Debugger показывает все draw calls по освещению. Xcode GPU Frame Capture на iOS даёт точный breakdown по шейдерным инвокациям. Цель: Shadow Map passes — не более 1-2 за кадр, Additional Lights — не более 2 реалтаймовых источника одновременно.

Параметр Целевое значение Критическое значение
Shadow Map passes ≤2 >4
Realtime lights per object 1-2 >4
Lightmap atlas size 2048×2048 Множество мелких атласов
Additional Lights total ≤4 >8

Что входит в разработку системы освещения?

  1. Анализ сцен и целевых устройств — подбор стратегии (baked/realtime mix).
  2. Настройка lightmap resolution и атласирование — устранение перерасхода ресурсов.
  3. Расстановка Light Probes и настройка Proxy Volume.
  4. Оптимизация динамических источников: ограничение Per-Object Limit, кэширование корутин.
  5. Профилирование и фиксация — Frame Debugger, GPU Capture, Instruments.
  6. Итоговая документация по освещению для команды (конфиги, схемы, метрики).

Наш опыт: 10+ лет в мобильной разработке, 50+ проектов с оптимизацией под iOS/Android. Мы гарантируем, что система освещения будет работать в рамках бюджета 16.6 мс для 60 FPS на целевых устройствах. Свяжитесь с нами для консультации или расчёта стоимости под ваш проект.

Документация Unity URP: https://docs.unity3d.com/Manual/universal-render-pipeline.html

Типичные ошибки при настройке освещения
  • Использование 4+ реалтаймовых источников на мобиле.
  • Слишком высокое разрешение lightmap для фонового окружения.
  • Забыли расставить Light Probes — динамические объекты выглядят плоскими.
  • Всключение SSAO без тестирования производительности.