Материал (Material) в Unreal Engine

Что такое Material (материал) в Unreal Engine

Material (материал) в Unreal Engine — это специализированный ассет, который применяется к Mesh (3D-модели) и определяет визуальные свойства её поверхности.

Также рекомендую скачать мою бесплатную книгу по Blueprint для Unreal Engine.

Основная цель книги — дать общий, целостный и понятный обзор системы Blueprint. Книга предлагает взгляд с высоты «птичьего полёта» — ясную и чёткую карту игрового мира Unreal Engine, которая поможет увидеть ключевые взаимосвязи и понять, как устроена система визуального скриптинга.

Зарегистрироваться в ЛК и скачать книгу [Blueprints. Взгляд с высоты «птичьего полёта»]

Material (материал) в Unreal Engine
Material (материал) в Unreal Engine

По сути, материал представляет собой набор инструкций для графического процессора (GPU), описывающих, как поверхность объекта взаимодействует со светом в реальном времени.

В основе материала лежат ключевые параметры, определяющие внешний вид поверхности. К ним относятся:

  • Base Color — задаёт базовый цвет,
  • Metallic — отвечает за степень металличности,
  • Roughness — определяет шероховатость,
  • Specular — влияет на зеркальные отражения,
  • Opacity — контролирует прозрачность,
  • и Normal — описывает направление нормалей поверхности.

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

Материалы в Unreal Engine не ограничиваются статичными текстурами и позволяют создавать сложные динамические эффекты. Например, движение воды или травы может быть реализовано прямо в материале за счёт смещения вершин с помощью World Position Offset, изменения UV-координат или динамического управления параметрами. Эти методы дают возможность изменять внешний вид и даже форму объекта на уровне шейдера без изменения его базовой геометрии.

Дополнительно материалы поддерживают эффект свечения через Emissive, а также позволяют реализовывать износ, грязь, повреждения и другие визуальные детали. Более продвинутые техники включают параллакс и процедурные эффекты, которые могут зависеть от времени, положения объекта или игровых событий.

Излучающий свет Emissive-материал
Излучающий свет Emissive-материал

Создание и настройка материалов осуществляется в Material Editor — визуальном редакторе, построенном на узловой системе.

Редактор материалов Material Editor
Редактор материалов Material Editor

Материал формируется в виде графа из узлов, называемых Material Expressions, где каждый узел выполняет определённую функцию: одни работают с текстурами, другие задают параметры, третьи выполняют математические операции или логические преобразования. Центральным элементом графа является узел Material Output, который определяет итоговые свойства поверхности. Все входные параметры, подключённые к нему, такие как Base Color, Roughness, Metallic, Normal или Emissive, формируют финальный внешний вид, тогда как остальные узлы используются для создания, преобразования и комбинирования данных, а также для структурирования сложной логики.

После составления материала в Material Editor и сохранения его в отдельный ассет, в итоге он компилируется движком в шейдерный код на языке HLSL. Такой подход даёт возможность работать с материалами без прямого программирования шейдеров, сохраняя при этом гибкость шейдерной логики.

Shader (шейдер) — это программа, выполняемая на графическом процессоре. В Unreal Engine шейдеры определяют, как именно поверхность взаимодействует со светом, как рассчитываются её цвет, отражения и прозрачность, а также как она может деформироваться.

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

Разработчику в Unreal Engine обычно не требуется писать шейдерный код вручную. Вместо этого используется Material Editor, который автоматически преобразует созданный граф в код на языке HLSL. Этот процесс включает несколько этапов: сначала создаётся граф из узлов, затем движок компилирует его, объединяя с внутренними шаблонами, и генерирует шейдерный код, после чего видеокарта выполняет эти инструкции для каждой вершины и каждого пикселя с учётом источников света в сцене.

Шейдер материала, написанный на шейдерном языке HLSL
Шейдер материала, написанный на шейдерном языке HLSL

Таким образом, материал (Material) в Unreal Engine представляет собой визуальный граф, создаваемый в редакторе, тогда как шейдер — это низкоуровневый код, в который этот граф автоматически преобразуется. В итоге, материалы являются не просто средством оформления, а комплексной системой, определяющей взаимодействие объекта со светом, геометрией и окружением. Именно они играют ключевую роль в достижении реалистичности, художественной выразительности и оптимальной производительности сцены.

Material Editor — визуальный редактор материалов

Итак, чтобы создать ассет материала, перейдём в Content Browser, нажмём кнопку Add и выберем пункт Material. В результате будет создан новый ассет материала, которому зададим имя M_BaseColor. Обратите внимание, что согласно общепринятым соглашениям об именовании, для материалов используется префикс M_.

