Найти в Дзене
XYZ School

Как быстро сделать текстуру в Substance Designer

Подробный гайд по созданию текстуры бетона от преподавателя курса «Процедурный трип» Антона Агеева. Работаем в Substance Designer — в этой же программе, кстати, создавали бетон для бруталистских интерьеров из Control.
Оглавление

Статья подготовлена командой XYZ MEDIA, ссылки на оригинал нашей статьи можно посмотреть внизу. Приятного прочтения.

----------

Привет, это Антон Агеев, — преподаватель курса по процедурным текстурам «Процедурный трип». Подробнее о нём можно прочитать в анонсе. На курсе я учу работать в Substance Painter и Designer и рассказываю, как создавать реалистичные процедурные текстуры на уровне профессионалов игровой индустрии.

Это — обучающий текст по созданию процедурной текстуры бетона в Substance Designer. Бетон — материал на первый взгляд тривиальный, но грамотное его использование поможет выстроить стилистику целой игры. Как, например, в прошлогодней Control.

Текстуры для неё, кстати, тоже делали в Substance Designer

Я подробно распишу процесс для новичков — если хочешь на курс, но не уверен, подойдёт ли он тебе, попробуй повторить все шаги в статье. Начинать можно с нуля, в пробной версии Designer на месяц, — если не уверен, хочешь ли сразу тратиться на профессиональные программы.

В каждом шаге я буду указывать точные значения параметров, которые использовал я, но это не значит, что тебе нужно повторять всё за мной — экспериментируй!

Повторяй за мной, создай собственную текстуру и выложи её в комментарии под этой статьёй. Автор работы, которая соберёт больше всего лайков, получит приз от XYZ — любой артбук стоимостью до 2 тысяч рублей.

Поехали!

Собираем референсы

Заходим на Artstation, Behance, Google и ищем подходящие образы.

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

Настраиваем программу

Интерфейс Substance Designer выглядит так:

Выглядит пугающе, но быстро привыкаешь
Выглядит пугающе, но быстро привыкаешь

Интерфейс делится на несколько рабочих областей: панель эффектов справа, 3D вьюпорт — отображение материала на 3D модели, 2D вьюпорт — показывает содержимое выбранной ноды. Снизу — рабочее место, которое называется Graph View, в котором мы создаем материал с помощью нод.

Нода — это блок кода или операция, которая создаёт или обрабатывает изображение

У нод есть исходящие порты — аутпуты, а у некоторых ещё и входящие — инпуты. Информация подаётся в инпуты, обрабатывается нодой и выходит из аутпута в следующую ноду.

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

Например, нода Blur принимает на вход изображение, а на выходе отдаёт его более размытым:

Инпут слева, аутпут справа
Инпут слева, аутпут справа

Такой подход к созданию текстур и материалов называют процедурным.

Одна из его особенностей — недеструктивный пайплайн. Это значит, что на любом этапе создания материала можно вернуться к любому действию и внести в него изменения и повлиять на результат.

К примеру, я могу вернуться к ноде Blur через полчаса работы и настроить её заново, скорректировав степень размытия. В Photoshop для той же операции пришлось бы откатывать все действия назад до нужного изменения.

В библиотеке Designer более двухсот нод. Они делятся на группы по задачам.

К примеру, группа Noises содержит процедурные текстуры, которые используют для создания шума. У них нет инпутов, только аутпуты и параметры, с помощью которых можно настроить внешний вид этих текстур.

Существуют и другие группы: паттерны, операции и эффекты.

Вот, как выглядит исходная схема в Graph View. Я оставлю её в хорошем качестве на гугл-диске, чтобы ты мог обращаться к итоговому варианту, если запутаетесь.

В каждом шаге разберём по кусочку схемы
В каждом шаге разберём по кусочку схемы

Новый проект

Первым делом создаём и настраиваем новый проект.

-6

