Что такое pbr
Перейти к содержимому

Что такое pbr

  • автор:

Что такое PBR? Часть V

Часть I — кратко затронул историю становления термина PBR и вывел главный тезис. PBR это не шейдер и не текстура или какой-то отдельно взятый рендер движок — это в первую очередь принципы и основы современной компьютерной графики, кто-то называет это философией.

Часть II — была посвящена такому понятию как PBS — Физически корректный шейдинг, как неотделимая часть физически корректного рендеринга. Кратко рассмотрел, что такое BRDF функции.

Часть III Реализация GTR (GGX) функции в V-ray. Альтернативные, физически корректные, BRDF модели. Аналитические BRDF модели (Merl библиотека). Коммерческие BRDF решения — VRscans (VrayScanedMtl)

Часть IV.I — PBR шейдинг в Дисней. Реализация в V-ray
Часть IV.II — PBR шейдинг в Дисней. Реализация в V-ray
Часть IV.III — PBR шейдинг в Дисней. Реализация в V-ray

Часть V — PBR текстуры (Заключительная часть цикла)

Финал

Финальная статья цикла, будет посвящена PBR текстурам. Сразу определю — PBR или «не PBR» текстур не бывает. Бывают текстуры отвечающие или не отвечающие PBR принципам. Изначально, была идея написать статью исключительно о PBR текстурах. Она возникла после того, как я прикупил сборник как бы PBR текстур от CGAxis — не покупайте и даже не качайте с торентов этот сборник, если вам действительно нужны PBR текстуры.
Про этот сборник с большой натяжкой можно сказать, что его содержимое отвечает всем PBR принципам. По факту этот сборник откровенный «шлак», на который, в маркетинговых целях, налепили трендовую аббревиатуру «PBR».

PBR текстуры

Любой шейдер способен описать большинство свойств поверхности чистой математикой через BxDF функции. Но не всегда поверхность объекта имеет однородный диффузный или зеркальный цвет, не всегда объект может иметь ровную поверхность. В таких ситуациях на помощь приходят растровые текстуры, через которые можно усложнять шейдер, делая его визуально более реалистичным. Согласитесь что локальным цветом или процедурной текстурой не всегда можно получить удовлетворительный результат. Через растровую текстуру можно задать не только сложный диффузный цвет поверхности, но и «запечь» некоторые её свойства. Использование текстур, в которых «запечены» свойства материала, пришло в массы из игровой индустрии. По сложившейся практике пользователю, предлагается три базовые текстурные карты — Diffuse, Specular\Metalness и Glossy\Roughness, по ситуации, подключают дополнительные технические карты — Opacity, Normal, Height, Ambient occlusion, Cavity, Emissive maps. Классический сет это четыре текстуры: Diffuse, Specular\Metalness и Glossy\Roughness, Normal Важным недостатком так называемых «PBR текстур» является отсутствие гибкости. Так например — карта Glossy\Roughness предлагает мне уже зафиксированные значение шероховатости поверхности. А что если мне нужно сделать больше глянца, как быть? Понятно что мне, как пользователю с опытом, не составляет труда «подкрутить» все эти карты до нужного результата, а как быть менее опытным коллегам? Поэтому мне не особо понятен тот хайп, который был в свое время поднят вокруг PBR текстур. PBR текстуры для меня, в первую очередь, это решение все же узкоспециальное, для таких направлений как VR, реал-тайм и игровые движки, где нужно максимально упростить и унифицировать шейдерные вычисления, когда текстуры запекаются комплексно для всей модели сразу. В этом контексте — PBR текстуры это простое и универсальное решение, своего рода кроссплатформенный набор «Сделай сам». 3d модель, шейдер которой сделан с соблюдением PBR принципов, будет рендериться, в любой современной рендер системе, без необходимости конвертировать материалы или что либо в них перенастраивать. Особенно если часть свойств шейдера, было зафиксировано (запечено) в текстурах, о которых я говорил выше. Это важное и ценное качество для 3d модели, особенно когда вы продаете её на стоке [Посмотреть стрим о 3D стоках]. Покупатель будет понимать, что купив ваш продукт, он получит универсальное шейдерное решение, которое будет давать одинаковый результат при рендеринге в независимости от используемой рендер системы. Есть два шейдерных решения так или иначе поддерживаемых в большинстве рендер движков — Specular workflow и Metalness workflow. Эти решения отличаются набором необходимых текстур и соответственно слотами размещения. Итоговая разница не существенна, но заметна в ряде деталей. Забегая вперед сразу скажу, что Metalness workflow более удобен, более экономичен в расходовании видеопамяти (актуально для игровых движков), прост и поэтому стал теперь доминирующим рабочим пространством.

Specular workflow

Как сказал ранее, практически все свойства шейдеров, можно запечь в текстуру, но в этом нет необходимости, так как большинстве рендер систем многие свойства, задаются программно. Так, например, нет необходимости запекать индекс рефракции (IOR), поскольку его можно задать напрямую в шейдере. Поэтому запекается, только ограниченный, комплект текстур. Для Specular workflow используется базовый сет из следующих растровых карт

Diffuse map — Карта диффузного цвета
Specular map — Карта зеркальности
Glossy map — Карта глянцевитости
Normal map — Карта нормалей

Metalness workflow

Для Metalness workflow используется базовый сет из следующих растровых карт

Diffuse map — Карта диффузного цвета
Metalness map — Карта металличности
Roughnes map — Карта шероховатости
Normal map — Карта нормалей

В чем разница этих решений?

Очевидно, что некоторые текстуры подключаются к разным слотам шейдера и в принципе отличаются по содержанию. Разница между Glossy\Roughness картами небольшая: Glossy map это инвертированная Roughness map, переключение между режимами Glossy\Roughness поддерживается не во всех движках, но в любом случае адаптировать эту карту под нужный режим не составит труда при помощи Photoshop. Карта нормалей (Normal Map) не меняется в обоих решениях. Принципиальное отличие только в двух текстурах Diffuse и Specular\Metalness.
Для рабочего процесса Specular workflow — диффузная карта «закрашивается» черным в тех местах, где поверхность должна проявлять «металличность», там же, где поверхность является диэлектриком, задается необходимый цвет. Через текстурную карту Specular задается степень зеркальности объекта для диэлектрических участков через оттенок серого, а для металлических участков через необходимый цвет металла. У рабочего процесса Metalness workflow— диффузная карта полностью цветная, как для металлических участков шейдера, так и на участках с диэлектрическими свойствами поверхности. Через черно-белую текстурную карту Metalness мы «сообщаем» рендер движку, где метал, где диэлектрик. По сути карта Metalness выполняет функции маски, а вся необходимая информация «снимается» с карты Diffuse. Считается что Metalness workflow экономичней в контексте расходования видеопамяти, так как черно белая маска практически ничего «не весит». Я сравнил два сета и действительно сет для Metalness workflow на 20% легче сета Specular workflow.

