Курс по Unreal Engine 5. Занятие 3: Дизайн уровней 2
Оглавление
Landscape (Ландшафт): Создание и скульптурирование рельефа
Foliage (Растительность): Оптимизированное размещение объектов
Организация сцены: Иерархия и нейминг, разбиение на слои
Level Streaming (Стриминг уровней): Классический подход во всех проектах
World Partition (Разделение мира): Современный стандарт UE5
Дополнительные материалы.
1. Landscape (Ландшафт): Создание и скульптурирование рельефа
Концепция: Landscape — это специализированный актор, представляющий собой оптимизированную плоскость (plane) с настраиваемой высотой вершин (heightmap), предназначенный для создания рельефа местности.
1.1. Создание ландшафта
Перейдите в режим Landscape Mode (горячая клавиша Shift + 2).
Откроется панель Create New. Здесь необходимо задать ключевые параметры будущего ландшафта.
Ключевые параметры при создании:
Material: Материал, который будет применен к ландшафту. Крайне важно создать и назначить его на этом этапе для последующей раскраски (painting).
Location / Rotation / Scale: Стандартные параметры трансформации. Важно: Scale по оси Z определяет максимальную высоту/глубину рельефа при скульптурировании.
Section Size: Размер одного "чанка" ландшафта в квадах (quads). Рекомендуемые значения — степени двойки минус один (например, 63x63, 127x127). Это оптимизирует расчет уровней детализации (LODs).
Sections Per Component: Сколько секций будет в одном компоненте. Компонент — это базовая единица для стриминга и расчета производительности. Стандартно 1x1 или 2x2.
Number of Components: Общее количество компонентов, определяющее итоговый размер ландшафта.
Overall Resolution: Итоговое разрешение ландшафта в вершинах. Рассчитывается автоматически на основе предыдущих параметров.
Рекомендация: Для большинства задач оптимальной конфигурацией является Section Size: 63x63 quads и Sections Per Component: 2x2 sections.
1.2. Инструменты редактирования
В режиме Landscape Mode доступны три основные вкладки:
Sculpt (Скульптурирование):
Sculpt: Основной инструмент для поднятия/опускания рельефа. (По умолчаню поднимает ланшафт, при зажатом шифтом опускает)
Smooth: Сглаживает острые углы и переходы.
Flatten: Выравнивает область до определенной высоты (высоту можно "захватить" с помощью Ctrl+ЛКМ).
Ramp: Создает ровный наклон (пандус) между двумя точками.
Erosion: Симулирует гидравлическую или термальную эрозию для создания более естественного рельефа.
Paint (Раскраска):
Позволяет раскрашивать ландшафт разными слоями материала (трава, земля, камень).
Процесс работы:
В материале ландшафта используется нода Landscape Layer Blend. К ней подключаются разные текстуры/материалы.
Для каждого слоя в Landscape Layer Blend необходимо создать Landscape Layer Info Object. Это делается нажатием + рядом с названием слоя в режиме Paint.
После создания Layer Info объекты появляются в списке, и ими можно рисовать как кистью.
Будем ещё рассматривать в уроках по материалам.
2. Foliage (Растительность): Оптимизированное размещение объектов
Концепция: Режим Foliage (Shift + 3) предназначен для массового, процедурного размещения статических мешей (не только растений) с использованием технологии Instanced Static Mesh (ISM). Это позволяет отрисовывать тысячи одинаковых объектов за один вызов отрисовки (draw call), что критически важно для производительности. Если просто выставлять объекты одним за другим в сцену они будут менее производительны так как в памяти компьютора будут занимать отдельное место для каждого.
2.1. Процесс работы
Перейдите в режим Foliage Mode.
Перетащите Static Mesh ассеты из Content Browser в панель Foliage.
Выберите меши, которыми хотите рисовать (галочки в окошках каждого ассета).
Настройте параметры кисти и самого меша.
Рисуйте на ландшафте или других объектах.
2.2. Ключевые параметры для каждого меша
Density: Количество мешей на 1000x1000 юнитов Unreal. Основной параметр, влияющий на густоту посадки.
Radius: Минимальное расстояние между инстансами одного типа. Помогает избежать наложения объектов друг на друга.
Scaling: Диапазон случайного изменения масштаба (Min / Max). Обязательно используйте, чтобы избежать эффекта "клонирования".
Placement -> Align to Normal: Если включено, объект будет повторять наклон поверхности (например, трава на склоне). Если выключено, объект будет всегда вертикален (например, деревья).
Placement -> Ground Slope Angle: Диапазон допустимого угла наклона поверхности. Позволяет запретить рост деревьев на отвесных скалах.
Instance Settings -> Cull Distance: Дистанция, на которой объекты перестают отрисовываться (Min / Max). Важнейший параметр для оптимизации! Устанавливайте минимально возможные значения (например, для травы 0-5000, для деревьев 0-20000).
3. Организация сцены: Иерархия и нейминг
По мере роста сложности уровня, World Outliner (список всех акторов на сцене) становится хаотичным. Правильная организация — залог эффективной работы.
Методы организации:
Папки в World Outliner:
Создавайте папки для логической группировки акторов.
Рекомендуемая структура:
_Lighting (Все источники света, Sky Atmosphere, Fog)
_Geo (Геометрия уровня: статические меши, ландшафт)
GeoArchitecture
GeoProps
_Gameplay (Триггеры, спаунеры, игровые объекты)
_Volumes (Post Process, Blocking, и т.д.)
Символ _ в начале имени поднимает папку в верх списка для быстрого доступа.
Соглашения об именовании (Naming Conventions) как в оутлайнере так и в файлах игры:
Используйте префиксы для акторов, чтобы понимать их тип, не выделяя их.
Примеры: SM_Rock_01 (Static Mesh Actor), L_Main (Level), PPV_Global (Post Process Volume).
4. Level Streaming (Стриминг уровней): Классический подход
Метод разбиение большого мира на отдельные файлы уровней (.umap), которые подгружаются и выгружаются из памяти динамически.
Persistent Level (Постоянный уровень): Основной уровень, который всегда загружен. Он содержит общие элементы (свет, небо) и логику для загрузки других уровней.
Sublevels (Подуровни): Части мира, которые подгружаются.
Процесс работы:
Откройте окно Levels (Window -> Levels).
Создайте новые или добавьте существующие уровни как подуровни.
Выделите подуровень и в панели Details выберите Streaming Method:
Blueprint: Загрузка/выгрузка управляется через Blueprints (например, при входе в Trigger Volume). Это дает полный контроль.
Афтоматическая загрузка при помощи быстрой настройки Stereaming Volume.
Always Loaded: Подуровень всегда загружен вместе с Persistent Level. Используется для организации, а не для оптимизации.
Недостатки: Требует ручной настройки триггеров и логики, что усложняет работу с большими открытыми мирами.
5. World Partition (Разделение мира): Современный стандарт UE5
Концепция: Автоматизированная система стриминга для огромных миров. Заменяет ручной Level Streaming. Мир разделен на сетку (grid), и ячейки этой сетки автоматически загружаются/выгружаются в зависимости от положения игрока.
Ключевые преимущества:
Автоматический стриминг: Не нужно настраивать триггеры. Система работает "из коробки".
"One File Per Actor" (OFPA): Каждый актор хранится в отдельном файле. Это кардинально решает проблему конфликтов при командной работе над одним уровнем. Несколько человек могут одновременно редактировать одну и ту же область мира.
Data Layers: Улучшенная версия слоев. Позволяет создавать разные вариации мира (например, "лето"/"зима" или "до квеста"/"после квеста") и переключаться между ними.
Hierarchical Levels of Detail (HLODs): Система автоматически генерирует упрощенные меши (прокси) для дальних, выгруженных ячеек сетки, чтобы мир на горизонте не выглядел пустым.
Как это работает:
Включение: World Partition включается при создании уровня через шаблон Open World или в настройках мира (World Settings -> Enable World Partition).
Сетка: В редакторе можно включить отображение сетки (World Partition -> World Partition Editor), чтобы видеть, как мир разделен.
Загрузка в редакторе: По умолчанию в редакторе загружена только область вокруг камеры. Чтобы загрузить определенные регионы для редактирования, выделите их в World Partition Editor и выберите Load Selected Regions.
Вывод: Для любых проектов с большим открытым миром в Unreal Engine 5 World Partition является предпочтительным и наиболее мощным решением. Классический Level Streaming остается актуальным для более коридорных игр с четким разделением локаций (например, комната -> коридор -> другая комната).