В окне нового проекта даём название будущему графику, устанавливаем разрешение — 2048х2048 точек, разрядность документа — 16 бит и в качестве шаблона из левого списка выбираем PBR(Metallic\Roughness).

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

Если забыли выбрать нужный шаблон или случайно удалили аутпуты в процессе работы, — не переживайте, их можно создать и настроить вручную.

Карта высот

Наша задача — грамотно построить карту высот (Height).

Height это чёрно-белая текстура, в которой яркость пикселя задаёт высоту точки в 2D пространстве.

Чем темнее пиксель, тем глубже. А чем ярче, тем, наоборот, выше точка относительно плоскости, на которой находится текстура.

-7

Таким образом, работая над картой высот мы создаём рельеф будущего материала, но только в одном измерении.

Карта высот занимает 80% работы.

Она также оказывает влияние на все остальные текстуры материала — цвет, микрорельеф (roughness), затенения (AO) и так далее.

Анализ референсов

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

К примеру трещины на первом референсе имеют схожую форму и характер. Бетон на второй фотографии покрыт мелкими глубокими порами.

Элементы которые мне приглянулись я создаю по отдельности, а затем смешиваю вместе, создавая сложную структуру комплексного материала.

Фактура

Первый элемент — текстура, которую я сделал на основе процедурного шума Fractal Sum Base.

Её задача — добавить небольшие неровности и фактуру бетона, для того чтобы материала не был идеально ровным.

Я собрал эту текстуру из четырёх нод, начал с процедурного шума Fractal Sum Base.

Я подписал все параметры, для того чтобы было удобнее ориентироваться на мой результат.
Я подписал все параметры, для того чтобы было удобнее ориентироваться на мой результат.

Дальше экспериментируем. Я не знаю, как сделать элемент, поэтому прорабатываю несколько идей, пока не достигну результата.

Попробую объяснить ход мыслей в процессе создания текстуры.

Я начал с Fractal Sum Base потому что мне показалось что она похожа на однородную поверхность камня. Но в дефолтном состоянии она слишком сильно «шумит».

Поэтому добавилась нода Slope Blur для понижения детализации.

Slope Blur одновременно размывает и искажает текстуру, что привело меня к результату:

Тут я показываю результат с цветом для наглядности. До создания текстуры цвета мы ещё дойдём
Тут я показываю результат с цветом для наглядности. До создания текстуры цвета мы ещё дойдём

Следующий шаг — нода Blur HQ с помощью которой я смягчаю получившуюся фактуру.

Последняя нода — Histogram Range. В ней с помощью параметра Range я управляю интенсивностью элемента:

-10

Поры

Структура бетона неоднородна — в ней, помимо трещин, есть много мелких отверстий, разбросанных по всей поверхности, которые образуются из-за испарения воды изнутри материала.

Я создал поры из процедурной текстуры текстуры Dirt 1.

-11

Для того, чтобы сделать глубину пор разнообразнее, я продублировал Dirt 1 и настроил их по-разному с помощью параметра Position в нодах Histogram Scan.

Регулируя этот параметр я управляю яркостью, поэтому в двух вариантах получается разное количество отверстий:

-12

После этого я применяю Slope Blur к обеим текстурам, чтобы упростить форму пор и сделать их похожими на отверстия в камне:

-13
Поры в материале
Поры в материале

Процедурные шумы и эффекты

Slope Blur управляется другой текстурой. В нашем примере чёрно-белая текстура управляет интенсивностью эффекта. Чем ярче пиксель, тем сильнее в этом месте действует Slope Blur.

Чаще всего другими эффектами управляют процедурные шумы — дальше я буду называть их драйверами.

У Slope Blur для пор, драйвером является BnW Spots 2
У Slope Blur для пор, драйвером является BnW Spots 2

Результат эффекта зависит от текстуры-драйвера, поэтому не бойтесь экспериментировать. Это быстрее приведёт к результату и научит работе с разными эффектами и текстурами.

Трещины

