Розробка системи освітлення мобільної гри
Реалтайм освітлення на мобільних пристроях — це постійний торг. Один динамічний Point Light в URP з тінями на Adreno 640 коштує близько 1.5-2.5 мс на кадр. При цільових 60 FPS увесь бюджет кадру — 16.6 мс, і два таких джерела вже займають третину бюджету лише на світло. Ми перебрали десятки конфігурацій, поки не знайшли золоту середину: запікати все, що не рухається, і залишати 1-2 реалтаймових джерела для ігрових подій.
Стратегія освітлення під мобільний GPU
Фундаментальний вибір — співвідношення запеченого (baked) і динамічного (realtime) світла. Для більшості мобільних ігор правило просте: все статичне освітлення запікаємо, динамічне — мінімум. Запечене освітлення в 10 разів швидше за динамічне на мобільних пристроях.
В 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 |
Що входить у розробку системи освітлення?
- Аналіз сцен та цільових пристроїв — підбір стратегії (baked/realtime mix).
- Налаштування lightmap resolution та атласування — усунення перевитрати ресурсів.
- Розстановка Light Probes та налаштування Proxy Volume.
- Оптимізація динамічних джерел: обмеження Per-Object Limit, кешування корутин.
- Профілювання та фіксація — Frame Debugger, GPU Capture, Instruments.
- Підсумкова документація з освітлення для команди (конфіги, схеми, метрики).
Маємо 10+ років досвіду та виконали 50+ проєктів з освітлення для мобільних ігор. Ми гарантуємо, що система освітлення працюватиме в рамках бюджету 16.6 мс для 60 FPS на цільових пристроях. Вартість робіт — від 5000$ за базову конфігурацію. Пишіть нам для оцінки вашого проєкту — готові виконати роботу під ключ за 2-4 тижні.
Документація Unity URP: https://docs.unity3d.com/Manual/universal-render-pipeline.html
Типові помилки при налаштуванні освітлення
- Використання 4+ реалтаймових джерел на мобілі.
- Занадто висока роздільна здатність lightmap для фонового оточення.
- Забули розставити Light Probes — динамічні об'єкти виглядають пласкими.
- Включення SSAO без тестування продуктивності.
- Нехтування batching та GPU instancing для світлових об'єктів.







