Редактор материалов
Редактор материалов позволяет визуально создавать собственные материалы без единой строчки кода — просто создавайте ноды и объединяйте их в граф! Он достаточно прост для пользователей, которые плохо знакомы с созданием материалов, и достаточно мощен, чтобы можно было делать множество вещей. Краткий список функций включает в себя:
- Возможность создавать собственные базовые материалы (.mgraph) и использовать их как непосредственно назначенные объектам или как исходные материалы для сотен других материалов, чтобы избежать повторной сборки графа материала. Вам поможет окно иерархии материалов.
- Возможность создавать собственные пользовательские ноды графа, используя другие ноды (Подграфы) или код. Когда вы изменяете содержимое подграфа, все материалы, использующие его, также обновятся.
- Возможность переключения между типами материалов (на данный момент доступно пять: Mesh Opaque PBR, Mesh Alpha Test PBR, Mesh Transparent PBR, Mesh Transparent Unlit, Decal PBR).
- Возможность подключения и отключения функций, влияющих на производительность.
- Возможность создания пользовательского интерфейса конечного материала, вы можете добавлять различные параметры и даже объединять их в группы для удобства.
- Connector — особый "свернутый" режим ноды графа, когда она занимает меньше места и может подключаться прямо ко входу другой ноды графа.
- Expression — специальная нода, позволяющая писать простые арифметические операции, но главное, что ее можно использовать как swizzle в сочетании с возможностью изменения количества компонентов данных. Вам это точно понравится!
- Способность написать код в специальной ноде Function, здесь можно реализовать даже несколько функций, вызывающих друг друга.
- Вы можете перетаскивать текстуры из Asset Browser или напрямую из вашего файлового менеджера, и они будут автоматически импортированы с соответствующими нодами, добавленными к графу.
- Циклы — сложная, но очень крутая функция, позволяющая многократно повторять произвольную последовательность действий. Мы проанализировали несколько существующих реализаций циклов графа и изобрели новую, которая почти не уступает циклам в коде. Почему бы тогда не написать циклы в коде? Потому что использование графа значительно упрощает реализацию сложных вещей внутри цикла по сравнению с кодом.
- При работе со сложными или большими графами вы можете столкнуться с пересечением большого количества соединений, и вам понадобится больше визуальной ясности. Вот когда порталы вступают в игру. Вы можете подсоединить ребро к ноде Portal In в одном месте, а затем разместить ноду Portal Out в любом другом месте, которое вам нужно, и взять то, что вы передали в Portal In, из Portal Out (как будто вы вырыли туннель для своего провода под графом).
Смотрите также#
Ассет графа материала#
Ресурс Material Graph (.mgraph) представляет собой как сеть исходных материалов (описание на основе нод, которое компилируется в материал), так и обычный базовый материал который может быть назначен на поверхность меша.
Чтобы создать новый граф материала, щелкните правой кнопкой мыши Asset Browser, чтобы открыть меню Create, затем выберите Create Material → Material Graph.
Укажите имя для вашего ассета графа. Новый ассет *.mgraph будет создан в текущей папке вашего проекта.
Поскольку ассет Material Graph представляет собой базовый материал, он также доступен в корне Materials Hierarchy и может быть назначен на поддерживаемые поверхности и объекты. В зависимости от типа материала его можно назначить на следующие объекты:
-
Материалы мешей:
- Поверхности мешей Static, Dynamic и Skinned;
- Поверхности Mesh Clutter / Mesh Cluster.
-
Материалы декалей:
- Декали Projected, Orthographic и Mesh.
Работа с графами материалов#
Щелкните правой кнопкой мыши ассет *.mgraph и выберите Edit Graph или просто дважды щелкните по ассету, чтобы открыть его в окне Material Editor.
Окно Material Editor включает в себя окно Graph View, в котором отображаются сеть графа материала и панель настроек.
Сеть графа материала состоит из нод — функциональных блоков, отвечающих за обработку входных данных. Составляя сеть графов, вы определяете внешний вид материала.
Нода Material является главной нодой материала. Она предоставляет набор входных данных для графических данных и генерирует материал определенного типа в зависимости от текущих настроек .
Наконец, выход Мастер-ноды подключается к ноде Final — основной выходной ноде материала.
Нажмите кнопку Save, чтобы сохранить изменения и скомпилировать граф материала в базовый материал. Ошибки компиляции, если таковые имеются, будут перечислены в панели Предупреждения и ошибки и в окне Console.
Навигация#
Перетаскивание с нажатым колесиком мыши или нажатой ПКМ | Сдвиг графа материала |
---|---|
Прокрутка колесиком мыши | Увеличение/уменьшение масштаба |
ПКМ / пробел | Показать панель создания нод |
Щелчок ЛКМ | Выбор ноды/ребра |
Перетаскивание ЛКМ на ноде | Переместить выбранные ноды |
Перетаскивание ЛКМ на пустой области | Выделение нод с помощью инструмента «Прямоугольник» |
Двойной щелчок ЛКМ на пустой области | Отображение меню создания ноды |
Shift + ЛКМ на ноде | Добавить ноду к текущему выделению |
Ctrl + ЛКМ на ноде | Удалить ноду из текущего выделения |
Ctrl + C | Скопировать выбранные ноды в буфер обмена |
Ctrl + V | Вставить ноды из буфера обмена |
Ctrl + D | Клонировать выбранные ноды |
Клавиша Delete | Удалить выбранные ноды/ребра |
Общие настройки#
Общие настройки определяют набор поддерживаемых свойств материала.
Type | Тип выходного материала:
|
---|---|
Vertex Mode | Определяет режим для корректировки вершин а также входы для тесселяции:
|
Vertex Space | Определяет векторное пространство для корректировки вершин и тесселяции. Варианты зависят от выбранного Vertex Mode:
|
Normal Space |
Определяет пространство для векторов нормалей:
|
Depth Mode |
Определяет, как обрабатываются данные глубины:
|
Depth Shadow | Флаг, указывающий, влияет ли изменение глубины на тени. |
Tessellation | Включает входы для параметров тесселяции и настройки тесселяции. |
Two Sided | Включает опцию Two Sided. |
Write Velocity Offset | Включает вход Velocity. |
Advanced Mode | Включает настройки компиляции. |
Настройки прозрачного материала#
Следующие настройки доступны только для типов материалов Mesh Transparent PBR и Mesh Transparent Unlit.
Blend Mode |
Набор предустановок смешивания. Можно выбрать один из следующих:
|
---|---|
Blend Src | Опция, используемая для масштабирования исходного цвета (цвет накладываемого материала). Доступно только при выборе предустановки Custom. |
Blend Dest | Параметр, используемый для масштабирования целевого цвета (цвет скрытого материала). Доступно только при выборе предустановки Custom. |
Overlap | Включает параметр Overlap. |
Depth Test | Включает параметр Depth Test. |
Depth Write | Включает параметр Depth Write. |
Participate in PostEffects | Включает параметры Post Processing. |
Настройки материала декали#
Следующие настройки доступны только для типов материалов Decal PBR.
Normal Under Decal |
Определяет касательное пространство (матрицу Tangent-Binormal-Normal), используемое для отображения нормалей:
|
---|---|
Normal Blend Mode |
Режим смешивания для нормалей декалей:
|
Screen Projection | Включает проекцию декали на экран вместо проецирования ее на поверхность (поддерживаются только надписи Mesh). |
Настройки компиляции#
Эти настройки предназначены только для компилятора Direct3D (API DirectX).
Optimization Level | Уровень оптимизации шейдеров и арифметического рефакторинга (например, слияние инструкции multiply, за которой следует add, в объединенный mad):
|
---|---|
Warning Mode |
Доступны следующие режимы:
|
IEEE Strictness | Принудительно выполняет строгую компиляцию IEEE. |
Параметры#
В панели Parameters определяется список параметров материала.
Доступны следующие элементы управления:
- Add — добавить новый параметр.
- Clone — клонировать выбранный параметр.
- Move Up — переместить выбранный параметр вверх по списку.
- Move Down — переместить выбранный параметр вниз по списку.
- Remove — удалить выбранный параметр.
При добавлении нового параметра вы должны указать имя параметра, тип и настройки по умолчанию в диалоге создания параметра. Предусмотрен следующий набор типов параметров:
- Slider — значение с плавающей запятой в указанном диапазоне (по умолчанию [0.0f; 1.0f]).
- Color — вектор с плавающей запятой из 4 компонентов, представляющих значение цвета.
- Texture2D, Texture3D, Texture2DArray, TextureCube — текстура соответствующего типа.
- Group — вспомогательный тип для группировки параметров. Используйте кнопки и для изменения порядка и группировки параметров.
- Float, Float2, Float3, Float4 — значение с плавающей запятой или вектор из N значений с плавающей запятой.
- Int, Int2, Int3, Int4 — целочисленное значение или вектор из N целочисленных значений.
Чтобы использовать параметр в графе материала, перетащите элемент в Graph View, чтобы создать ноду соответствующего типа:
Предупреждения и ошибки#
Панель Warnings and Errors позволяет отслеживать проблемы на графе материала и видна только в том случае, если они есть.
Панель перечисляет все проблемные ноды в графе; выберите запись, чтобы увидеть проблемы с портами или данными в разделе Message.
Некоторые предупреждения могут появляться после переноса контента на более позднюю версию SDK. Это предупреждения-напоминания, предназначенные для уведомления об изменениях в логике определенных нод. Вы можете отказаться от предупреждения, нажав кнопку Remove Warning.
Ноды#
Ноды редактора материалов — это функциональные блоки, представляющие источники данных и инструкции по обработке, аналогичные переменным и функциям в программировании шейдеров.
У большинства нод предварительный просмотр вывода отображается на сфере предварительного просмотра (для большинства нод) или на плоскости (для текстур).
Некоторые ноды имеют набор настроек, определяющих их поведение. Двойной щелчок по ноде открывает диалоговое окно для настройки ее параметров.
Ноды, имеющие не более одного входного и одного выходного порта имеют специальный режим коннектора — для удобства они сворачиваются . Свернутая нода, соединенная с другой нодой, становится присоединенной к ней. Перетащите свернутую ноду, чтобы разорвать соединение и отсоединить ноду.
Ноды разделены на несколько групп на основании их применимости и имеют цветовую кодировку для более удобной идентификации.
Порт#
Порт определяет вход (слева) или выход (справа) ноды. Подключение ребра к порту позволяет данным проходить по сети нод графа материалов.
Каждый порт имеет тип данных, определяющий ребра, которые могут быть к нему подключены. Все типы данных имеют цветовую кодировку, что означает, что каждый из них имеет соответствующий цвет, используемый для идентификации.
float | float2 | float3 | float4 |
int | int2 | int3 | int4 |
matrix — матрица значений с плавающей запятой: float2×2, float3×3, float4×4 . | |||
текстура — любой тип текстуры: Texture 2D, Texture 3D, Texture2DArray а также Texture Cube. | |||
bool — логическое значение, используемое в логических нодах, а также циклах. | |||
any — произвольный тип данных, означающий, что порт поддерживает несколько типов данных. | |||
error — указывает на ошибку (например, не введены необходимые данные или не удалось выполнить преобразование типа). |
К любому входному порту можно подключить только одно ребро, но к выходному порту можно подключить несколько ребер.
Большинство входных портов имеют входное значение по умолчанию .
Ребро#
Ребро представляет собой соединение между двумя портами (вход и выход). Ребра определяют, как данные проходят через сеть нод Material Graph. Вы можете подключить ребро только от выходного порта к входному порту.
Новое ребро создается путем перетаскивания из нужного выходного порта в желаемый входной порт или наоборот. Чтобы удалить ребро, выберите его левым щелчком и нажмите Delete.
Адаптеры портов#
Адаптер порта — это функция, дающая вам возможность выбирать компоненты данных в произвольном порядке, комбинировать и переупорядочивать их, обеспечивая удобный доступ к элементам и большую гибкость. Он доступен для следующих типов данных:
- bool;
- float, float2, float3, float4;
- int, int2, int3, int4.
Когда вы перетаскиваете новое ребро на входящий порт, появляется ряд доступных вариантов подключения:
- Опция = обеспечивает прямое соединение в случае, если тип ввода может предоставить все необходимые компоненты данных.
- При выборе другого параметра создается нода Expression, отвечающая за преобразование типов.
Адаптер можно изменить позже, дважды щелкнув выражение и отредактировав поле. Нода Expression позволяет вам писать простые арифметические операции и даже использовать графический API Unigine.
Добавление новых нод#
Чтобы добавить новую ноду, щелкните правой кнопкой мыши фон или нажмите пробел и выберите тип ноды из панели или введите ее имя в поле Search.
Перетаскивание ребра из входного порта открывает панель создания нод с предустановленным фильтром на требуемый тип данных для соответствующего порта.
Текстуры можно перетаскивать прямо из Asset Browser. В этом случае будет автоматически добавлена нода Sample Texture с соответствующими настройками.
Циклы#
Иногда нужно выполнить определенные действия несколько раз, но клонирование соответствующих групп нод очень быстро сделает ваш граф слишком сложным, даже если требуется всего 10 итераций. В UNIGINE для этого можно создавать циклы, как и в программировании.
Чтобы создать цикл, добавьте ноды Loop Begin и Loop End и соедините их порты Loop.
Дважды щелкнув по ноде Loop Begin, вы можете открыть конструктор ввода, позволяющий добавлять, переупорядочивать, переименовывать, удалять существующие входы (изменяющиеся переменные или другие вспомогательные значения) и неявно задавать их тип, а также устанавливать максимальное количество итераций .
Затем постройте граф, реализующий функционал одной итерации, результат которого необходимо передать ноде Loop End для последующих итераций. Вы можете использовать результат всех итераций дальше в графе.
Вы можете использовать значения Index текущей итерации и значения Maximum Iterations в своей логике. Index начинается с 0 и равняется Maximum Iterations-1 на последней итерации.
Вот пример простого цикла, увеличивающего значение на 0,1 10 раз:
Нода Loop End имеет входной порт break, который принимает логическое значение, по умолчанию false. Передача значения истинности (например, полученного с помощью логической ноды) прервет цикл и выйдет из текущей итерации.
Пользовательский код#
Независимо от того, насколько продвинута система материалов, вам может понадобиться что-то особенное, возможно, слишком сложное для реализации с помощью базовых нод. Или иногда может быть быстрее написать несколько строк кода для математических операций, чем создавать кучу нод и соединять их. Решение простое — создайте ноду Function и оберните в нее любую шейдерную функцию. Входные и выходные порты для ноды должны автоматически генерироваться в соответствии с сигнатурой функции.
Чтобы добавить или отредактировать код в ноде, дважды щелкните по ней, откроется окно редактора кода . Вы можете написать столько функций, сколько вам нужно, последняя функция в коде будет считаться основной.
Порталы#
Иногда, особенно в графах сложных материалов, слишком много пересекающихся ребер делают весь граф похожим на паутину, а поток данных очень трудно понять. Портал — это набор специальных нод, включающий один вход и один или несколько выходов, имеющих одинаковое имя. Порталы служат для уменьшения количества ребер и делают граф более «читабельным».
Чтобы создать портал, начните с добавления ноды Portal In. Подключите вход к новой ноде и дважды щелкните по ней, чтобы настроить его цвет и имя.
И тогда вы можете создать столько нод Portal Out, сколько вам нужно. Двойным щелчком по ноде Portal Out можно выбрать имя нужного входного портала, если используется несколько порталов.
Подграфы#
Подграф — это особый тип графа материала, на который можно ссылаться внутри других графов материала. Это может быть очень полезно, когда одни и те же операции должны выполняться несколько раз в одном графе или в нескольких графах. Вы просто упаковываете эти операции в коробку с набором входов и выходов и затем используете эту коробку везде, где вам нужно. Есть три основных отличия подграфа от графа материала:
- Подграф не создает никакого материала, он используется в качестве строительного блока в графах материалов.
- Подграф не имеет нод Material и Final. Вместо этого у него есть две ноды с именами Inputs и Outputs, определяющие все входные и выходные порты.
- Подграф хранится в ассете *.msubgraph.
По сути, процесс построения подграфа такой же, как и при создании графа материала.
Чтобы создать новый подграф, щелкните правой кнопкой мыши в Asset Browser, чтобы открыть меню Create, затем выберите Create Material -> Material Graph.
Нажмите Save, чтобы применить и сохранить изменения.
Все подграфы автоматически добавляются в панель создания нод, поэтому, если вы начнете вводить имя такого подграфа в поле поиска панели создания нод, то он будет отображаться в списке.
Настройка входов и выходов#
Дважды щелкните по ноде Inputs или ноде Outputs, чтобы открыть панель конструктора, позволяющую добавлять, переупорядочивать, удалять и устанавливать имя и тип входных и выходных портов подграфа соответственно.
Подключая ноды к портам Inputs, вы указываете необязательные порты подграфа, имеющие значения по умолчанию.
Использование подграфов#
Чтобы добавить подграф к графу материала, открытому в данный момент в Редакторе, просто найдите его по имени в панели создания нод либо перетащите его из Asset Browser, либо вы можете добавить ноду Sub Graph в свою сеть графа, указать ассет *.msubgraph, дважды щелкнув по ноде, и подключить необходимые ребра к входным и выходным портам подграфа.
Существует набор основных подграфов, реализующих основные функции (например, contrast, refract, object_triplanar и т. д.), которые хранятся в папке core/subgraphs.