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

Урок 6. Работа с материалами, часть 1

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

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

Занятие 5: Основы материалов (МОГУТ БЫТЬ ОШИБКИ НЕ ПРОВЕРЕНО)

Презентация с занятия

Оглавление

  1. Теория работы с материалами (PBR)

  2. Интерфейс редактора материалов

  3. Создание базового материала

  4. Material Instance: Оптимизация и итерация

  5. Математические операции: Логика материалов

  6. Тайлинг (Tiling): Повторение текстур

  7. Material Functions: Переиспользование логики

  8. Material Parameter Collection: Глобальные параметры

1. Теория работы с материалами (PBR)

Unreal Engine использует модель рендеринга Physically Based Rendering (PBR), что означает "физически корректный рендеринг". Вместо того чтобы имитировать свет и цвет, PBR-материалы описывают реальные физические свойства поверхности, а движок сам рассчитывает, как она будет выглядеть при разном освещении.

Ключевые PBR-атрибуты (входы материала):

  • Base Color (Базовый цвет): Определяет основной цвет поверхности. Для не-металлов это диффузный цвет (цвет краски, дерева). Для металлов — цвет отражения (золото, медь). Это текстура, также известная как Albedo.

  • Metallic (Металличность): Определяет, является ли поверхность металлом. Принимает значения от 0 (диэлектрик, не-металл) до 1 (металл). Промежуточные значения используются редко, в основном для имитации грязи или ржавчины на металле.

  • Roughness (Шероховатость): Один из самых важных параметров. Определяет, насколько микроскопически неровной является поверхность.

    • Roughness = 0: Идеально гладкая поверхность, дает четкие, зеркальные отражения (хром, зеркало).

    • Roughness = 1: Максимально шероховатая поверхность, рассеивает свет во все стороны, отражения размыты (резина, бетон).

  • Normal (Карта нормалей): Текстура, которая создает иллюзию детализированного рельефа на низкополигональной поверхности, не изменяя её геометрию. Она "обманывает" свет, заставляя его отражаться под разными углами.

  • Ambient Occlusion (AO): Карта, которая затемняет участки, куда свету трудно попасть (углы, щели, складки). Добавляет модели глубину и объем.

2. Интерфейс редактора материалов

Двойной клик по ассету материала открывает Material Editor.

  • Центральная область (Graph): Нодовый редактор, где происходит вся работа. Здесь вы соединяете ноды для создания логики материала.

  • Главная нода материала (Main Material Node): Финальная нода, в которую подключаются все результаты. Её входы — это и есть PBR-атрибуты (Base Color, Metallic и т.д.).

  • Панель Details (слева): При выделении главной ноды здесь отображаются глобальные настройки материала:

    • Material Domain: Определяет, где будет использоваться материал (Surface, Light Function, UI).

    • Blend Mode: Режим смешивания.

      • Opaque: Непрозрачный, стандартный режим.

      • Masked: Режим "вырезания". Позволяет создавать материалы с четкими, непрозрачными краями (сетка, листва).

      • Translucent: Полупрозрачный (стекло, вода).

    • Shading Model: Модель затенения (Default Lit для большинства поверхностей, Unlit для светящихся объектов, не зависящих от освещения).

  • Палитра (справа): Список всех доступных нод, отсортированных по категориям.

3. Создание базового материала

Процесс:

  1. Создание ассета: ПКМ в Content Browser -> Material. Назовите его, например, M_MyFirstMaterial.

  2. Подготовка текстур: Импортируйте необходимые текстуры (Base Color, Normal, Roughness и т.д.).

  3. Добавление текстур в материал: Перетащите ассеты текстур из Content Browser прямо в граф материала. Будут созданы ноды Texture Sample.

  4. Соединение нод:

    • Выход RGB ноды Texture Sample с картой цвета подключите ко входу Base Color главной ноды.

    • Выход RGB ноды Texture Sample с картой нормалей — ко входу Normal.

    • Один из каналов (обычно красный R) текстуры Roughness — ко входу Roughness. Примечание: Часто текстуры Roughness, Metallic и AO упаковываются в одну RGB-текстуру по разным каналам для оптимизации.

  5. Нажмите Save или Apply, чтобы скомпилировать материал и увидеть результат.

4. Material Instance: Оптимизация и итерация

Проблема: Каждый раз, когда вы изменяете базовый материал, движок полностью его перекомпилирует, что может занимать много времени. Если вам нужно 10 версий одного и того же материала, но с разным цветом, создавать 10 базовых материалов — крайне неэффективно.

Решение: Material Instance (Экземпляр материала).

  • Концепция: Material Instance — это "дочерний" ассет, который наследует всю логику родительского материала, но позволяет быстро изменять только определенные, вынесенные в него параметры, без перекомпиляции.

  • Создание параметров в базовом материале:

    1. Вместо статических значений (например, ноды Constant с числом) используйте ноды параметров.

    2. Зажмите S и кликните ЛКМ, чтобы создать ScalarParameter (одно число). Зажмите V и кликните, чтобы создать VectorParameter (цвет или 4 числа).

    3. ПКМ на ноде Texture Sample -> Convert to Parameter.

    4. Важно: Дайте каждому параметру уникальное и понятное имя.

  • Создание и работа с инстансом:

    1. ПКМ на базовом материале -> Create Material Instance. Назовите его MI_MyMaterial_Red.

    2. Откройте инстанс. Вы увидите не граф, а простой список параметров, которые вы создали.

    3. Поставьте галочку напротив параметра, который хотите изменить, и задайте новое значение. Результат будет виден мгновенно.

Золотое правило: Всегда работайте через инстансы. Базовый материал — это шаблон/конструктор. Инстансы — это его конкретные реализации.

5. Математические операции: Логика материалов

Граф материала позволяет выполнять сложные математические операции для достижения уникальных эффектов.

  • Основные ноды:

    • Add (сложение, клавиша A): Увеличивает яркость, смешивает цвета.

    • Subtract (вычитание, клавиша S): Уменьшает яркость.

    • Multiply (умножение, клавиша M): Затемняет, используется для комбинирования масок.

    • Divide (деление, клавиша D): Осветляет.

    • Lerp (LinearInterpolate) (клавиша L): Ключевая нода. Плавно смешивает значения A и B на основе маски Alpha. Если Alpha=0, результат A. Если Alpha=1, результат B. Если Alpha=0.5, результат — смесь 50/50.

    • Clamp: Ограничивает значение в диапазоне от 0 до 1. Полезно для того, чтобы случайно не получить отрицательные цвета или значения Roughness > 1.

6. Тайлинг (Tiling): Повторение текстур

Задача: Замостить большую поверхность маленькой повторяющейся текстурой (например, кирпичная стена, асфальт).

Решение: Манипуляция с UV-координатами.

  1. Добавьте ноду TextureCoordinate (или TexCoord). Она выводит UV-координаты меша (обычно в диапазоне от 0 до 1).

  2. Добавьте ноду Multiply.

  3. Подключите TextureCoordinate к входу A ноды Multiply.

  4. Создайте ScalarParameter с именем Tiling и подключите его к входу B.

  5. Результат Multiply подключите ко входу UVs вашей ноды Texture Sample.

  6. Теперь, изменяя параметр Tiling в инстансе материала, вы можете управлять количеством повторений текстуры. Tiling=2 повторит текстуру 2 раза по каждой оси.

7. Material Functions: Переиспользование логики

Проблема: Часто вам нужна одна и та же сложная логика в нескольких разных материалах (например, настройка тайлинга, эффект мокрой поверхности, смешивание слоев по маске). Копировать десятки нод из одного материала в другой — плохая практика.

Решение: Material Function (Функция материала).

  • Концепция: Это отдельный ассет, который содержит в себе часть графа материала. Эту функцию затем можно использовать как одну ноду в любом другом материале.

  • Создание:

    1. ПКМ в Content Browser -> Materials & Textures -> Material Function.

    2. Внутри функции создайте нужную логику. Используйте ноды FunctionInput для входящих данных и FunctionOutput для результата.

    3. Сохраните функцию.

    4. Теперь в любом материале вы можете найти вашу функцию в палитре и использовать её как обычную ноду.

8. Material Parameter Collection: Глобальные параметры

Проблема: Как изменить один и тот же параметр (например, "уровень влажности" или "количество снега") одновременно в сотне разных материалов на уровне?

Решение: Material Parameter Collection (Коллекция параметров материала).

  • Концепция: Это глобальный ассет, который хранит в себе набор скалярных и векторных параметров. Любой материал в проекте может "читать" значения из этой коллекции.

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

    1. Создайте ассет Material Parameter Collection (ПКМ -> Materials & Textures).

    2. Внутри него добавьте нужные параметры (например, ScalarParameter с именем GlobalWetness).

    3. В любом материале добавьте ноду CollectionParameter и выберите в её настройках вашу коллекцию и нужный параметр.

    4. Теперь, если вы измените значение GlobalWetness в коллекции (например, через Blueprint во время дождя), все материалы, использующие этот параметр, мгновенно обновятся.

Задания