Занятие 5: Основы материалов (МОГУТ БЫТЬ ОШИБКИ НЕ ПРОВЕРЕНО)
Презентация с занятия
Оглавление
Теория работы с материалами (PBR)
Интерфейс редактора материалов
Создание базового материала
Material Instance: Оптимизация и итерация
Математические операции: Логика материалов
Тайлинг (Tiling): Повторение текстур
Material Functions: Переиспользование логики
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. Создание базового материала
Процесс:
Создание ассета: ПКМ в Content Browser -> Material. Назовите его, например, M_MyFirstMaterial.
Подготовка текстур: Импортируйте необходимые текстуры (Base Color, Normal, Roughness и т.д.).
Добавление текстур в материал: Перетащите ассеты текстур из Content Browser прямо в граф материала. Будут созданы ноды Texture Sample.
Соединение нод:
Выход RGB ноды Texture Sample с картой цвета подключите ко входу Base Color главной ноды.
Выход RGB ноды Texture Sample с картой нормалей — ко входу Normal.
Один из каналов (обычно красный R) текстуры Roughness — ко входу Roughness. Примечание: Часто текстуры Roughness, Metallic и AO упаковываются в одну RGB-текстуру по разным каналам для оптимизации.
Нажмите Save или Apply, чтобы скомпилировать материал и увидеть результат.
4. Material Instance: Оптимизация и итерация
Проблема: Каждый раз, когда вы изменяете базовый материал, движок полностью его перекомпилирует, что может занимать много времени. Если вам нужно 10 версий одного и того же материала, но с разным цветом, создавать 10 базовых материалов — крайне неэффективно.
Решение: Material Instance (Экземпляр материала).
Концепция: Material Instance — это "дочерний" ассет, который наследует всю логику родительского материала, но позволяет быстро изменять только определенные, вынесенные в него параметры, без перекомпиляции.
Создание параметров в базовом материале:
Вместо статических значений (например, ноды Constant с числом) используйте ноды параметров.
Зажмите S и кликните ЛКМ, чтобы создать ScalarParameter (одно число). Зажмите V и кликните, чтобы создать VectorParameter (цвет или 4 числа).
ПКМ на ноде Texture Sample -> Convert to Parameter.
Важно: Дайте каждому параметру уникальное и понятное имя.
Создание и работа с инстансом:
ПКМ на базовом материале -> Create Material Instance. Назовите его MI_MyMaterial_Red.
Откройте инстанс. Вы увидите не граф, а простой список параметров, которые вы создали.
Поставьте галочку напротив параметра, который хотите изменить, и задайте новое значение. Результат будет виден мгновенно.
Золотое правило: Всегда работайте через инстансы. Базовый материал — это шаблон/конструктор. Инстансы — это его конкретные реализации.
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-координатами.
Добавьте ноду TextureCoordinate (или TexCoord). Она выводит UV-координаты меша (обычно в диапазоне от 0 до 1).
Добавьте ноду Multiply.
Подключите TextureCoordinate к входу A ноды Multiply.
Создайте ScalarParameter с именем Tiling и подключите его к входу B.
Результат Multiply подключите ко входу UVs вашей ноды Texture Sample.
Теперь, изменяя параметр Tiling в инстансе материала, вы можете управлять количеством повторений текстуры. Tiling=2 повторит текстуру 2 раза по каждой оси.
7. Material Functions: Переиспользование логики
Проблема: Часто вам нужна одна и та же сложная логика в нескольких разных материалах (например, настройка тайлинга, эффект мокрой поверхности, смешивание слоев по маске). Копировать десятки нод из одного материала в другой — плохая практика.
Решение: Material Function (Функция материала).
Концепция: Это отдельный ассет, который содержит в себе часть графа материала. Эту функцию затем можно использовать как одну ноду в любом другом материале.
Создание:
ПКМ в Content Browser -> Materials & Textures -> Material Function.
Внутри функции создайте нужную логику. Используйте ноды FunctionInput для входящих данных и FunctionOutput для результата.
Сохраните функцию.
Теперь в любом материале вы можете найти вашу функцию в палитре и использовать её как обычную ноду.
8. Material Parameter Collection: Глобальные параметры
Проблема: Как изменить один и тот же параметр (например, "уровень влажности" или "количество снега") одновременно в сотне разных материалов на уровне?
Решение: Material Parameter Collection (Коллекция параметров материала).
Концепция: Это глобальный ассет, который хранит в себе набор скалярных и векторных параметров. Любой материал в проекте может "читать" значения из этой коллекции.
Процесс работы:
Создайте ассет Material Parameter Collection (ПКМ -> Materials & Textures).
Внутри него добавьте нужные параметры (например, ScalarParameter с именем GlobalWetness).
В любом материале добавьте ноду CollectionParameter и выберите в её настройках вашу коллекцию и нужный параметр.
Теперь, если вы измените значение GlobalWetness в коллекции (например, через Blueprint во время дождя), все материалы, использующие этот параметр, мгновенно обновятся.