Это сложная деталь, которая состоит из нескольких нод и эффектов.

-16
  • Я начинаю с простых форм, создаю текстуру Cells 1. В её основе лежат прямые линии, которые образуют узор, похожий на трещины.
-17
  • С помощью эффекта Directional Warp я немного искажаю текстуру Cells 1, потому что на камне трещины не такие прямые.
  • Создаю драйвер для эффекта Directional Warp из текстуры Gaussian Noise. Она делает изгибы трещины мягкими и плавными. Результат настраиваю одновременно с помощью параметра Scale в драйвере и Intensity в ноде DW.
-18
  • Продолжаю работу над формой трещин, создав ещё один Directional Warp.
  • На этот раз в качестве драйвера использую текстуру Crystal 1. Она состоит из градиентов, в основе которых линии ломаной формы. В результате эффект DW добавляет на плавные линии трещин изломы.
-19
  • Я создаю ноду Blend, в которой смешиваю трещины с текстурой Gaussian Noise. Чтобы паттерн не читался явно, местами их лучше стереть.
  • Перед этим добавляю Gaussian Noise в ноду Levels, с помощью которой можно настроить радиус маски.
  • Последняя операция — уже знакомый Slope Blur. С помощью него я добавляю сколы и фактуру камня на грани трещин.
-20
  • Для этого использую драйвер Clouds2.
  • Последнюю ноду — Histogram Scan, — создаю, чтобы контролировать интенсивность трещин.
-21

Повреждения

От стен иногда отпадают целые куски цемента — они обнажают внутренности материала с более крупной и пористой фактурой. Эти тёмные пятна мы сейчас и создадим.

-22
  • Создаю фактуру грубого и пористого цемента, затем подмешиваю его к материалу с помощью маски, сделанной из процедурного шума — BnW Spots 1.

2. Маску делаю с помощью ноды Histogram Scan, увеличив контрастность текстуры. С помощью Position настраиваю площадь повреждения.

3. Применяю к маске Slope Blur, в качестве драйвера использую BnW Spots 3, который уже есть в графике — участвует в создании пор.

4. Перед тем, как смешать фактуру из BnW Spots 1, смещаю текстуру в сторону и поворачиваю её нодой Transform 2D, чтобы рисунок текстуры не совпадал с рисунком маски.

-23

Смешиваем

Для смешивания создам 4 последовательных ноды Blend, к каждой подключу свой элемент, регулируя степень прозрачности и тип смешивания:

-24

Трещины и повреждения смешиваются с остальным материалом по маскам. Это инвертированный вариант одной и той же маски. Маска в трещинах не даёт им залезать на повреждённые области, будто треснул только верхний слой.

Карта высот готова. Осталось создать дополнительные текстуры, которые понадобятся в работе с цветом и Roughness.

Карта нормалей

Карта нормалей создаётся из карты высот. Делается это в один шаг: создаём ноду Normal и подключаем к ней карту высот из ноды Levels.

Внутри одна крутилка интенсивности
Внутри одна крутилка интенсивности

Я увеличил значение до 1,4х, чтобы детали были объёмнее.

Затенения (Ambient Occlusion)

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

Из текстуры затенения создают маски для эффектов загрязнения.

В Designer есть нода которая генерирует текстуру AO из карты высот. Она понадобится нам в дальнейшем при создании текстур цвета и Roughness.

-26

Карта кривизны (Curvature)

Карта кривизны — это чёрно-белая текстура, которая создаётся на основе Normal Map. Серым цветом в ней обозначены плоскости, белым — внешние углы, чёрным — внутренние.

-27

Гранж

Отдельным графиком я смешаю несколько гранж-текстур бетона, взятых из библиотеки Substance Painter.

-28

Чтобы добавить их в график, находим их , кликаем правой кнопкой мыши, в контекстном меню выбираем Show in Explorer.

Библиотека Substance Painter
Библиотека Substance Painter

