Гайд по созданию процедурной текстуры в Substance Designer и Unreal Engine 5

Из гайда вы узнаете, как сделать процедурную тайловую текстуру пола высокого качества в Substance Designer: анализ референсов, работа с картами высот, создание и смешивание материалов — а после сделать шоукейс на Unreal Engine 5.

Материал вышел на портале 80lvl, а мы перевели.

Embedded Image

Финальная текстура

Подберите референсы. Без коллекции референсов вы рискуете сойти с задуманного пути, поэтому используйте советы ниже перед созданием текстур:

Проведите исследование и соберите коллекцию подходящих изображений разного типа: от микро до макро

Разделите коллекцию на три главные категории: крупная, средняя и микро детализация

Расположите категории последовательно, используя приложение PureRef для сбора данных

Старайтесь находить изображения высокого качества с чёткими деталями

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

Расположите референсы так, чтобы ничего не отвлекало и не было путаницы

Напольная плитка из библиотеки Пикколомини

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

Например, для плитки Пикколомини таких коллекций 5:

Tile Base (основа плитки) — коллекция с основными референсами. В ней находятся фотографии с микро- и макродеталями, которые помогут распознать поверхность и подход к работе

Cracks (трещины) — коллекция с разными видами трещин, которые можно проанализировать и импортировать в движок

Chipping (отколотые края) — коллекция примеров плиток со сколами. Разные варианты могут быть полезны при создании эффекта состаривания

Tile Removal (выбитые плитки) — коллекция разных выбитых плиток, которая разнообразит использование материала и даст общее представление о его внешнем виде

Crack Debris (разрушенные плитки) — важнейшая коллекция для материала. Она показывает изменение плитки — от целой до разрушенной. Старайтесь собирать разные референсы трещин и обломков

Группы референсов для дальнейшей работы

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

Пример шаблона для создания материала:

Можете начать с любого шаблона с названием Spec/Gloss или Metal/Roughness. В этом гайде использован PBR (Metal/Roughness)

В размере графика выставите Relative to the Parent

Используйте три аутпута, чтобы построить высоту для базы: Normal, AO и Height

Ноды 16×16 Uniform Color можете подключить к Base Color, Roughness и Metallic и поменять, если понадобится

Начните с плитки в форме ромба — она станет основой материала. Создайте ноду Uniform Color с белым цветом, потом используйте Transformation 2D для поворота на 45 градусов и Levels, чтобы убрать полупрозрачные пиксели по краю фигуры — это позволит избежать дальнейших проблем с мипмапами. Далее используйте две ноды Transformation 2D, чтобы сузить фигуру по диагонали и горизонтали.

Чтобы выровнять ромбовидную форму и сделать круговой орнамент, разместите 6 фигур на двух нодах Splatter Circular: одну трансформируя по вертикали, вторую — по диагонали. Далее смешайте обе ноды в режиме Add и подключите к Levels для получения жёстких краёв.

Подключите шейп в Tile Generator, назначьте параметры X=4, Y=4 и увеличивайте размер фигуры пока не заполнится пространство между ними, после этого переключите режим смешивания на Max Lighten.

Чтобы убрать зазоры между плитками, используйте ноды Flood Fill, Flood Fill to a Random Grayscale и Distance, для придания небольшой глубины фаски орнаменту — Edge Detect и Bevel.

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

Создайте звено цепи. Возьмите ноду Shape с кругом, уменьшите в Transformation 2D и вычтите его из основного.

Возьмите Uniform Color белого цвета, трансформируйте, отзеркальте и смешайте с кругом. Потом используйте другую Transformation 2D ноду, чтобы сделать уменьшенную версию шейпа и повернуть на 180 градусов. Далее смешайте Transformation 2D ноды и поэкспериментируйте с Blur и Levels для создания уникальной формы.

Вставьте базу узора цепи в Tile Generator с параметрами: X=1, Y=14. После этого наклоните фигуру Transformation 2D, как в ромбовидной фигуре, и используйте две ноды Mirror, чтобы добиться нужной плиточной геометрии.

Завершением станет шейп месяца.

Создайте ноду Shape и вычтите из нее круг в Transformation 2D и Blend. Затем используйте Non-Uniform Blur Grayscale, чтобы добавить глубины месяцу, вставьте фигуру в две ноды Splatter Circular и смешайте.

Закончив с фигурой, подключите её в основной Tile Generator с параметрами Tile Generator цепи, чтобы обе формы ложились на основные плитки.

Сделайте отколотые плитки и маски.