Недостатки и тонкости работы с Metalness и Specular workflow

Я не буду перетряхивать все рендер движки, на предмет того, как у них организовано подключение так называемых PBR текстур и ограничусь только V-ray. Классическая схема подключения текстур в Specular workflow
Недостатком этой схемы является то, что она предполагает полное отключение опции IOR, что фактически делает это решение физически некорректным, но… Некоторые ресурсы предлагают адаптированный к V-ray сет для Specular workflow. В этом сете есть дополнительная IOR карта, которую нужно подключать к слоту Fresnel IOR и так же немного измененная по цвету Specular карта. Такое решение делает шейдер более корректным и отвечающим принципам PBR.
Хотя визуальная разница между этими двумя решениями будет едва ли заметна неискушенному пользователю. Для подключения текстурных карт в режиме Metalness workflow, необходимо на вкладке BRDF переключиться в режим Use Roughness
Здесь тоже, всё не «слава богу», но получше чем у Specular workflow. Работа со множителем IOR в этом режиме возможна и я могу установить необходимое по ситуации значение, без использования дополнительных текстурных карт. Но, как мне «посчастливилось» выяснить, комплексное значение IOR у металлов значительно ниже чем у диэлектриков. И в примере который я сейчас разбираю, так же есть необходимость подключения дополнительной карты с разными значениями IOR для металла и для окислившейся поверхности (диэлектрика).

В связи с этим фактом, что у металлов есть комплексное значение IOR, которое хоть и не значительно, но влияет на результат, для Вас готовится отдельная статья по металлам, где я обновлю свое мнение и добавлю новую информацию по настройке металлов в V-Ray Next.

В статье Understanding metalness вы можете найти табличку, скриншот которой представлен ниже, Vlado (папа V-ray) вычислил комплексные значения IOR для ряда металлов которые можно\нужно использовать в совместно со включенной опцией Metalness.
Эти значения, в большинстве случаев, чуть больше единицы. Но как раз из-за этого что IOR метала значительно ниже значений у неметаллов, то имеет смысл заморочиться над этой разницей, для достижения максимальной реалистичности и физической корректности шейдинга в режиме Metalness workflow. Поскольку карта с необходимым значением IOR, к этому сету не прилагалась, я сделал кастомное решение используя ноду Mix и карту Metalness в качестве маски для разных значений IOR. Значения для IOR я поставил следующие:

IOR 1.05 = 0.9524 RGB для металлической поверхности (среднее значение из таблицы Vlado)
IOR 1.5 = 0.6666 RGB для окиси на поверхности металла (диэлектрик)

После всех тестов, я отдаю свое предпочтение схеме — Metalness workflow + IOR map, так как она наиболее близка к физически корректном решению. Но и другие схемы вполне рабочие, разница будет заметна только на мелких деталях, да и то, только на композитных материалах, которые я выбрал для обзора, где одновременно используется два типа материала — метал и диэлектрик. В простых, однородных, материалах эти нюансы будут менее всего заметны.
Так же сделал рендеры с контрастной световой схемой, что бы сравнить все четыре схемы с оригинальным превью, эксперимент не удался…
Тут сложно дать однозначный и объективный комментарий и сделать какое то сравнение, так как у меня нет возможности задействовать HDRi карту, которая использовалось для рендеринга оригинального превью у шейдера. Так что «ноу комментс…» Оригинал поярче, но не факт что у превью не «подкручивали» цветность.

Что еще нужно знать при работе с так называемым PBR текстурами?

Та информация, которую я прояснил, в процессе работы с материалами к этой статье, стала откровением… Всю свою сознательную трудовую жизнь, когда уже многие начали работать в гамме 2.2 и я в том числе, все текстуры по умолчанию подгружались в этой гамме. Единственной картой, которая нуждалась в корректировке была карта нормалей (Normal Map) её нужно было подгружать в линейной гамме — 1.0 Когда я более подробно стал изучать PBR тему и работу с текстурами в частности, я был удивлен, когда узнал что и остальные текстуры, кроме Specular и Diffuse, необходимо было подгружать в линейной гамме.

Почему так?

Это связано с тем что все черно-белые текстуры, если грубо, участвуют в математических вычислениях. Так например в карте Metlaness, черный пиксель означает 0, белый пиксель означает 1. Математика это линейные вычисления, поэтому шейдерные вычисления так же происходят в линейном пространстве и только два шейдерных компонента — Specular и Diffuse должны быть в представлены гамме 2.2 поскольку это визуальные составляющие и их обработка происходит в нелинейном пространстве.

Specular workflows

Diffuse map — Gamma 2.2
Specular map — Gamma 2.2
Glossy map — Gamma 1.0
Normal map — Gamma 1.0

Metalness workflow

Diffuse mapGamma 2.2
Metalness map
Gamma 1.0
Roughnes map
Gamma 1.0
Normal map
Gamma 1.0

Это правило, распространяется и на все другие шейдерные компоненты, которые реализуются через черно-белые растровые текстуры — они все должны подгружаться в гамме 1.0 не зависимо от того используете ли вы текстуры из PBR сборников или делаете что-то свое. Всё. по PBR «точка». PS Надеюсь что мои изыскания были не напрасны и принесут кому то пользу… во всяком случае у меня, в процессе работы над этим материалом, появилось много новых решений и вообще тема шейдинга стала достаточно прозрачной и понятной. Буду рад фидбеку и пожеланиям. Возможно я что то пропустил, дайте знать, и я просто дополню или уточню эти статьи необходимой информацией. Яндекс.Дзен | ВКонтакте | YouTube | Instagram

PBR для новичков — материалы, пайплайны и текстурные карты

Всё о работе с физически корректной визуализацией от преподавателя курса «Процедурный трип» Антона Агеева.

27 показов
40K открытий

В июне на нашем YouTube-канале прошёл стрим с Антоном Агеевым, который уже больше семи лет занимается текстурами в игровой индустрии и успел поработать с Nival, Playrix и Game Insight. Антон рассказал, что такое PBR, разобрал параметры материалов, основные пайплайны работы и дополнительные текстуры.

На стриме он работал в Substance Painter и Marmoset Toolbag, но все принципы применимы и в других утилитах. Ниже пересказываем самые важные моменты стрима.

Что такое PBR

PBR расшифровывается как Physically Based Rendering — физически корректная визуализация. То есть, рендеринг материалов происходит с учётом законов физики. Основное преимущество материалов с этой технологией в том, что их можно использовать и в программах для рендеринга, и в игровых и неигровых движках — от одной утилиты к другой пайплайн материала не меняется.

