К списку уроков

Урок 4. Дизайн уровней, часть 2

Онлайн и в Б-829, 16 октября (четверг), 15:30

На этом занятии мы переходим от создания локальных сцен к построению масштабных миров. Мы изучим инструменты для генерации и оформления ландшафтов, а также современные технологии Unreal Engine 5 для управления производительностью и организации огромных уровней.

Курс по Unreal Engine 5. Занятие 3: Дизайн уровней 2

Оглавление

  1. Landscape (Ландшафт): Создание и скульптурирование рельефа

  2. Foliage (Растительность): Оптимизированное размещение объектов

  3. Организация сцены: Иерархия и нейминг, разбиение на слои

  4. Level Streaming (Стриминг уровней): Классический подход во всех проектах

  5. World Partition (Разделение мира): Современный стандарт UE5

  6. Дополнительные материалы.

1. Landscape (Ландшафт): Создание и скульптурирование рельефа

Концепция: Landscape — это специализированный актор, представляющий собой оптимизированную плоскость (plane) с настраиваемой высотой вершин (heightmap), предназначенный для создания рельефа местности.

1.1. Создание ландшафта

  1. Перейдите в режим Landscape Mode (горячая клавиша Shift + 2).

  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 (Раскраска):

    • Позволяет раскрашивать ландшафт разными слоями материала (трава, земля, камень).

    • Процесс работы:

      1. В материале ландшафта используется нода Landscape Layer Blend. К ней подключаются разные текстуры/материалы.

      2. Для каждого слоя в Landscape Layer Blend необходимо создать Landscape Layer Info Object. Это делается нажатием + рядом с названием слоя в режиме Paint.

      3. После создания Layer Info объекты появляются в списке, и ими можно рисовать как кистью.

    • Будем ещё рассматривать в уроках по материалам.

2. Foliage (Растительность): Оптимизированное размещение объектов

Концепция: Режим Foliage (Shift + 3) предназначен для массового, процедурного размещения статических мешей (не только растений) с использованием технологии Instanced Static Mesh (ISM). Это позволяет отрисовывать тысячи одинаковых объектов за один вызов отрисовки (draw call), что критически важно для производительности. Если просто выставлять объекты одним за другим в сцену они будут менее производительны так как в памяти компьютора будут занимать отдельное место для каждого.

2.1. Процесс работы

  1. Перейдите в режим Foliage Mode.

  2. Перетащите Static Mesh ассеты из Content Browser в панель Foliage.

  3. Выберите меши, которыми хотите рисовать (галочки в окошках каждого ассета).

  4. Настройте параметры кисти и самого меша.

  5. Рисуйте на ландшафте или других объектах.

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 (список всех акторов на сцене) становится хаотичным. Правильная организация — залог эффективной работы.

Методы организации:

  1. Папки в World Outliner:

    • Создавайте папки для логической группировки акторов.

    • Рекомендуемая структура:

      • _Lighting (Все источники света, Sky Atmosphere, Fog)

      • _Geo (Геометрия уровня: статические меши, ландшафт)

        • GeoArchitecture

        • GeoProps

      • _Gameplay (Триггеры, спаунеры, игровые объекты)

      • _Volumes (Post Process, Blocking, и т.д.)

    Символ _ в начале имени поднимает папку в верх списка для быстрого доступа.

  2. Соглашения об именовании (Naming Conventions) как в оутлайнере так и в файлах игры:

    • Используйте префиксы для акторов, чтобы понимать их тип, не выделяя их.

    • Примеры: SM_Rock_01 (Static Mesh Actor), L_Main (Level), PPV_Global (Post Process Volume).

4. Level Streaming (Стриминг уровней): Классический подход

Метод разбиение большого мира на отдельные файлы уровней (.umap), которые подгружаются и выгружаются из памяти динамически.

  • Persistent Level (Постоянный уровень): Основной уровень, который всегда загружен. Он содержит общие элементы (свет, небо) и логику для загрузки других уровней.

  • Sublevels (Подуровни): Части мира, которые подгружаются.

Процесс работы:

  1. Откройте окно Levels (Window -> Levels).

  2. Создайте новые или добавьте существующие уровни как подуровни.

  3. Выделите подуровень и в панели 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): Система автоматически генерирует упрощенные меши (прокси) для дальних, выгруженных ячеек сетки, чтобы мир на горизонте не выглядел пустым.

Как это работает:

  1. Включение: World Partition включается при создании уровня через шаблон Open World или в настройках мира (World Settings -> Enable World Partition).

  2. Сетка: В редакторе можно включить отображение сетки (World Partition -> World Partition Editor), чтобы видеть, как мир разделен.

  3. Загрузка в редакторе: По умолчанию в редакторе загружена только область вокруг камеры. Чтобы загрузить определенные регионы для редактирования, выделите их в World Partition Editor и выберите Load Selected Regions.

Вывод: Для любых проектов с большим открытым миром в Unreal Engine 5 World Partition является предпочтительным и наиболее мощным решением. Классический Level Streaming остается актуальным для более коридорных игр с четким разделением локаций (например, комната -> коридор -> другая комната).

Задания