Создайте ноду Slope Blur Grayscale, подключите в неё основную карту высот и смешанные Clouds 1 и 2 как инпут шума. Далее используйте Invert Grayscale и Histogram Scan, выставив параметр с плавающей запятой. Это позволит изменять значение маски с 0 до 1 и процедурно генерировать сколы по краям.

Закончив, возьмите гистограмму из Flood Fill to Random Grayscale, смешайте с Histogram Scan сколов и вычтите из основной формы.

Теперь нужно сделать градацию и деформацию поверхности.

Для создания уникальных градиентов на каждой плитке используйте ноду Flood Fill to Gradient и смешайте поверх основной карты высот в режиме Soft Light Blend.

Создайте вторую гистограмму из Flood Fill to Random Grayscale и повторите смешивание. Укажите параметры создания уникальных неровностей.

Для деформации поверхности возьмите разные шумы: Clouds 1, Clouds 2, Gaussian Noise и BnW Spots 2, и примените к ним Directional Warp, подключив Flood Fill to Random Grayscale в качестве маски. Этот метод поможет создать искаженные шумы, которые можно будет наложить на основную фигуру с помощью нескольких блендов.

Осталось сделать трещины.

Для создания больших трещин создайте ноду Shape с белым цветом и подключите в нод Splatter со случайными значениями размера, оттенков серого и поворота. Затем проведите через ноду Distance, чтобы максимально увеличить расстояние между разбросанным фигурами, и Edge Detect для получения базовой формы трещины. Используйте Warp с Gaussian Noise, чтобы придать этим трещинам естественный вид.

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

Повреждения в трещинах и разрушенные плитки придадут более естественный вид.

Используйте ноду Bevel для маски трещин и Levels, чтобы сделать форму более резкой. Это даст возможность применять одновременно два типа повреждения: сколы и трещины.

Чтобы к поверхности и краям разрушенной плитки добавить детали, создайте ноду Slope Blur, подключив смешение Clouds 1 и Clouds 2 — это деформирует края и задаст им разную высоту. Потом наложите Slope Blur сломанных плиток на основные трещины при помощи Histogram Select.

Начните с ноды Clouds 2 и увеличьте тайлинг с помощью Safe Transform Grayscale. После этого возьмите Clouds 1, BnW Spots 3 и Gaussian Noise и смешайте их поочерёдно с помощью Soft Light — каждый с интенсивностью 0.5.

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

Для этих повреждений используйте только Histogram Select, подключив Flood Fill to Grayscale, и сделайте экспоуз всех трех параметров, чтобы расширить возможности применения материала. Position позволит менять места отсутствующих тайлов, Range — увеличивать размер или количество отсутствующих плит, Contrast — изменять лишнее маскирование.

Карта высот и карта нормалей:

Из ноды Normal создайте Curvature Smooth и смешайте с BnW Spots 2. Возьмите Tile Generator, маскирующий внутреннюю ромбовидную форму, и дважды смешайте её с Grunge 014. Создайте слайдеры для каждого типа повреждений, чтобы потом контролировать шероховатость каждого.

Шероховатости будут меняться вместе с параметрами материала.

Начните с ноды AO и используйте Histogram Select для маскировки повреждения, потом наложите её на основную AO. Чтобы на месте выбитой плитки были углубления, создайте маску, наложите поверх основной текстуры и подключите в AO Output.

Повторите смешивания шероховатостей с конкретными масками из каждого генератора для АО.

Начните с создания маски.

У плитки Пикколомини мало цветов, поэтому двух нод Gradient Map будет достаточно для всей текстуры.

Смешайте маски из всех генераторов в режиме Add. Потом используйте ноду Levels, чтобы убрать шум. Для придания маске более реалистичного вида слегка деформируйте её в ноде Warp с Grunge Map 014 и смешайте с основной картой высот ещё раз, используя режим Soft Light. Эта маска будет использована для окрашивания голубого орнамента.

Для светлых цветов создайте ноду Edge Detect от карты высот и подключите ее к Gradient Map. Чтобы поправить цвета, используйте HSL. Потом возьмите ещё одну Gradient Map и подключите к ней маску голубого орнамента, чтобы получить голубой цвет, и наложите поверх белого базового цвета, который сделали ранее. Так вы создадите первичное смешение цветов для материала.

Далее — наложение.

Для процедурного смешивания создайте маски при помощи Histogram Scan/Select для каждого типа повреждений. Далее используйте все маски для соответствующих блендов, добавляя их пошагово, чтобы всё работало при изменении параметров основной карты высот.

Настройте импорт ассета.

Сначала создайте одну сферу и базовый мэш для сцены в 3ds Max и импортируйте материал в движок с этими настройками:

Снимите галочку с Generate Auto Collision

Normal Import Method: Import Normals and Tangents

Снимите галочку с Combine Meshes

Снимите галочку с Import textures и Do not create material

Перейдите к настройке Environment Light:

Установите на уровень один Directional Light, выбрав Atmosphere Sunlight, в интенсивности поставьте 5 LUX

Добавьте Sky Atmosphere Component с настройками: Atmosphere Rayleigh Exponential Distribution — 0.5 и Sky Luminance Factor — 0.5

Добавьте SkyLight и поставьте галочку напротив Real-Time Option on

Добавьте Exponential Height Fog со следующими настройками: Fog Height Falloff — 1, Fog Scattering Color — H(220), S(0.5), V(1.0) и Directional Inscattering Color — H(0), S(0), V(0)

В постобработке установите следующие значения:

Exposure Metering Mode — Manual

Exposure Compensation — 10

Blooms: Standard Mode, Intensity — 1.4

Включите Lumen в меню Global Illumination и Reflections под ним. При проблемах с производительностью настройте интенсивность Lumen, воспользовавшись опцией Final Gather Quality.

Для распространения вольюма Post-Process на весь уровень поставьте галочку напротив опции Infinite Extent.

Настройте камеру

Установите эктор перед шаблоном сцены, переключите режим проекции с ортографического в перспективный. Для получения квадратного снимка: установите угол обзора — 30 градусов, соотношение сторон — 1.045 и поставьте галочку у Constraint of the Aspect Ratio.

Для создания шейдера импортируйте текстуры с удобными наименованиями:

4 карты нормалей (Normal Maps)

4 ARM карты

1 Height Map в виде Splat map (содержащаяя 4 Height Maps)

4 BaseColor карты

Карта Splat — это текстура, контролирующая наложение нескольких текстур (или других значений) по модели.

Создайте базовый материал и импортируйте все текстуры в редактор материалов. Рассортируйте их по рамкам с понятными названиями, чтобы было удобно ориентироваться. Для первого бленда начните с ноды Vertex Color, с помощью ноды Lerp смешайте четыре текстуры, как на картинке внизу.

Повторите это смешение для карт ARM, Normal и Base Color. Для ARM разделите бленды на пары — первый будет для AO. Каналы R каждой карты ARM перемножьте с Base Color, чтобы добавить AO ощущение глубины.

Для создания бленда Roughness Lerp с Vertex смешайте каналы G и вставьте это в канал Roughness.

Vertex Colors раскрасит меш с помощью 4 текстур.

Далее начните настройку тайлинга с ноды UVcoord, перемноженной с параметром Float 1. Этот тайлинг будет подключен в инпут координат ноды Bump Offset.

Создайте еще один Float 1, сделайте экспоуз параметра с наименованием Height Ratio и поставьте значение 0.012. Далее подключите этот Float в инпут Height Ratio.

Для Height Offset возьмите Height Splat Map и подключите Height из каждого канала RGBA в инпут Height. Закончив с настройкой Bump Offset, подключите в UV инпут всех текстур.

Для меша выберите опцию Vertex Paint — здесь нужно выставить несколько параметров:

Color View Mode: Off

Strength: 0.5

Falloff: 1

Texture Weight: ARGB (4 Textures)

Закончив с вертексным окрашиванием, перенесите материал на сферу. Ниже изображён окончательный результат рендеринга из вьюпорта камеры.

Чтобы получить рендеры высокого качества в Unreal Engine, в выпадающем меню вьюпорта выберите опцию High-Resolution Screenshot — откроется всплывающее окно. Значение Size Multiplier выставите от 1 до 4 в зависимости от производительности системы.

На протяжении всего процесса я много экспериментировал, и результаты того стоили! Я хотел улучшить навыки создания процедурного материала, поэтому впервые воспользовался Unreal Engine 5. Рекомендую каждому держаться выбранного курса, всесторонне развиваться и принимать свои ошибки — благодаря им вы можете открыть новые способы работы в Substance Designer. Познавайте новые приёмы и продолжайте экспериментировать.

Будьте наблюдательны и обзаведитесь хорошей визуальной библиотекой — это поможет импровизировать во время процесса!

Embedded Image

Художник по материалам из Ubisoft

Источник цитаты: Creating Piccolomini Library Floor in Substance Designer & UE5

Больше работ Ишана Верма — на ArtStation и в Instagram

Если вы новичок в создании текстур или продвинуты, но хотите улучшить свой скилл, у нас есть курс по процедурным текстурам в Substance Painter. За 4 месяца вы научитесь создавать текстуры и настраивать их до мельчайших деталей. Записывайтесь: