Ми створюємо 3D-моделі оточення для мобільних ігор — будівлі, пропси, ландшафти. Основний фокус — продуктивність: кожен модуль оптимізовано під 60 FPS на пристроях середнього сегмента. Досвід понад 5 років і більше 20 випущених проєктів гарантують, що Level Designers отримають набір конструктора, а не просто красиві картинки.
Оточення в мобільній 3D-грі — це не набір красивих об'єктів. Це система модульних мешів, яку level designer може збирати як конструктор, з батченими матеріалами, правильною оклюзією та полігональним бюджетом, що дозволяє рендерити цілу сцену в 60fps на iPhone 13.
Модульний підхід — основа продуктивності. Замість унікальних мешів кожної будівлі ми створюємо базові блоки (підлога, стіна, кут, дверний отвір, стеля), з яких збирається будь-який рівень. Це не просто зручність — це прямий вплив на продуктивність через Draw Call Batching.
Чому модульність критична для мобільної гри?
В Unity: Static Batching об'єднує нерухомі об'єкти з однаковим матеріалом в один draw call. Умова: однаковий Material (один і той же instance). 50 стін з одного prefab з одним матеріалом = 1 draw call замість 50. GameObjects → Static має бути включений. Збільшує RAM (об'єднані меші зберігаються в пам'яті), тому для мобайлу обережно із загальним розміром статик-геометрії.
GPU Instancing — для повторюваних об'єктів (дерева, каміння, рослини), які все ж можуть рухатися. Один виклик GPU малює N копій з різними матрицями трансформації. В Unity: Material.enableInstancing = true.
Сітка снапінгу: всі модулі створюються під спільну сітку — 1м, 0.5м, 0.25м. Точки кріплення (snap vertices) на краях модулів. У Blender — налаштування Snap to Vertex при моделюванні, Unit Scale = 1.0 (не 0.01, інакше масштаб не збігається з Unity's 1 unit = 1 meter).
Техніки оптимізації оточення
Occluder і occludee. Великі стіни, будівлі повинні бути occluder'ами — об'єктами, що приховують те, що за ними. В Unity Occlusion Culling — запікаємо дані через Window → Rendering → Occlusion Culling → Bake. Об'єкти за стінами не рендеряться взагалі. Для мобільної гри з інтер'єрами (dungeon crawler, RPG) це критично — без оклюзії кожна кімната завантажує GPU, навіть якщо не видна.
Collision mesh. Колізія не повинна збігатися з візуальним мешем. Для складного об'єкта (корявий дерево, руїни) — простий Box/Capsule Collider достатній для геймплею, економить Physics CPU. В Unity: Mesh Collider з Convex = true для опуклих об'єктів, Box/Capsule Collider для простих форм.
Detail meshes vs terrain. Unity Terrain + Detail Meshes для трави та дрібної рослинності — вбудована система з LOD і culling. Для мобайлу: Detail Distance не більше 30–50 units, Detail Density обмежуємо (трава з щільністю 1.0 дає тисячі об'єктів). Billboard detail type (плоска текстура трави) швидше повноцінних 3D мешів.
Порівняння технік оптимізації draw calls
| Техніка | Принцип | Коли використовувати | Вплив на FPS |
|---|---|---|---|
| Static Batching | Об'єднання статик-геометрії з однаковим матеріалом | Нерухомі об'єкти (стіни, підлога) | +20–40% при зниженні draw calls з 50 до 1 |
| GPU Instancing | Один draw call на безліч однакових об'єктів | Повторювані об'єкти (дерева, каміння) | +10–20% при великій кількості копій |
| Occlusion Culling | Не рендерити об'єкти за occluder'ами | Інтер'єри, закриті простори | +30–60% залежно від архітектури |
Як рівні деталізації (LOD) впливають на продуктивність?
| Рівень LOD | Полігональний бюджет | Коли видно | Застосування |
|---|---|---|---|
| LOD0 | 100% | Близько до камери | Hero props, ключові об'єкти |
| LOD1 | 50–60% | Середня дистанція | Secondary props, більшість об'єктів |
| LOD2 | 10–20% або billboard | Дальній план | Filler, масовка |
Запікання освітлення (Light Baking)
Real-time Global Illumination на мобайлі занадто дорога. Стандарт — запікане освітлення через Unity Lightmapper (вбудований або Progressive GPU Lightmapper). Lightmap Resolution 10–20 texels/unit для оточення, 40+ для важливих об'єктів. Lightmap Size максимум 2048 на мобайлі — кілька атласів при великій сцені.
URP Baked Global Illumination: об'єкти з Contribute Global Illumination беруть участь у запіканні. Динамічні об'єкти (персонажі) отримують GI через Light Probes — розставляються в редакторі в місцях, де переміщуються персонажі.
Ambient Occlusion для оточення — через запікання в текстуру (Substance Painter або Blender bake), не через real-time SSAO. SSAO на мобайлі — luxury, якого немає в бюджеті продуктивності.
Як ми оптимізуємо освітлення?
З практики: мобільний runner, Unity URP. Сцена з міськими блоками: 300 draw calls, FPS 35 на Xiaomi Redmi 10. Проблема: кожен модульний блок мав свій екземпляр матеріалу (через випадкову зміну кольору в інспекторі на деяких об'єктах). Матеріали перестали бути ідентичними — static batching зламався. Після скидання всіх матеріалів до вихідного shared instance: 45 draw calls, FPS 60 стабільно. Економія при використанні запіканого освітлення замість real-time — до 30% бюджету на GPU.
Стилістика та рівень деталізації
Hero props — ключові об'єкти, які гравець бачить крупним планом: скрині, двері, вівтарі. Висока деталізація, якісні текстури 1024×1024 або 2048×2048.
Secondary props — меблі, декор, звичайні елементи оточення. Середня деталізація, атласовані текстури (кілька об'єктів на одному атласі).
Filler / background props — далекий фон, масовка. Мінімальна деталізація, LOD2 або billboard.
Trim sheets — один текстурний атлас зі смужками різних матеріалів (цегла, метал, дерево), який накладається на модульні меші. Дозволяє одним атласом покрити все оточення локації. Популярна техніка в AAA розробці, застосовна і в мобайлі.
Як ми створюємо модульний набір (покроково)
- Аналізуємо геймплей та устрій рівнів: визначаємо типи приміщень, переходів, кількість унікальних пропсів.
- Проектуємо сітку модульних блоків (підлога, стіни, кути, дверні отвори) зі спільною сіткою snap.
- Моделюємо блоки в Blender з урахуванням UV для атласу та другого UV для lightmap.
- Створюємо текстурні атласи та trim sheets (наприклад, цегла, дерево, метал) для скорочення числа матеріалів.
- Експортуємо у FBX/glTF з коректними pivot points і масштабом.
- Імпортуємо в Unity, налаштовуємо static batching та occlusion culling, тестуємо draw calls і FPS.
Чек-лист приймання модулів
- Єдина сітка snap (0.5м або 0.25м)
- UV2 для lightmap
- LOD0 і LOD1
- Проста колізія (Box/Capsule)
- Матеріали з одного shared instance
- Pivot point в центрі нижньої грані
Що входить в роботу (під ключ)
- Модульний набір геометрії для локації (підлога, стіни, стелі, переходи, декор)
- Hero props з повним текстурним набором
- LOD0 + LOD1 для об'єктів оточення
- Налаштування UV для запікання освітлення (Lightmap UV, другий UV-канал)
- Оптимізовані колізії
- Експорт у FBX/glTF з правильними pivot points
- Тест у рушії: Draw Calls, батчинг, Occlusion Culling
Терміни та вартість
Модульний kit для однієї локації (20–40 унікальних модулів) — 4–8 тижнів залежно від складності стилістики та кількості hero props. Повне оточення для mid-size мобільної гри (3–5 локацій) — 2–4 місяці. Вартість розраховується індивідуально і залежить від обсягу робіт. Оцінимо ваш проєкт за 2 дні — напишіть нам для консультації.