Применяя одни и те же текстуры [PBR] в разных движках, вы будете получать немного разный результат, но если они правильно откалиброваны, то их суть будет оставаться неизменной и они будут выглядеть хорошо и в Unity, и в Unreal Engine, и в любом не-real time рендере с трассировкой.Антон Агеев

Антон Агеев
Типы материалов

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

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

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

При падении света на материалы обоих типов действует эффект Френеля. Согласно ему степень отражений зависит от угла падения света на поверхность. Чем острее угол — тем больше света отразится. Отражающая же способность диэлектриков равна количеству света, которое отражает материал при освещении под прямым углом.

Закон сохранения энергии

В реальности по закону сохранения энергии количество отражённого света не может превысить количество поглощённого. В Marmoset Toolbag есть специальный чекбокс Conserve Energy, который «следит» за выполнением этого закона. Если он включён и сумма зеркальных и диффузных отражений равна 1 или больше, то диффузные отражения начинают затухать. А если зеркальные отражения равны 1, то диффузные отражения вообще перестают на что-то влиять. То есть сохраняется «реалистичность» материала.

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

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

Параметры материала:

Albedo (диффузный цвет). Это сила и цвет диффузных отражений. У металлов их нет, поэтому Albedo у них чёрный. В текстуре Albedo в PBR, в отличие от пастгена, не должно быть запечённого освещения, бликов и теней. Цвет должен выглядеть так, будто взят с поверхности, которая обращена к камере под прямым углом и освещена 100% белым рассеянным светом. В Albedo лучше избегать ахроматических и «открытых» цветов, корректный диапазон для этого параметра — 50-245 в sRGB.

Reflectivity (отражающая способность). Это определяющий параметр при достижения достоверности любого материала, лучше всего брать его из готовых источников (например, в Substance Painter есть заготовки металлов).

Диапазон корректных значений для диэлектриков — 2-14%. 8-14% отражают редкие материалы вроде рубина или алмаза, а у большинства других показатель находится в диапазоне 4-6%. Диапазон металлов — 60-100%. 100% отражают некоторые чистые металлы, но они встречаются редко, так что лучше держаться в пределах 96%.

Как только Reflectivity падает ниже 60%, тут же должен подключаться цвет Albedo, потому что материалов, которые просто поглощают столько света и ничего не отдают назад, не существует.

Антон Агеев

Чистых материалов с коэффициентом отражений 14-60% почти не бывает. Такое значение может получиться только при сильном загрязнении или окислении. Также Reflectivity металлов в большинстве случаев никогда не меняется.

Microsurface (шероховатость/микрорельеф/глянцевость поверхности). Этот параметр указывает, насколько гладкой или шероховатой является поверхность вашего материала.

Очень часто новички путают Reflectivity и Microsurface, потому что им кажется, что если отражения чёткие, то материал отражает хорошо, а если размытые, то материал отражает плохо, хотя процент отражений никак не меняется. Гладкие поверхности просто отражают свет под правильными углами, а матовые — с большим количеством искажений.

Антон Агеев

Пример влияния рельефа на отражения

В работе с Microsurface тоже лучше избегать крайних значений. Для большинства материалов корректным диапазоном будет 0,1-0,9.

Пайплайны материалов

Существует два основных пайплайна, которые основаны на базовых параметрах: Specular/Gloss и Metallic/Roughness. Под пайплайном здесь имеется в виду не порядок действий при работе, а набор текстур материала.

Specular/Gloss. В этом пайплайне используется три основных текстуры: Diffuse, Specular и Glossiness.

С одной стороны, это простой для понимания пайплайн, с другой — сложный для настройки.

Антон Агеев

Параметр Diffuse отвечает за силу и цвет диффузных отражений. Specular — за силу и цвет зеркальных. Проверить правильность этого параметра относительно материала можно с помощью специальных таблиц, где за Specular отвечает цвет напротив буквы S. А параметр Glossiness отвечает за то насколько гладкая и шероховатая поверхность материала.

Калибровочная таблица от Quixel

Metallic/Roughness. Этот пайплайн, по словам Антона, сложнее для понимания, но проще для применения. За параметр Albedo в нём отвечает текстура BaseColor, за Reflectivity отвечает Metallic, а за Microsurface — текстура Roughness. Условно, Roughness и Glossiness — это инвертированные текстуры, то есть низкое значение первой соответствует высокому значению второй и наоборот.

Когда параметр Metallic равен 1, то текстура BaseColor отвечает за отражающую способность материала и работает аналогично параметру Specular из Specular/Gloss. Если же он равен 0, то BaseColor отвечает за силу и цвет диффузных отражений, то есть материал отражает свет как диэлектрик.

В данной системе мы не можем настроить числовое значение отражающей способности для диэлектриков, потому что, когда BaseColor отвечает за диффузное отражение, нет «крутилки», которая отвечает за процент отражения. Но на глаз отличить разницу этого показателя у диэлектрика сложно, поэтому в пайплайне отказались от этой настройки в угоду оптимизации — отражающая сила в нём заблокирована на 4% и её нельзя изменить.

Антон Агеев

Также, по словам Антона, многие считают, что Metallic не может быть равен промежуточному значению, но на самом деле «лок» на 0 или 1 обычно продиктован техническими ограничениями.

Правильность выставленных параметров в Substance Painter можно отследить с помощью фильтра PBR Validate. Его нужно применить поверх всего, что есть в документе — тогда некорректные с физической точки зрения зоны будут окрашены в красный цвет.

Что такое PBR-текстуры

Считает игры произведениями искусства и старается донести эту идею до широких масс. В свободное время стримит, рисует и часами зависает в фоторежимах.

В работе с реалистичной 3D-графикой очень важно учитывать, как свет взаимодействует с той или иной поверхностью. Иначе как игрок поймёт, что он видит перед собой именно необработанную, а не покрытую столярным клеем доску? В 3D задачу по разрешению этой проблемы берут на себя PBR-текстуры.

Из этого материала вы узнаете:

  • что такое PBR;
  • на чём основан PBR;
  • как сделать из фотографии поверхности текстуру и сгенерировать набор карт в Materialize;
  • один из способов создания PBR-материала в Unreal Engine 5 на базе шаблона;
  • как в Unreal Engine 5 работает карта смещения (Displacement Map);
  • плюсы и минусы PBR-текстур;
  • что почитать/посмотреть на заданную тему.

Что такое PBR

PBR (от англ. physically based rendering) — это метод наложения шейдеров и рендеринга, обеспечивающий взаимодействие света с материалом в соответствии с законами физики. Впрочем, встречаются проекты и со стилизованной графикой, в которых применяют такой тип рендеринга, чтобы подчеркнуть акцент некоторых материалов при освещении и продемонстрировать современные технологии.

