Гайд по созданию процедурной текстуры в Substance Designer и Unreal Engine 5
Из гайда вы узнаете, как сделать процедурную тайловую текстуру пола высокого качества в Substance Designer: анализ референсов, работа с картами высот, создание и смешивание материалов — а после сделать шоукейс на Unreal Engine 5.
Материал вышел на портале 80lvl, а мы перевели.
Начните с референсов
Подберите референсы. Без коллекции референсов вы рискуете сойти с задуманного пути, поэтому используйте советы ниже перед созданием текстур:
- Проведите исследование и соберите коллекцию подходящих изображений разного типа: от микро до макро
- Разделите коллекцию на три главные категории: крупная, средняя и микро детализация
- Расположите категории последовательно, используя приложение PureRef для сбора данных
- Старайтесь находить изображения высокого качества с чёткими деталями
- Избегайте: размытых или зашумленных референсов, изображений с ярким освещением и частично связанных с типом текстуры, которую вы хотите создать
- Расположите референсы так, чтобы ничего не отвлекало и не было путаницы
Сгруппируйте референсы. Разложите их по характеристикам материала — это нужно, чтобы выделить отдельные параметры для конкретной части работы.
Например, для плитки Пикколомини таких коллекций 5:
- Tile Base (основа плитки) — коллекция с основными референсами. В ней находятся фотографии с микро- и макродеталями, которые помогут распознать поверхность и подход к работе
- Cracks (трещины) — коллекция с разными видами трещин, которые можно проанализировать и импортировать в движок
- Chipping (отколотые края) — коллекция примеров плиток со сколами. Разные варианты могут быть полезны при создании эффекта состаривания
- Tile Removal (выбитые плитки) — коллекция разных выбитых плиток, которая разнообразит использование материала и даст общее представление о его внешнем виде
- Crack Debris (разрушенные плитки) — важнейшая коллекция для материала. Она показывает изменение плитки — от целой до разрушенной. Старайтесь собирать разные референсы трещин и обломков
Постройте карту высот
После сбора и анализа референсов начните делать шаблон и поэкспериментируйте, строя карту высот.
Пример шаблона для создания материала:
- Можете начать с любого шаблона с названием Spec/Gloss или Metal/Roughness. В этом гайде использован PBR (Metal/Roughness)
- В размере графика выставите Relative to the Parent
- Используйте три аутпута, чтобы построить высоту для базы: Normal, AO и Height
- Ноды 16x16 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 — изменять лишнее маскирование.
Карта высот и карта нормалей:
Добавьте шероховатость (Roughness)
Из ноды Normal создайте Curvature Smooth и смешайте с BnW Spots 2. Возьмите Tile Generator, маскирующий внутреннюю ромбовидную форму, и дважды смешайте её с Grunge 014. Создайте слайдеры для каждого типа повреждений, чтобы потом контролировать шероховатость каждого.
Шероховатости будут меняться вместе с параметрами материала.
Сделайте затенения — Ambient Occlusion
Начните с ноды 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 для каждого типа повреждений. Далее используйте все маски для соответствующих блендов, добавляя их пошагово, чтобы всё работало при изменении параметров основной карты высот.
Настройте сцену на Unreal Engine 5 для шейдеров, рендера, освещения и прочего
Настройте импорт ассета.
Сначала создайте одну сферу и базовый мэш для сцены в 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‑х канального смешивания Parallax Occlusion
Для создания шейдера импортируйте текстуры с удобными наименованиями:
- 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. Познавайте новые приёмы и продолжайте экспериментировать.
Будьте наблюдательны и обзаведитесь хорошей визуальной библиотекой — это поможет импровизировать во время процесса!
Больше работ Ишана Верма на ArtStation.
Материал подготовлен командой XYZ Media.