Текстуры лежат а папке библиотеки в формате .sbsar, их можно импортировать в график материала, перетащив файл из папки в окно Graph View.

Текстура понадобится для добавления деталей, которые не влияют на рельеф, но будут быть видны в цвете и текстуре Roughness.

Шероховатость (Roughness)

Текстура микроповерхности (Roughness) отвечает за рассеивание света материалом.

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

Шероховатые поверхности рассеивают свет, поэтому отражения размываются, а блики становятся тусклыми и широкими.

В моём графике Roughness сделан так
В моём графике Roughness сделан так

Частый приём для начала работы с Roughness — взять в качестве основы текстуру кривизны (Curvature). В оригинальной Curvature углубления, поры и трещины темнее чем углы и плоскости.

Однако в текстуре Roughness чем темнее поверхность, тем она более глянцевая. Поэтому первым делом Curvature необходимо инвертировать — трещины и углубления станут матовыми. Для этого используем ноду Grayscale Invert.

Получившийся результат смешиваю с гранж-текстурой, которую сделал ранее, чтобы добавить больше деталей и глубину в Roughness.

-31

Последняя нода — Histogram Range. В ней с помощью параметра Position я настраиваю общий уровень гладкости:

-32

Цвет

Наш бетон получается простым, поэтому цвет для него делаю при помощи одной ноды — Gradient Map, с помощью которой раскрашиваю чёрно-белую Height Map.

-33
  • Перед этим смешиваю с гранж-текстурой, чтобы в цвете было больше деталей. Если использовать в Gradient Map только Height Map, результат будет выглядеть плоским и неинтересным.
-34
  • Перед тем, как подключить текстуру к Gradient Map, повышаю её контрастность с помощью Levels.
  • Gradient Map. Нода преобразует серые тона в цвет с помощью настраиваемого градиента.
Редактор настройки, открывается по клику на «Gradient Editor» в свойствах ноды
Редактор настройки, открывается по клику на «Gradient Editor» в свойствах ноды

Цвета можно добавлять и редактировать вручную, или ли захватить прямо с референса с помощью инструмента Pick Gradient.

«Захват» градиента всегда дает разный результат

Финишные детали

Напоследок создаю маски из двух генераторов — Dirt и Mask Builder.

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

Для того чтобы генератор заработал, в него подключаются карты AO и Curvature.

-36

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

-37

Получившиеся маски использую, чтобы добавить деталей в текстуры цвета и Roughness.

Когда нужно добавить деталь по одной маске в две текстуры сразу, удобнее использовать Material Color Blend, — это упрощает график и делает его понятнее.

-38

В каждой ноде Material Color Blend (4, 6) текстура цвета и Roughness (1, 2) смешиваются по маске (3, 5) с другим цветом или значением яркости.

Настройки второго цвета и тип смешивания выбираем в свойствах самой ноды.

Вот мои
Вот мои

На этом всё!

Вот так текстура выглядит после всех шагов
Вот так текстура выглядит после всех шагов

Если вдруг пропустил одну из нод или хочешь что-то изменить, — редактируй готовый график, добавляй или убирай детали, меняй цвета. В общем, экспериментируй!

Если получилось повторить мою текстуру или даже придумать что-то своё — подумай над тем, чтобы записаться на курс по Процедурным текстурам. Он стартует 1 декабря, зарегистрироваться можно на сайте.

Отзывы XYZ School: https://headkurs.com/schools/otzyvy-xyz-school/

----------

Статья подготовлена командой XYZ MEDIA. Авторство принадлежит XYZ MEDIA. Свои статьи мы публикуем:

В ВКонтакте: https://vk.com/xyz_gamedev

На сайт XYZ School: https://www.school-xyz.com

На медиум: https://medium.com/@xyz.school

В телеграм канал: https://t.me/xyz_cg

На Render: https://render.ru/ru/XYZ

Подписывайтесь на наши ресурсы. Спасибо за прочтение!