PBR-текстуры — один из главных элементов фотореализма. Они наделяют поверхность определёнными свойствами, за счёт которых трёхмерный объект выглядит практически как настоящий.

Сходства и различия PBR и PBS

В 3D-графике иногда встречается аббревиатура PBS (от англ. physically based shading) — шейдинг, основанный на законах физики. Фактически оба этих термина — PBR и PBS — почти идентичны и описывают физические свойства ассетов. Правда, упоминание о PBS встречается, когда речь идёт о шейдерах текстур, а PBR больше связан с рендерингом и освещением.

Для чего нужны PBR-текстуры

Рендеринг в движке, будь то Cycles (Blender) или Unreal Engine 5, имитирует физику реального мира, в том числе в отношении света. В реальной жизни законы физики не меняются, как и тип поверхностей предметов. На их внешний вид может повлиять только освещение — жёсткий свет, рассеянный свет, цветные источники света, — но свойства поверхности остаются прежними.

И PBR-текстуры помогают сохранить эти свойства в 3D независимо от условий освещения, что усиливает эффект реализма.

Элементы PBR, которые могут повлиять на итоговый материал

Физика световых лучей

Отражение

В зависимости от матовой или глянцевой поверхности объекта отражение бывает рассеянным или зеркальным соответственно. Зеркальное отражение на идеально ровной поверхности работает по принципу закона отражения . В результате появляются небольшие, но яркие блики, в зависимости от того, под каким углом зритель смотрит на объект. От матовой поверхности лучи света отражаются по принципу модели освещения Ламберта, то есть равномерно под любым углом. Но, независимо от структуры объекта, все поверхности отражают одинаковое количество света. Параметр отражения в 3D можно настроить с помощью карты Specular или Metallic.

Модель освещения Ламберта хорошо работает только на ровной поверхности (например, матовое покрытие коробки) и полностью игнорирует то, что в 3D называют шероховатостью (Roughness), гладкостью (Smoothness), глянцевитостью (Glossiness) или микроповерхностью (Micro-surface). Чтобы подчеркнуть такие свойства, в дополнение к основной карте отражения используют дополнительную карту глянцевитости (Glossiness map) или шероховатости (Roughness Map) — в зависимости от подхода к текстурированию.

С более подробным описанием процесса отражения лучей в реалистичной графике можно ознакомиться в лекции Эндрю Прайса «Секреты фотореализма в 3D для начинающих».

Поглощение и рассеивание

Сталкиваясь с неоднородной или полупрозрачной поверхностью, свет поглощается и (или) рассеивается. В некоторых случаях эти процессы происходят одновременно. При поглощении интенсивность света уменьшается, поскольку он преобразуется в другую форму энергии (как правило, в тепловую). Направление луча при этом не меняется, а его цвет зависит от соотношения количества поглощаемого света и длины волны.

Когда свет рассеивается, направление лучей становится хаотичным в зависимости от фактуры материала, но интенсивность излучения при этом не меняется. В результате подобного явления мы видим, как просвечиваются листья деревьев или уши на солнце. В 3D-графике это явление называется Subsurface scattering (SSS), то есть подповерхностное рассеивание.

Если материал совсем прозрачный и тонкий (стекло, вода), лучи света свободно проходят сквозь него. При наличии сторонних частиц (например, грязи) свет рассеивается сильнее, а прозрачность снижается.

Из этого следует, что свойства поглощения и рассеивания света зависят от толщины объекта. Чтобы подчеркнуть это явление в 3D, художники используют дополнительные карты толщины (Thickness map), а для оттенения отдельных участков — карту прозрачности (Transfluency map), которую мы упоминали в одном из прошлых материалов. Иногда этого можно достичь с помощью шейдеров — например, в Unreal Engine можно настроить подтон основной текстуры, который будет проявляться во время просвечивания.

Преломление

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

Чтобы узнать величину искажения, в 3D используют индекс преломления, он же IOR (от англ. Index of Refraction). В физике у каждой субстанции есть свой индекс преломления. В 3D его не запекают в текстуру, а настраивают непосредственно в самом игровом движке или в системе рендеринга, вводя в настройках шейдеров значение из таблицы. Также IOR используют для расчёта отражений или нулевого значения Френеля, о котором чуть ниже.

Закон сохранения энергии

В современные движки и системы рендеринга уже заложен фреймворк для взаимодействия света с материалом, основанный на принципе сохранения энергии. Это значит, что материал не может отразить больше света, чем было изначально. Как и IOR, этот параметр можно отрегулировать непосредственно в программе.

Если металл создаётся на основе набора карт Diffuse/Specular/Glossiness, то в этом случае Diffuse map будет чёрного цвета, а участки отражения отмечаются характерным цветом в карте Specular. Но на сегодняшний день для создания металлических поверхностей всё больше художников отдают предпочтение подходу Base Color / Metallic / Roughness, так как технически он более прост в исполнении и занимает меньше ресурсов.

Обработка снимка

Готовый снимок необходимо обработать в Photoshop или в другом редакторе следующим образом:

  • Нужно определить, какая область изображения будет в итоговой текстуре. С помощью инструмента кадрирования (квадрат) — обрезать лишнее и установить нужное разрешение. В качестве универсального размера можно остановиться на 2K (2048×2048 пикселей).
  • В качестве основы для PBR лучше взять Albedo map, которая не предполагает слишком ярких и тёмных участков. Даже если объект был снят в облачную погоду и на снимке нет засвеченных областей, затемнённые места (трещины, сколы, швы) нужно немного осветлить в графическом редакторе или специальной программе для текстур.

  • Для того чтобы будущая текстура получилась без стыков, её нужно сделать бесшовной. Такая коррекция доступна не только в Photoshop, но и в других программах — например, в PixPlant или Materialize, которую мы рассмотрим чуть позже.

Интерфейс Materialize достаточно простой для понимания. Сбоку находится трёхмерная рамка с плоскостью, которая визуализирует все изменения с материалом. В верхнем левом углу расположены окна, в которые нужно загружать карты. Буквы на панелях означают операции:

  • P (Paste) — вставить изображение из буфера обмена;
  • С (Copy) — копировать;
  • O (Open) — открыть файл;
  • S (Save) — сохранить изображение.

Нижние кнопки также связаны с основными действиями:

  • Quick Save — быстрое сохранение;
  • Preview — предпросмотр;
  • Edit — вызов редактора настроек текстуры;
  • Clear — удалить карту.

Для начала загрузим в слот Diffuse map карту альбедо, в нашем случае — отредактированную. После загрузки её можно дополнительно изменить в настройках Edit. Например, подкрутив ползунок Remove Shadow можно осветлить тёмные участки, не прибегая к Photoshop.

