Процедурная текстура асфальта в Unreal Engine 5

Процедурная текстура асфальта в Unreal Engine 5

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

Создаём проект

Процедурная текстура асфальта в Unreal Engine 5

Запустите Unreal Engine. Выберите шаблон Vehicle. Настройки проекта оставьте стандартными — Project Defaults.

Далее выбираем следующее: Target Platform — Desktop, Quality Preset — Maximum. Галочки на Starter Content и Raytracing не ставим.

Запустите проект. У вас откроется уровень из шаблона: чтобы убедиться, что всё работает, можете поездить на машине, нажав на зелёную кнопку Play сверху.

Процедурная текстура асфальта в Unreal Engine 5

Загружаем карты в Unreal и добавляем в материал

Внизу Content Drawer (контент-бразуер)
Внизу Content Drawer (контент-бразуер)

Скачайте или сделайте материал. Для гайда мы возьмём его здесь.

Из всего материала нам нужны две карты: Road003_8K_Color и Road003_8K_Roughness.

Далее в Content Drawer откройте папку Track. Перетащите в Unreal обе карты из папки, куда их сохраняли.

Процедурная текстура асфальта в Unreal Engine 5

Откройте материал M_Track и удалите всё, кроме основной ноды M_Track.

Процедурная текстура асфальта в Unreal Engine 5

Content Drawer — папка Track. Перетащите оттуда текстуры в окно с нодами. Пока ничего с ними не делайте.

Создание и поиск нужной ноды
Создание и поиск нужной ноды

Чтобы создать ноду, нажмите ПКМ на любом свободном месте, впишите её название и нажмите Enter.

Нода TextureCoordinate даёт базовые UV-координаты, с которыми вы дальше сможете работать. Нода CustomRotator позволяет поворачивать текстуры в UV-пространстве.

После подключите ноду TextureCoordinate в CustomRotator во вход UVs (V2), в Constant впишите значение 0,25 и подсоедините ко входам Rotation Center и Rotation Angle.

Выход ноды CustomRotator подключите во вход UVs к обеим нашим текстурам. Текстуру Road003_8K_Color подключите к Base Color материала M_Track.

Должно получиться так
Должно получиться так

Создаём шум для текстуры

Должно быть так — это результат всех действий в разделе
Должно быть так — это результат всех действий в разделе

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

Для этого создайте ноды World Position, Constant, Multiply и Noise. Подключите выход XYZ ноды World Position и выход Constant ко входам ноды Multiply. В дальнейшем этой константой вы сможете регулировать размер луж на текстуре.

Выход ноды Multiply подключите ко входу Position ноды Noise. На время подключите выход ноды Noise ко входу Base Color материала M_Track, чтобы видеть все изменения и настройки.

В ноде Constant установите значение 0,01.

Нода World Position даёт вектор с координатами, который в ноде Multiply умножается на значение константы — у нас оно 0,01. Это позволяет регулировать размер шума, который создаёт нода Noise.

В ноде Noise измените параметр Function на Gradient - Computational — он отвечает за тип генерации. Ещё вы можете поиграться с настройками Output Min и Output Max — они позволяют детальнее настроить внешний вид шума. Мы установили для Output Min значение -0,384, Max не изменяли.

Также в ноде Noise уберите галочку с Turbulence и поставьте галочку на Tiling.

Создайте ноду Saturate и подключите в неё ноду Noise. Нода Saturate обрезает значения, оставляя диапазон от 0 до 1.

Далее создайте ноду Power и подключите в неё Saturate. Ноду Power подключите к Base Color материала.

В параметре ноды Power установите значение 0,5 — так вы сделаете шум контрастнее. Если напишите число больше 1, шум станет более мягким и размытым и белых областей будет меньше.

Верните текстуру Color обратно во вход Base Color.

Создаём Roughness

После создания Roughness должно быть так
После создания Roughness должно быть так

Карта Roughness отвечает за гладкость или шероховатость текстуры. Нам она нужна для усиления эффекта пористости асфальта.