Создание ассета материала в Unreal Engine
Создание ассета материала в Unreal Engine

Кликнув дважды по данному ассету материала, перед нами откроется Material Editor — редактор материалов.

Material Editor — редактор материалов
Material Editor — редактор материалов

Как уже говорилось ранее, Material Editor в Unreal Engine представляет собой визуальный инструмент для создания материалов, позволяющий управлять внешним видом поверхностей без необходимости писать код на шейдерном языке. Он построен на узловой системе, где логика материала формируется через соединение различных узлов в единый граф, который затем автоматически компилируется в шейдерный код и выполняется на GPU.

Центральным элементом интерфейса редактора является рабочая область Material Graph. Именно здесь происходит основная работа: здесь мы можем размещать различные узлы и соединять их между собой, формируя тем самым логику материала.

Рабочая область Material Graph
Рабочая область Material Graph

В графе всегда присутствует главный узел — Main Material Node, который определяет итоговые свойства поверхности.

Главный узел материала — Main Material Node
Главный узел материала — Main Material Node

Он содержит входные параметры, такие как Base Color, Metallic, Roughness, Normal и другие, каждый из которых отвечает за определённую физическую характеристику материала. Подключая к этим входам различные источники данных — текстуры, параметры или результаты математических операций — формируется финальный визуальный облик материала.

Результат работы можно сразу увидеть в окне предпросмотра Viewport — отдельной панели, в которой материал отображается на выбранной геометрии, такой как сфера, куб, плоскость или пользовательский меш.

Viewport - окно предпросмотра материала
Viewport — окно предпросмотра материала

Управление во Viewport осуществляется с помощью мыши: левая кнопка позволяет вращать объект, а правая — приближать и отдалять камеру. Важной особенностью является возможность настраивать освещение и окружение через вкладку Preview Scene Settings, что позволяет оценить поведение материала в различных условиях освещения и повысить точность визуальной настройки.

Для настройки параметров используется панель Details. Она является контекстной, то есть её содержимое зависит от выбранного элемента. Если в графе не выделен ни один узел, в панели отображаются глобальные настройки материала, такие как:

  • Material Domain — тип материала,
  • Blend Mode — режим смешивания,
  • и Shading Model — модель освещения.
Details - панель настроек материала
Details — панель настроек материала

Если же выбран конкретный узел, в Details можно изменить его свойства — например, указать текстуру для Texture Sample или задать значение для параметра.

Дополнительно в интерфейсе присутствует панель Palette, которая служит библиотекой всех доступных узлов.

Панель Palette
Панель Palette

Она структурирована по категориям, таким как математические операции, работа с текстурами или вспомогательные функции. Пользователь может либо перетаскивать узлы из палитры в граф, либо быстро находить их через поиск. Это значительно ускоряет процесс сборки материала и делает его более удобным.

Контроль производительности и корректности материала осуществляется через панель Stats.

Панель Stats
Панель Stats

В ней отображается техническая информация, включая количество инструкций, которое будет выполнять шейдер. Напомню, весь граф, который мы здесь составляем, затем компилируется в шейдерный язык, содержащий конкретные инструкции для видеокарты. Поэтому показатель количества инструкций напрямую влияет на производительность: чем он выше, тем «тяжелее» материал для видеокарты. Также здесь выводятся ошибки компиляции, если в графе есть некорректные соединения.

Верхняя панель инструментов (Toolbar) предоставляет быстрый доступ к основным действиям.

Toolbar - верхняя панель инструментов
Toolbar — верхняя панель инструментов

Кнопка Apply компилирует изменения и обновляет материал в мире (на уровне), но не сохраняет сам ассет на диск. Для записи изменений в файл проекта нужно нажать Save, а функция Clean Up автоматически удаляет все узлы, которые не вносят вклад в финальное дерево графа, помогая поддерживать граф в чистом и оптимизированном состоянии.

Рабочий процесс в Material Editor обычно строится последовательно. Сначала создаются необходимые узлы — либо через контекстное меню в графе, либо из панели Palette. Затем настраиваются их параметры в Details, после чего узлы соединяются между собой, формируя логику материала и передавая данные в главный узел. В процессе работы результат постоянно контролируется в окне Viewport, а производительность — в панели Stats. После завершения изменений материал применяется с помощью кнопки Apply.

Таким образом, Material Editor позволяет создавать как простые, так и крайне сложные материалы — от базовых поверхностей до динамических эффектов вроде воды, огня или процедурных текстур. При этом он избавляет разработчика от необходимости напрямую работать с HLSL-кодом, сохраняя всю гибкость и возможности современных шейдеров.

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

Чтобы создать свой первый материал, необходимо определить его основные параметры, задаваемые через главный узел — Main Material Node. На самом деле, базовый материал уже существует по умолчанию: в нём заранее установлены стандартные значения. Например, Base Color имеет серый цвет, Metallic равен 0, а Roughness (шероховатость)0.5.

Материал по умолчанию
Материал по умолчанию

Большинство параметров в этом узле задаются в диапазоне от 0 до 1, где 0 означает полное отсутствие свойства, а 1 — его максимальное значение. Некоторые параметры представляют собой векторы. Например, Normal — это вектор направления, определяющий ориентацию поверхности.

Параметр Base Color также задаётся вектором, состоящим из 3 компонентов, значения которых соответствуют цветовой модели RGB и определяют количество красного, зелёного и синего в итоговом цвете.

Для примера можно задать жёлтый цвет и сразу обратить внимание на окно Viewport: результат отображается в реальном времени, позволяя увидеть, как будет выглядеть материал.

Жёлтый материал
Жёлтый материал

Если затем установить Metallic в значение 1, материал приобретёт выраженные металлические свойства. Уменьшив Roughness до 0, можно получить гладкую, блестящую поверхность, напоминающую полированный металл, например золото.

Материал - жёлтый отполированный металл
Материал — жёлтый отполированный металл

На этом этапе значения задавались напрямую в Main Material Node. Такой способ стал доступен в последних версиях Unreal Engine, однако на практике он используется редко. Жёсткое задание параметров неудобно, поскольку такие значения нельзя гибко изменять или выносить в настраиваемые параметры. В реальной работе параметры обычно задаются через отдельные узлы, что позволяет в дальнейшем их конвертировать в параметры для Material Instance, о котором мы поговорим чуть позже, тем самым управляя значениями без изменения самого материала.

Для этого в граф добавляются специальные константные узлы. Существует несколько их типов:

Constant - константные узлы
Constant — константные узлы
  • Constant — задаёт одно числовое значение,
  • Constant2Vector — два значения,
  • Constant3Vector — три значения,
  • и Constant4Vector — соответственно, четыре значения.

Для удобства их добавления предусмотрены горячие клавиши. Например, удерживая клавишу 1 и нажимая левую кнопку мыши, можно создать узел с одним значением. Аналогично, клавиши 2, 3 и 4 создают соответствующие векторные узлы.

Создадим узел Constant3Vector, который обычно используется для задания цвета. В его настройках выберем, например, красный цвет. У этого узла есть несколько выходов: можно использовать как объединённое значение RGB, так и отдельные каналы (R, G, B). В данном случае подключим полный RGB к параметру Base Color.

Затем добавим узел Constant для задания Metallic и установим значение 1. Аналогично создадим ещё один Constant для Roughness и зададим, например, значение 0.2.

Материал - красный матовый металл
Материал — красный матовый металл

В результате получится красный металлический материал с небольшой шероховатостью — визуально он будет выглядеть как слегка матовый металл.

Material Instance

Итак, мы с вами создали свой первый базовый материал — красный, слегка матовый металл. Давайте теперь применим его к модели. Перейдём на уровень и добавим тестовый Актор — обычный куб. Данный актор содержит в себе компонент Static Mesh, который отображает 3D-модель. Соответственно, в свойствах Static Mesh мы можем задать как сам меш, так и выбрать для него конкретный материал. Либо же можно просто взять нужный материал и перетащить его из Content Browser прямо на объект в сцене — движок автоматически определит всё и применит материал к кубу.

Красный материал, применённый на тестовый куб
Красный материал, применённый на тестовый куб

Хорошо, но что, если нам нужен такой же материал, то есть слегка матовый металл, но другого цвета? Где можно изменить цвет? Только в самом материале. Но если нам нужен, например, и красный, и зелёный вариант, придётся скопировать ассет материала и в копии изменить цвет. А если затем потребуется внести изменения в сам материал, их придётся повторять во всех копиях, что является неправильным подходом.

Для решения этой проблемы в Unreal Engine существует специальный инструмент — Material Instance, то есть экземпляры материала. Чтобы лучше понять, что это такое, можно провести аналогию с Blueprint-классами и их экземплярами. Blueprint-класс — это шаблон, по которому создаются объекты. Эти объекты имеют одинаковую структуру, но могут содержать разные значения параметров.

