Мы создаём 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. Полный environment для mid-size мобильной игры (3–5 локаций) — 2–4 месяца. Стоимость рассчитывается индивидуально и зависит от объёма работ. Оценим ваш проект за 2 дня — напишите нам для консультации.