Создайте ноду LinearInterpolate и две Constant. Нода LinearInterpolate, или же Lerp, смешивает два входа, используя вход Alpha как маску. Выход ноды LinearInterpolate подключите во вход Roughness материала.

Во вход Alpha ноды Lerp подключите ноду Power, а во входы A и B две новые Constant. В Constant A ставим значение 0, в Constant B — значение 0,06.

Создайте ещё одну ноду Lerp. В её вход Alpha подключите ноду Power, во вход А подключите ноду Lerp, которая сейчас подключена во вход Roughness материала M_Track. После этого создайте новую Constant, поставьте ей значение 1 и подключите во вход В ноды Lerp, которая подключена к Roughness.

Создайте узел на линии связи ноды Power с нодами Lerp. Узлы используют для удобства и оформления — из них можно вытаскивать неограниченное количество линий. Чтобы создать узел, два раза нажмите ЛКМ на линии связи нод в том месте, где хотите создать узел.

Создаём Normal

После создания Normal должно быть так
После создания Normal должно быть так

Карта Normal используют для создания неровностей текстуры. В нашей случае она будет дополнять Roughness.

Чтобы её сделать, создайте ещё одну ноду Lerp. В её вход Alpha подключите ноду Power, а во вход B подключите текстуру Road003_8K_Roughness.

Создайте ноду Luminosity_And_Color — она объединяет вектор и скалярное значение. На её вход Color (V3) подключите RGB-выход текстуры Road003_8K_Roughness, а на Luminosity — выход ноды Power.

Во вход A новой ноды Lerp подключите выход ноды Luminosity_And_Color. Выход последней подключите на выход Normal материала M_Track.

Создаём Metallic и Specular

После создания Metallic и Specular должно быть так
После создания Metallic и Specular должно быть так

В белых областях карты Metallic будут проявляться световые свойства металла, то есть блеск и отражение, а карта Specular отвечает за «загрязнённость»‎ текстуры: в белых областях свет будет отражаться лучше, в более тёмных — хуже из-за грязи или других визуальных недостатков. Эти карты мы используем для реалистичного отражения света на асфальте.

Для входов Metallic и Specular материала M_Track создайте две Constant со значениями 0 и 1, а также две ноды Lerp.

В первую Lerp во вход А подключите значение 1, во вход В — значение 0, в Alpha подключите выход Power.

Выход из ноды Lerp подключите ко входу A следующей ноды Lerp и ко входу Specular материала M_Track.

Во входе В поставьте значение 0,5, в альфа 0,7. Выход подключите к Metallic материала.

Сглаживаем текстуру с помощью SmoothThresold

Ноды после подключения SmoothThresold. А ещё это финальный вид карты нод — после ничего не меняем
Ноды после подключения SmoothThresold. А ещё это финальный вид карты нод — после ничего не меняем

Сглаживание избавит текстуру от лишних зернистости и стыков, а ещё сделает внешний вид более гладким и монолитным.

Создайте ноду SmoothThreshold. Её нужно подключить между нодами Saturate и Power.

Ноду Saturate подключите во вход Lerp Value ноды SmoothThreshold. Для входа Cutoff Value создайте новую Constant со значением 1, для входа Gradient создайте новую Constant со значением 0,01.

Все Constant можно перевести в Parameter. Для этого кликните по ним ПКМ и нажмите Convert to Parameter — это позволит создать Material Instance, чтобы в нём мы могли интерактивно контролировать наш материал.

Готово. Это финальный вид текстуры

Материал подготовлен командой XYZ Media.

Наши каналы в Telegram и на YouTube.

1818
16 комментариев

ХУЗ

5
Ответить

В итоге результат выглядит, как говно. А вы точно профессионалы?

3
Ответить

в итоге дорогу не тянет 4080.

2
Ответить

Слишком часто повторяющиеся заплатки и лужи

1
Ответить

Немного не в тему вопрос и хз как сформулировать понятно. Как называется техника когда несколько UV слоёв соединены в одну rgb маску? Что-то подобное видел в готовом проекте на анриле.

Ответить

Это называется Channel Packing.
(https://www.youtube.com/results?search_query=channel+packing)

1
Ответить