Аналогично и с материалами. Сам материал — это своего рода шаблон, который перед использованием компилируется движком. Если материал сложный, процесс компиляции может занимать значительное время. Material Instance — это экземпляр такого материала, который позволяет:

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

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

Чтобы создать Material Instance, нужно кликнуть по материалу правой кнопкой мыши и выбрать пункт Create Material Instance. Рядом появится новый ассет. По соглашению об именовании используется префикс MI_. Назовём его, например, MI_RedMetallic и откроем его.

Create Material Instance
Create Material Instance

Внутри мы увидим окно Viewport с визуальным отображением материала и панель настроек справа, где указан родительский материал.

Редактор Material Instance
Редактор Material Instance

Однако параметров цвета там не будет. Это связано с тем, что для использования параметров в инстансе их необходимо сначала создать в самом материале.

Перейдём обратно в материал. В данный момент он состоит из узлов, задающих Metallic и Roughness, а также узла, задающего Base Color. Чтобы сделать цвет настраиваемым, нужно преобразовать соответствующий узел в параметр. Для этого кликнем по нему правой кнопкой мыши и выберем пункт Convert to Parameter. В результате узел станет параметром.

Convert to Parameter
Convert to Parameter

Теперь зададим ему имя, например Color. Отмечу, что названия параметров в рамках одного материала должны быть уникальными, иначе потом в инстансе могут быть проблемы. Также можно указать значение по умолчанию (Default Value) и, при необходимости, задать группу (Group), иначе говоря, категорию, в которой параметр будет отображаться в инстансе. После этого нажмём Apply.

Узел Constant3Vector, конвертированный в параметр Color
Узел Constant3Vector, конвертированный в параметр Color

Вернёмся в наш инстанс MI_RedMetallic. В разделе параметров появится наш параметр Color. Если активировать его (поставить галочку), можно изменить значение. Пока оставим его без изменений.

Настраиваемый параметр Color в Material Instance
Настраиваемый параметр Color в Material Instance

Теперь создадим ещё один инстанс, например MI_BlueMetallic, откроем его и изменим параметр Color, установив синий цвет. Сохраним изменения.

MI_BlueMetallic с параметром Color, установленным в голубой цвет
MI_BlueMetallic с параметром Color, установленным в голубой цвет

В итоге в нашей папке сейчас один базовый материал, который определяет логику (матовый металл), и несколько Material Instance, задающих конкретные варианты, например разные цвета.

Базовый материал и Material Instance, созданные от него
Базовый материал и Material Instance, созданные от него

Использовать инстансы для задания материалов объектам, различающимся параметрами, гораздо правильнее и эффективнее, чем создавать отдельные материалы для каждой вариации.

Также стоит упомянуть, что существуют еще и Dynamic Material Instances, которые создаются в Blueprint динамически во время игры. Они позволяют менять параметры (например, цвет при получении урона или уровень загрязнения) программно прямо во время игрового процесса.

Blueprint-узел Create Dynamic Material Instances, создающий динамический Material Instances
Blueprint-узел Create Dynamic Material Instances, создающий динамический Material Instances

Краткий итог

Material в Unreal Engine — это ассет, который определяет внешний вид поверхности 3D-объекта и её взаимодействие со светом. Он задаётся через параметры (цвет, металличность, шероховатость, нормали, прозрачность и др.) и может включать сложные визуальные и динамические эффекты.

Материалы создаются в Material Editor — визуальном узловом редакторе, где логика собирается в граф и затем автоматически компилируется в шейдерный код (HLSL), выполняемый на GPU. Это позволяет работать без ручного программирования шейдеров. Шейдеры — это низкоуровневые программы (вершинные и пиксельные), которые рассчитывают геометрию и цвет каждого пикселя.

Также для удобства и производительности используются:

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

Материалы — это не просто «текстуры», а гибкая система, управляющая внешним видом, поведением и производительностью объектов в сцене.

Напоминаю про мою бесплатную книгу по Blueprint для Unreal Engine.

Основная цель книги — дать общий, целостный и понятный обзор системы Blueprint. Книга предлагает взгляд с высоты «птичьего полёта» — ясную и чёткую карту игрового мира Unreal Engine, которая поможет увидеть ключевые взаимосвязи и понять, как устроена система визуального скриптинга.

Зарегистрироваться в ЛК и скачать книгу [Blueprints. Взгляд с высоты «птичьего полёта»]

Оцените статью
( 1 оценка, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.