Так как на древесных стволах встречаются выпуклые участки, создадим карту высот, которую в дальнейшем сможем использовать в качестве карты смещения. Нажимаем Create в окне Height Map, и программа сгенерирует текстуру на основе оригинальной (или изменённой, если оригинальная карта была изменена в настройках) Diffuse map.

Светлые пятна карты формируют выпуклые участки, поэтому во время экспериментов с настройками убедитесь, что они не затрагивают щели и впадины. Делать тёмные участки слишком резкими не стоит, иначе вся поверхность покроется острыми шипами. Чтобы понять, насколько корректно выставлены настройки, нажимаем на Show Full Material. В опциях в нижней левой части экрана можно указать примитив, на котором будет визуализирован материал. Для большей наглядности в данном примере выбран цилиндр (Cylinder), и на этой модели видно, что смещения в геометрии конкретно для этого материала незначительны.

Аналогичным способом создаём карту нормалей (Normal Map). Как и в Height Map, здесь есть готовые шаблоны для будущей поверхности:

  • Default — по умолчанию;
  • Smooth — гладкая;
  • Crisp — шершавая;
  • Mids — среднее значение.

Чтобы добавить текстуре затенений, создаём карту Ambient Occlusion (AO map).

Если бы древесина была обработанной, потребовалась бы карта отражения (в Materialize её создают в окне Metallic). Но в данном случае можно лишь подчеркнуть матовость, добавив шероховатости (в Materialize это Smoothness Map).

Осталась последняя карта — Edge Map. Она не входит в основной набор, но с её помощью можно дополнительно подчеркнуть мелкие детали поверхности.

Примечание

В Materialize есть инструмент для создания бесшовных текстур. Открываем меню Tile Map, выбираем количество тайлов (2 или 4, как было в видео руководстве по Photoshop выше). Во время прокрутки ползунков Overlap X и Y края изображения начнут смещаться, после чего можно добавить параметр Edge Falloff, который сгладит стыки. Этот способ хорошо работает с геометрическим рисунком. Если поверхность неоднородная, лучше прибегнуть к ручной коррекции, упомянутой ранее.

Чтобы оценить результат, перенесём набор в Unreal Engine 5. На сайте Materialize можно скачать шейдеры для Unreal Engine и создать материал по их образцу в движке.

Примечание

Ассеты Materialize, как и любые другие файлы с расширением .uasset, нужно загружать в проект не путём перетаскивания в Content Browser, а копированием всех папок в директорию Content (проекта, а не самого движка).

Импорт материалов в игровой движок Unreal Engine 5

Открываем проект и создаём материал, предварительно загрузив папку с созданными текстурами в Content Browser и скопировав в папку Content на жёстком диске ассеты от Materialize. В папке Shaders находим материал Materialize_Standart_Displace и открываем его Material Graph. Выделяем всю цепочку нодов и копируем её (Ctrl + C). Заходим в редактор нодов собственного материала, вставляем шейдеры и добавляем сгенерированные карты в ноды, соответствующие названию текстур.

Текущую структуру материала можно немного упростить. На результат это не повлияет, но нодов станет меньше. Если материал предполагает тайлинг, левую связку параметров заменяем нодами TexCoordinate и UVTiling (в последнем можно указать, сколько раз текущее изображение нужно размножить). Оба этих элемента подключим к объединяющему ноду Multiply и свяжем со всеми UV-слотами текстур.

В данном материале отсутствует текстура Metallic map, поэтому мы удалили эту цепочку. Но так как поверхность в любом случае должна отражать свет, нужно обязательно указать значение для шейдера металла. Для этого создаём нод Constant, вписываем в него значение 1 и присоединяем к шейдеру Metallic.

Цепочку нодов с картой Height map, которую мы планировали использовать в качестве карты смещения, тоже придётся удалить. С появлением Nanite прежняя технология тесселяции , которая поддерживала такой тип текстур, стала неактуальной, а значит, избавляемся и от Tess Multiplier. В теории Height Map можно было бы подключить как карту высот/параллакса, но для наглядности нам нужно продемонстрировать выступающий рельеф материала, а не его имитацию. В этом поможет новая система геометрии движка. А пока применяем все настройки кнопкой Apply и сохраняем материал.

Чтобы понять, как материал будет смотреться в сцене при стандартном освещении Skylight, создадим примитив (первый раздел Shapes) в режиме Modelling. В нашем случае это будет цилиндр. Теперь в меню режима выбираем опцию Remesh и увеличиваем количество трианглов. Не стоит опасаться огромного количества полигонов: в дальнейшем геометрию можно упростить. Перетаскиваем на новый объект готовый материал (это можно сделать и на стадии создания меша, перетащив его в соответствующий слот).

Находим в Modeling Mode инструмент Displce (раздел Deform) и нажимаем на него. Объект сразу стал слишком деформированным из-за установок по умолчанию. В первом параметре Displacement Type выбираем Texture 2D Map. Прокрутив чуть ниже, находим слот Displacement Map и перетаскиваем в него готовую карту.

Теперь можно поработать с основными настройками смещения карты (Displace Intencity и Displacement Map Base Value), увеличивая или уменьшая рельефность объекта. В текущей карте изначально зафиксировано незначительное смещение, поэтому выкручивать ползунки на высокие значения нет смысла: появятся дефекты геометрии, и в целом чрезмерно выпуклая поверхность в данном случае будет казаться неестественной. Если бы в качестве основы был меш плоскости и текстура с каменным ландшафтом, её можно было бы «выдавить» сильнее.

Примечание

Закончив редактирование параметров смещения, не забудьте оптимизировать меш функцией Simplify в меню моделирования. После этого откройте свойства созданного Static Mesh и отметьте галочкой пункт Enable Nanite Support.

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

В результате мы создали PBR-материал дерева на основе фотоснимка, который в дальнейшем применили на простой объект. С помощью новых инструментов геометрии Unreal Engine 5 удалось подчеркнуть неоднородную поверхность материала. Шаблон, который использован в данном руководстве, — не истина в последней инстанции, и при углублённом изучении данной темы можно создать собственный ассет с настройками. Совершенству нет предела, главное — помнить о том, что свойства поверхности PBR-материала должны соответствовать реальному прототипу при любом освещении.

Итог

Наличие PBR-материалов существенно повышает реалистичность компьютерной графики. Но у такого подхода есть как положительные, так и отрицательные стороны.

Плюсы PBR-текстур:

  • Возможность создавать реалистичные ассеты. С ними зрителю проще идентифицировать поверхность объекта в 3D: доспехи из стали действительно кажутся стальными из-за того, что переданы свойства металлов.
  • Поверхность не теряет своих свойств, независимо от системы освещения.
  • Универсальность. Неважно, в какой программе сделан набор PBR-текстур, его можно загрузить в любую систему рендеринга или игровой движок, что упрощает рабочий процесс.

Минусы PBR-текстур:

  • В готовых картах уже есть определённый набор данных, изменить которые без дополнительных манипуляций довольно сложно. Например, если художник хочет внести изменения в отдельные карты (уменьшить рельефность или усилить шероховатость), ему придётся дорабатывать их в отдельном порядке. Соответственно, в этом случае другим техническим картам тоже могут потребоваться изменения.
  • Несмотря на универсальность материалов, у каждого движка или системы рендеринга существует свой набор технологий (как в случае с Displacement Map в Unreal Engine 5), поэтому не исключены дополнительные манипуляции с шейдерами. К тому же без шаблона начинающему пользователю будет сложно собрать материал с нуля.
  • Создание собственных PBR-материалов потребует теоретических знаний физики в отношении освещения. Если художник допустит ошибку, материал будет выглядеть неестественно.

Полезные ссылки с ресурсами о PBR

  • Энциклопедия по PBR с уклоном в Unreal Engine. В документе можно найти исчерпывающую информацию по физическим свойствам различных материалов, а также значения, которые можно задать в переменных для шейдеров.
  • Руководство по настройке шейдеров из официальной документации Unreal Engine 5.
  • Подборка уроков по созданию и настройке материалов в Unity.
  • Видеоурок с подробным объяснением настроек шейдеров для материалов в UE4/UE5 (канал Braytonks3D).
  • Лекция о PBR с уклоном в Blender (канал Blender Guru).

Читайте также:

  • Лучшие программы для 3D-моделирования
  • Что такое запекание текстур
  • Что такое UV‑развёртка — и почему она важна в 3D‑моделировании

Текстурирование, или что нужно знать, чтобы стать Художником по поверхностям. Часть 3. PBR и материалы

В прошлой части тутора мы разобрали принцип работы масок, что такое «текстура», и что абсолютно для всего используются каналы — параметры пикселя. Теперь рассмотрим всеми любимый PBR И соберем текстуры для создания мокрого грязного асфальта.

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

Также, если что-то совсем будет не понятно — очень прошу сообщить об этом, чтобы я мог раскрыть эту тему более подробно.

Часть 1. Пиксель здесь
Часть 2. Маски и текстуры здесь
Часть 3. PBR и Материалы — вы ее читаете.
Часть 4. Модели, нормали и развертка здесь.
Часть 5. Система материалов здесь.

PBR

Расшифровывается эта аббревиатура так: Physically Based Rendering. Что в переводе значит «Основанный на физике рендер».

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

В зависимости от поверхности, от ее состояния (отражает ли оно, как зеркало, или имеет шероховатость, есть ли капли грязи / воды / кофе на поверхности) вам в глаз приходит уже видоизмененный луч (скажем так). Причем, луч — это не совсем правильно, так как уже известно, что свет — это еще и волна. Но это уже слишком глубоко для нас, и здесь я могу ошибаться.

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

Расписывать о том, по каким правилам конструируется свет, как он отражается и отражается ли вообще, я не стану. Про то, как работает на уровне физики свет есть куча статей:

  • Статья по основам от создателей Substance Painter / Designer здесь. И ее перевод от 2015 года здесь . Ссылка на вторую часть перевода есть на той же странице.
  • Статья от Google по их разработке PBR (те же яйки, только в профиль с другими формулами) здесь.
  • Статья от MrShoor, который рассмотрел PBR на низкоуровневом программировании шейдеров здесь.

Параметры. Или как настраивается PBR.

Мы рассмотрим PBR с точки зрения общей концепции и на уровне работы с каждым параметром отдельно через каналы пикселей.

Из прошлой части тутора помним, что PBR на самом деле создается через суммирование параметров (вдаваться в формулы не стоит). То есть, PBR состоит из набора параметров:

  • Color (Base Color / Albedo).
  • Metallic.
  • Specular.
  • Roughness.
  • Glossiness.
  • Ambient Occlusion (далее AO).
  • Height.
  • Normal map.
  • Color использует 3 канала — RGB, чтобы формировать цвет пикселя.
  • Normal map использует 3 канала, чтобы сымитировать наклон поверхности. Каждый канал отвечает за наклон по вертикали, горизонтали и глубину соответственно.

Оффтоп. Normal Map.

Что касается Normal Map, то ее техническая реализация (какие каналы за какой наклон отвечают) разнится от настроек рендера. Так, например, в Unreal Engine 4 Зеленый канал отвечает за отрицательное значение наклона по вертикали, а в Unity за положительное.

Более подробную информацию можно прочитать здесь.

Еще есть огромная всеобъемлющая статья о том, как запекать Normal Map и как с ней вообще работать, на сайте render.ru здесь.

Ссылка на форум обсуждения карт нормалей и высот (параметр Height) здесь.

И википедийное описание рельефного текстурирования здесь.

Теперь стоит отметить, что рендер (отображение), основанный на физике, имеет несколько различных реализаций. Все они схожи между собой и пользуются все теми же каналами пикселей для корректировки конечного результата. Обычно разделяют 2 типа реализации:

image

В первом типе учитываются параметры Color-Metal-Roughness, во втором — Diffuse-Specular-Glossiness.

Оба типа реализации используют одинаково 3 параметра — АО, Normal map, Height.

Оффтоп о том, какой стандарт будем использовать мы

Мы будем использовать первый вариант, так как в дальнейшем перенесем наше обучение на Unreal Engine 4, а этот движок использует первый вариант комбинаций + имеет дополнительно параметр Specular, что лишний раз показывает, что PBR — это условность.

Причем, в современном PBR параметр Height (высота) смешивается и прячется в Normal Map. По факту, проще выразить неровность через одну карту Normal Map, чем высчитывать еще и глубину/высоту пикселя, или что-то еще в дополнительных каналах. Все проще, чем кажется, и мудрить с десятками параметров лучше не стоит.

Хотя при создании текстур в Substance Painter параметр Height и вынесен отдельно, при запекании текстур он вшивается в карту нормали (все еще можно его выделить в отдельный канал, если захотеть).

image

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

image

Давайте рассмотрим теперь то, как это работает в Substance Painter. Для этого мы снова создаем новый проект с обычным плейном и стандартными настройками (о них я рассказывал во второй части туторов). И создадим новый слой заливки:

image

Теперь рассмотрим стандартную текстуру нормалей из набора Substance Painter «Niche Rectangle Top Wide», которая располагается под тегом Hard Surface:

image

Далее мы перенесем эту карту нормалей в параметр слоя Base Color (из предыдущего урока мы должны помнить, как это делать). Так выглядит карта нормалей, если воспринимать ее, как изображение (изображение выше). Но теперь удалим ее из параметра BaseColor (мы это сделали для общего ознакомления), нажав на крестик в параметре:

image

И перенесем ее в параметр Normal:

Ваш конечный результат сразу обновился. Теперь, если зажать Alt и ЛКМ — можно крутить камерой и смотреть на плейн под разными углами. Свет, отраженный от пикселей, начнет переливаться, создавая иллюзию глубины. Как будто на плейне действительно есть какие-то впадины и выпуклости. Все это заметно под углом от 90 до 140-150 градусов. И чем больше угол наклона, тем больше становится понятно, что это расчет видеокарты, который определяет, как должен отражать свет каждый пиксель, чтобы создавать эту иллюзию. В качестве исходных значений мы передаем в видеокарту 3 параметра в виде каналов пикселя (иначе говоря, текстуру Normal map):

image

Теперь давайте извращаться. Удалим из параметра Normal эту карту и укажем ее в канале Metallic. Канал у Metallic один, а карта нормалей имеет 3 канала, соответственно, вставляя карту нормалей в этот параметр, Substance Painter обрежет 2 лишних канала (предполагаю, что GB) и оставит только один для расчетов:

image

image

В конечном результате видно теперь, что больше нет никаких выпуклостей и впадин, но сама поверхность стала походить на какую-то металлическую плату. Вы так же можете посмотреть, как будет выглядеть параметр Metallic один, без остальных параметров (BaseColor и прочих), переключив режим отображения на 1 канал Metallic (если вы ничего не меняли, то во вьюпорте справа сверху есть возможность переключения отображения):

image

Выбираем металлик и получаем следующий результат:

image

Как видим, это один канал в градациях серого, который определяет, какие пиксели должны выглядеть как металл, какие — как нечто среднее, а какие — не металл. 0 — не металлический. 1 — металлический.

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

Сложные материалы

Под словом «материал», обычно подразумевается коллекция готовых параметров, совокупность которых дает кинематографичный результат — материал (иначе говоря, фактуру, поверхность).
Возьмем, к примеру, вот это кожаное кресло:

image

Визуально, кресло состоит из 3 материалов:

  1. Кожа.
  2. Металлические клепки.
  3. Пластиковые (возможно, деревянные) ножки.
  • Color. (например, кожа — это близкий к черному цвет с крапинками трещин, а клепки — это золотистый цвет с какими-то пятнами грязи ).
  • Metallic (в коже практически равен 0, а в клепках близок к 1).
  • Roughness (в коже он ближе к 1, а в клепках ближе к 0).
  • Normal Map (В коже карта нормалей отображает трещинки и их глубину, а в клепках — технические углубления/выступления).
  • AO (в коже будет отображать корректность затенения трещин, а в клепках — углублений).

image

Подведем промежуточный итог:

Сейчас мы знаем:

  • Принцип работы PBR. И как им управлять через каналы.
  • Как работают все параметры, и как мы можем на них влиять через текстуры.
  • Принцип построения сложных материалов.
  • Как смешивать материалы с помощью масок.

Практика

А что нам нужно для того, чтобы собрать мокрый грязный асфальт со следами шин?

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

  1. Асфальт.
  2. Грязь.
  3. Следы шин (проще говоря, резина).

Где брать материалы?

Встал вопрос — где брать эти материалы? Можно немного помучиться и создать коллекцию параметров для каждого материала вручную. Например, найти изображение асфальта. Обрезать его до квадрата и сделать его в качестве BaseColor. Потом, через специальные программы (например, xNormal) по этому изображению создать карту нормали. Через карту нормали отрегулировать Metallic и Roughness (можно и по BaseColor). В итоге, потратить несколько часов на создание идеального материала асфальта, выверяя корректные параметры для металла и шероховатости.
А можно сделать все проще.
Как я уже сказал выше, большинство материалов уже заготовлены давно за вас. Ваша задача лишь найти готовые решения, которые отвечают вашим требованиям, скачать их и установить. Если вы пользуетесь Substance Painter, то у компании allegorithmic (теперь уже у Adobe) есть специализированное хранилище готовых материалов, которые можно скачать. Доступ к ним есть как платный, так и бесплатный.
Если вы пользуетесь Quixel, то в этой программе уже заложены сотни различных материалов, и вам достаточно лишь указать их и начать работать с масками. Что, кстати, очень удобно для новичков, поэтому, если вы только начали осваивать текстурирование и еще не готовы работать с генерацией материалов — рекомендую начать с Quixel. Принцип тот же, другая обертка. Туторы по программе есть в интернете.

Вот здесь (Ссылка) можно скачать текстуры для материалов, которые мы будем использовать в нашей практике.

Наша цель сейчас не создавать очень качественные текстуры, а познакомиться с тем, как можно с помощью параметров PBR и масок создать нечто интересное. Поэтому на данном этапе мы не будем пользоваться генераторами масок или грязи, а все будем делать вручную, чтобы понять суть. Когда вы понимаете суть, основу всего этого, вы сможете пользоваться генераторами куда более качественно, чем просто начнете их выкручивать в надежде получить идеальную маску / материал.

Если вы уже посмотрели файлы, то, наверное, обратили внимание на маску для шин. Она подготовлена отдельно, так как я не смогу ее сгенерировать на ходу в Substance Painter, поэтому я воспользовался рисунком шин, найденным в интернете и подготовил его через Photoshop для работы в Substance Painter:

image

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

image

В проекте создадим 3 папки под каждый материал и проименуем их, чтобы не путаться:

image

В нашем случае очень важна иерархия папок (да и не только в нашем, а всегда важна). Иерархия определяет уровень материала, иначе говоря — что на чем лежит. Асфальт в нашем примере — это дно. На нем остаются следы от шин. А вот грязь может быть и на следах шин, и на асфальте. Поэтому грязь будет выше всех.

Теперь давайте сразу спрячем все, что должно быть спрятано, и оставим только асфальт. То есть, создадим черные маски на папках Rubber и Dirt:

image

Теперь создадим в каждой папке по 1-ому слою. А точнее, создадим слои и распределим их в папки. Не забываем о нейминге, чтобы потом не путаться (не смотря на то, что визуально не совсем понятно, что слои в папках — поверьте, они в папках):

image

Все новые слои имеют базовые средние параметры. Поэтому Base Color серый, нормаль не отображает выпуклостей, а Metallic и Roughness не создают впечатления какого-либо материала.
И сейчас нам нужно это исправить, указав в каждый параметр соответствующую текстуру (на примере асфальта):

image

Ваша задача сейчас распределить все текстуры материалов в нужные параметры слоев. После того, как вы все это проделаете, назначим маску для резины и создадим эффект следов. Так как у нас уже есть черная маска у папки, то нам нужно просто подключить файл со следами колесиков к этой маске. Для этого кликаем ПКМ по маске и выбираем Add Fill:

image

И в параметрах GrayScale указываем маску:

image

В результате на асфальте появятся следы резины, но их будет достаточно сложно разглядеть, так как это все таки PBR и кинематографичность (. ). Чтобы их увидеть, нужно Plane повернуть под определенным углом:

image

Сейчас эти два слоя (асфальт и резина) находятся на одном уровне. Но мы-то знаем, что резина находится НА асфальте, а значит, слой с резиной должен быть физически выше. И вот теперь мы воспользуемся тем самым параметром Height.

Найдите его в параметрах слоя Rubber и выкрутите его на максимум, чтобы прочувствовать, как он работает. Покрутите камерой, чтобы увидеть, как свет начал обрабатывать пиксели, которые вы настроили своими руками. Прочувствуйте свою мощь! =)

Ну а теперь выровняйте параметр на 0.1, чтобы это было не так явно и более правдоподобно:

image

Мы могли бы выкрутить в -0.1, чтобы у нас проявились ямки, как после машин на грязи, но это асфальт, и он не проваливается так легко.

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

Как это работает? Если посмотреть на BaseColor асфальта, то можно обратить внимание, что чем темнее пиксель, тем больше он похож на трещину. То есть, в этом изображении все темное — это трещины, а все светлое — это поверхность. И если мы хотим воспользоваться изображением, как маской, то нам достаточно было бы инвертировать цвета (темное сделать светлым и наоборот) пикселей, и у нас получилась маска для грязи.

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

Далее, укажем, что в маске грязи должен быть файл и присоединим к ней файл Asphalt_BaseColor:

image

Как я и писал выше — светлым был асфальт, а темным — трещины. Соответственно, на больших поверхностях начала проявляться грязь, а в трещинах доминирует базовый серый цвет (базовые параметры / фон).

Теперь наша задача заставить эту текстуру восприниматься иначе — инвертировать цвета и усилить их, чтобы маска проявила грязь в трещинах. Проще всего это сделать с помощью дополнительного эффекта «Уровни» (Levels). Добавляем к маске дополнительный фильтр «Levels» так же, как мы добавляли Fill (ПКМ — Add Levels). И выкручиваем параметры примерно, как на картинке ниже:

image

И нажимаем на кнопку ниже «Invert» для инвертирования уровней интенсивности канала:

image

Теперь грязь располагается именно там, где нам нужно — в трещинах асфальта:

image

Включаем асфальт и присматриваемся к нашим трудам:

image

Но это слишком просто. Поэтому, давайте теперь добавим на наш асфальт оранжевую разметку. Для этого нам необходимо будет:

image

  • Создать новую папку и назвать ее Road_Line.
  • Добавить черную маску папке.
  • Добавить в папку новый слой и назвать его Layer_RoadLine.
  • У слоя в параметрах BaseColor указать оранжевый цвет напрямую:

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

Теперь, вспоминая правила иерархии слоев, расположим папку с дорожной линией между асфальтом и резиной:

image

Настало время ручного рисования. Выделите маску папки RoadLine и начертите на плейне полосу разметки. У меня получился примерно такой результат:

image

Теперь стоит добавить еще одну маску на сам слой с краской, чтобы создать ощущение отвалившейся краски. Для этого мы не будем создавать папку, а создадим маску прямо на слое и добавим любую стандартную маску Substance Painter. Чтобы сделать это — добавьте маску, а потом добавьте заливку (ПКМ по маске и Add Fill). В заливке укажите Текстуру Dirt 4, которая находится под тегом Procedural:

image

И смотрим результат:

image

Не забываем, что у слоя с краской нужно указать высоту. Предлагаю указать 0.05 — среднее между резиной и асфальтом.

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

Ну и какой асфальт без воды?

Для этого создайте самостоятельно папку вместе со слоем. Пока НЕ добавляйте никаких масок.

Установите папку в иерархии на самый верх. Ведь вода же сверху, правильно? У слоя выкрутите на максимум Metallic и на минимум Roughness. Далее укажите высоту воды, равную 0.15.

И теперь отключите канал Color, нажав на кнопку, выделенную синей рамочкой:

image

Что произошло? Произошло смешение все нижних слоев согласно маскам и слоя с водой. Но у воды теперь нет канала цвета, а значит, она не может красить в нужные ей цвета пиксели. За то все другие каналы влияют на пиксели текстуры, и асфальт стал максимально мокрым и неприятным, как будто и вовсе не асфальт =)

image

Теперь домашнее задание: наложите маски так, чтобы асфальт был не полностью мокрым, а с небольшими лужами. Помните, что лужи не имеют неровностей на поверхности — подумайте, как нужно смешать слои так, чтобы лужи были гладкими. И что для этого нужно еще сделать? Я уверен, вы справитесь =)

В этом туторе мы разобрали то, как создавать текстуры. В целом, правильно применяя параметры, вы уже можете начинать текстурировать и даже смело можете назвать себя джуниор-художником по текстурам.

Мы узнали, как работает PBR.

Параметры в PBR необязательно должны быть уникальны. Это все еще обычные параметры, которые мы можем указывать через каналы пикселей.

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

Мы познакомились с материалами и тем, как они собираются. Теперь вы знаете, что не обязательно быть супер-крутым фотошоп-мастером, а достаточно найти готовые параметры, чтобы программа смогла из них представить корректно материал.

В следующих частях мы затронем такие темы, как развертка, плотность текселя (и что такое тексель), и подойдем, наконец, к самому интересному — созданию собственных шейдеров в UE4.

Программы Quixel и Substance Painter

Я всегда рекомендую новичкам, которые занимаются именно созданием текстур из материалов (не самих материалов), начать работать с Quixel. Поскольку эта программа умеет уже сотню готовых пресетов, которые очень легко контролируются и настраиваются, а через маски можно добиваться того же результата, что и у нас на практике через Substance Painter.

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

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

О PBR и переводе этой аббревиатуры

Очень часто PBR переводят, как физически корректный рендер. Я же считаю, что здесь важен точный перевод, потому что переводы типа «Физически корректный» в корне не верны, так как рендер в данном случае именно основан на физике, но не обязан быть корректным по отношению к физике. Вы можете сделать металл = 1, и шероховатость, равную 1, и включить дополнительно кучу других параметров, и это уже будет не корректный с точки зрения физики материал, а основанный когда-то на нем и переделанный вами в свой собственный набор параметров. То есть, создавая материалы на основе PBR, вы можете абсолютно полностью игнорировать законы физики и создать материал, который будет уникальным в своем роде.

Например, рисованные в своей стилистике камни. Как физически корректно мы должны отображать выдуманный материал, который не существует в природе?

  • Работа с 3D-графикой
  • Разработка игр

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *