Перейти к основному содержимому

Графы материалов

Если стандартных материалов не хватает, соберите свой из нод. А ещё с помощью графа можно сделать полноэкранный эффект.

Стандартных типов материалов хватает для большинства проектов. Если нет — соедините ноды в граф, и редактор превратит его в настоящий материал.

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

Все ноды и их порты — в справочнике нод шейдеров: 95 нод.

Материалы из графа не хуже встроенных

Материал из графа получает такое же освещение, как встроенные типы, например standard, physical и toon, и тоже работает на телефонах.

Создайте граф материала​

  1. Откройте Редактор материалов на левой панели.
  2. Нажмите + Создать материал, чтобы начать с пустого графа. Или нажмите Склонировать существующий материал, чтобы начать с копии материала, который у вас уже есть.
  3. Добавьте ноды и соедините их — от входов к ноде выхода.
  4. Назначайте материал объектам, как любой другой.

Граф можно создать и на панели Ассеты проекта: нажмите правой кнопкой мыши и выберите Создать ассет → Материал-граф.

Как устроен граф​

Граф идёт от входов через вычисления к выходу. Ноды разбиты на группы:

ГруппаЧто там
ВходыUV, нормаль поверхности, время, позиция, текстуры, номер рисуемой копии
Константычисла и цвета, которые вы вводите сами
Математикаарифметика и кривые для отдельных чисел
Векторысборка, разбор, смешивание и поворот векторов и цветов
Освещениесоставляющие освещения, которые вы настраиваете сами
Постобработканоды, которые читают готовый кадр; см. экранные эффекты
Выходкак в итоге выглядит поверхность

Выходы поверхности​

Граф заканчивается нодой выхода. Её входы описывают поверхность:

ВыходЧто означает
baseColorцвет поверхности
metallic0 — не металл, 1 — чистый металл; промежуточные значения нужны редко
roughness0 — гладко, как зеркало, 1 — полностью матово
normalсвоя нормаль, чтобы добавить поверхности деталей
emissiveсвет, который поверхность излучает сама
alphaпрозрачность
clearcoat · clearcoatRoughnessпрозрачный слой лака сверху
ior · transmission · thicknessпреломление света в толще поверхности — для стекла и жидкостей

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

Разный вид у каждой копии​

Две ноды входов сделаны для инстансов — объектов, которые рисуются много раз:

  • instanceId сообщает, какая копия сейчас рисуется;
  • instanceColor даёт оттенок этой копии.
Тысяча копий, которые не похожи друг на друга

Подайте instanceId в хеш, и каждая копия получит свой оттенок, размер или ритм анимации. Трава, где каждая травинка качается немного по-своему, обходится так же, как трава, где все травинки качаются одинаково.

На обычном объекте обе ноды возвращают безопасные значения по умолчанию. Поэтому граф работает и на объектах, которые не являются инстансами.

Экранные эффекты​

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

Настраивать ничего не нужно. Как только в графе появляется нода, которая читает кадр, например screenColor, граф становится эффектом.

Чтобы добавить эффект:

  1. Откройте Настройки пространства.
  2. Если раздела Постобработка ещё нет, нажмите + Добавить возможность и выберите Постобработка.
  3. Нажмите + Добавить эффект и выберите свой граф.

Несколько эффектов применяются в том порядке, который вы задали.

Текстуры и цвет​

Нода текстуры читает изображение из вашего проекта. Цветные изображения преобразуются автоматически, поэтому вычисления идут с настоящими значениями цвета.

Помечайте текстуры с данными как данные

Некоторые текстуры хранят числа, а не цвет: карта шероховатости, маска, карта высот. Помечайте их как данные, иначе к ним применится цветокоррекция и значения получатся немного неверными. Это самая частая причина, по которой карта шероховатости выглядит совсем не так, как должна.

Как менять материал из графа во время работы сцены​

Скрипт не может менять настройки графа: у скриптов нет доступа к компоненту графа. Но две частые задачи всё равно решаются:

Что нужноКак сделать
чтобы что-то анимировалось самоиспользуйте вход time внутри графа для пульсации, движения текстуры или мерцания
чтобы что-то реагировало на игруиспользуйте обычный материал: скрипт может менять у него emissiveIntensity, color, opacity или roughness

Например, маяк, который бесконечно пульсирует, — это граф, который читает time. А маяк, который становится ярче, когда игрок набирает очки, — это скрипт, который меняет emissiveIntensity у стандартного материала.

Советы​

  • Начинайте с существующего материала. Склонировать существующий материал превращает стандартный материал в граф. Вы получаете правильную и полную основу. На пустом холсте пришлось бы заново собирать освещение, хотя этого не требовалось.
  • Следите за тем, что добавляете. Граф выполняется для каждого пикселя в каждом кадре. Чтение текстуры — дешёвая операция, цикл — нет. Если после правки упала частота кадров, проверьте последнюю добавленную ноду.
  • Один граф — один вид. Когда вы меняете граф, обновляются все объекты, которые его используют. Поэтому вид исправляется в одном месте.

Дальше: Частицы — огонь, дым, искры и пыль.