Геймдев
#статьи

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

И как их создавать на основе фотографий.

Изображение: Angel Fernandes / ArtStation

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

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


Что такое PBR

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

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

Слева объект с обычными текстурами, справа — с применением PBR
Изображение: Joe «EarthQuake» Wilson / Marmoset

Сходства и различия 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 для начинающих».

Шкала отражений шейдеров Metallic и Roughness
Изображение: Reallusion

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

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

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

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

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

Поверхность объекта с использованием Thickness map
Изображение: SideFX Labs

Преломление

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

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

Изображение: Erik Keller

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

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

Пример настройки отражения материалов в соответствии с законом сохранения энергии в Blender (движок Cycles)

Природа материала: проводники и диэлектрики (металлы и неметаллы)

Перед тем как приступить к созданию PBR-текстур, художник сразу должен определиться, какая поверхность будет в итоге — металлическая или нет. Если это металл, важно определить наличие следующих особенностей будущего материала:

  • Механическая обработка — необработанный металл будет диэлектриком по умолчанию.
  • Покраска — металл, покрытый слоем краски, лишится металлических свойств. Но если концепт предполагает слой краски, которая местами облупилась, и на этих участках проглядывает металлическая поверхность, то материал будет сочетать в себе характеристики металлов и неметаллов.
  • Воздействие внешней среды — коррозия, грязь, смола и так далее. В этом случае набор текстур тоже будет комплексным с учётом свойств побочных субстанций.

Известно, что обработанные металлы отражают свет на 100%. Цветные металлы поглощают свет на разных частотах видимого излучения. Часть лучей поглощается и перерабатывается в энергию. В результате отражённый свет формирует итоговый оттенок металла. Например, золото поглощает синий цвет, поэтому мы видим его жёлтым. Вот почему при создании PBR-текстур металлов используют не цветные изображения в карте Diffuse, а шейдер Base Color.

Значения цветового спектра RGB для некоторых диэлектриков и металлов на основе таблицы рендеринга UE4
Источник: 3D and AR software — Adobe Substance 3D. Инфографика: Майя Мальгина для Skillbox Media

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

Сравнение подходов использования карт Specular и Metalness

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

Подчеркнуть природу диэлектриков и проводников также поможет эффект Френеля. Когда свет попадает на поверхность прямо или перпендикулярно (под углом 90°), края объекта отразят все световые лучи, при этом в центре (0°) отразится лишь определённый их процент в зависимости от природы самого материала. Это значение называют F0, то есть нулевое значение Френеля.

Диапазон F0 для большинства неметаллов варьируется от 0,02 до 0,05 (линейные значения), за исключением драгоценных камней (0,08). Для металлов — в пределах 0,5–1,0.

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

PBR-текстуры на основе фотографии

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

Как сфотографировать поверхность для будущей текстуры

Неважно, какую поверхность вы хотите увековечить в текстуры — кору дерева, почву или кирпичную стену, — съёмку лучше всего проводить в облачную погоду. Это условие обеспечивает естественное рассеянное освещение. Если на улице солнечно — снимайте объект в тени. Таким образом освещение будет равномерным, без пересветов и слишком контрастных теней. Если же съёмка проводится в помещении, следует позаботиться о расстановке ламп с рассеянным светом.

Во время снимков поверхности важно не допустить искажений, поэтому камера должна находиться под прямым углом. Помимо штатива, рекомендуется использовать объектив 50 mm. Он даёт хороший фокус, не искажая фотографию, и улавливает мельчайшие детали. Если вы снимаете на смартфон, подберите в настройках камеры самый оптимальный режим, приближённый к этому фокусу. PBR-текстуры заочно подразумевают высокое разрешение, поэтому не забудьте выставить его в настройках.

Примечание

Чтобы установить фокус 50 mm в iPhone, коснитесь выбора фокуса в режиме камеры в нижней части экрана. Удерживая кнопку управления масштабированием, перемещайте ползунок до значения 2,2. Данная функция доступна для моделей с двойной и тройной камерой.

В качестве основы для будущего материала мы сняли кору старого дерева
Фото: Skillbox Media

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

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

  • Нужно определить, какая область изображения будет в итоговой текстуре. С помощью инструмента кадрирования (квадрат) — обрезать лишнее и установить нужное разрешение. В качестве универсального размера можно остановиться на 2K (2048×2048 пикселей).
  • В качестве основы для PBR лучше взять Albedo map, которая не предполагает слишком ярких и тёмных участков. Даже если объект был снят в облачную погоду и на снимке нет засвеченных областей, затемнённые места (трещины, сколы, швы) нужно немного осветлить в графическом редакторе или специальной программе для текстур.
Руководство по созданию карты альбедо в Photoshop и сравнение полученного результата в программах CrazyBump и PixPlant
  • Если изображение предназначено для тайлового текстурирования, желательно, чтобы количество уникальных деталей (крупная трещина посередине или сбоку, массивный участок мха, царапина и так далее) было сведено к минимуму. В противном случае при текстурировании большой площади эти акценты будут выглядеть неестественно. Чтобы быстро избавиться от них, в Photoshop выделяем проблемную область инструментом «Лассо», нажимаем Shift + F5, выбираем опцию «С учётом содержимого» и подтверждаем действие. Редактор аккуратно заполнит фоном пространство.
Текстура до и после редактирования
Изображение: Skillbox Media
  • Для того чтобы будущая текстура получилась без стыков, её нужно сделать бесшовной. Такая коррекция доступна не только в Photoshop, но и в других программах — например, в PixPlant или Materialize, которую мы рассмотрим чуть позже.
Способ создания бесшовной текстуры в Photoshop

На основе полученной текстуры можно сгенерировать остальной набор технических карт. Существует много программ, где доступна подобная операция: Substance 3D, Autodesk Mudbox, ShaderMap и многие другие. В рамках этого материала рассмотрим создание набора текстур в бесплатной программе Materialize, которую легко освоить начинающему пользователю.

Создание PBR-текстур в Materialize

Интерфейс программы
Скриншот: Materialize / Bounding Box Software

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

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

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

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

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

Интерфейс настроек диффуз-текстуры в Materialize. По умолчанию плоскость визуализирует результат наполовину, чтобы его можно было сравнить с оригинальным значением
Скриншот: Materialize / Bounding Box Software

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

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

Настройка Height Map и её визуализация на цилиндре
Скриншот: Materialize / Bounding Box Software

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

  • Default — по умолчанию;
  • Smooth — гладкая;
  • Crisp — шершавая;
  • Mids — среднее значение.
Ствол дерева достаточно рельефный, поэтому в примере выставлен шаблон Crisp и немного увеличен параметр Angular Intencity
Скриншот: Materialize / Bounding Box Software

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

Визуализация материала с Ambient Occlusion
Скриншот: Materialize / Bounding Box Software

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

Настройка Smoothness Map
Скриншот: Materialize / Bounding Box Software

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

Краткое объяснение работы Edge Map в Materialize

Материал готов. Теперь можно выбрать расширение файла, в котором будут экспортированы итоговые текстуры (в данном случае — PNG), и нажать кнопку Save Project. Набор карт вместе с проектом сохранится в выбранной папке.

Визуализация итогового материала в Materialize
Скриншот: Materialize / Bounding Box Software

Примечание

В 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 и сохраняем материал.

Скриншот: Unreal Editor / Epic Games

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

Цилиндр после установки материала
Скриншот: Unreal Editor / Epic Games

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

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

На выделенном материале можно заметить небольшое смещение геометрии, схожее с тем, что было в Materialize
Скриншот: Unreal Editor / Epic Games

Примечание

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

Настройка поддержки Nanite для мешей в Unreal Engine (пункт выделен красным)
Скриншот: Unreal Editor / Epic Games

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

Финальный вид материала при дневном освещении
Скриншот: Unreal Editor / Epic Games

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

Итог

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

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

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

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

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

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

  • Энциклопедия по PBR с уклоном в Unreal Engine. В документе можно найти исчерпывающую информацию по физическим свойствам различных материалов, а также значения, которые можно задать в переменных для шейдеров.
  • Руководство по настройке шейдеров из официальной документации Unreal Engine 5.
  • Подборка уроков по созданию и настройке материалов в Unity.
  • Видеоурок с подробным объяснением настроек шейдеров для материалов в UE4/UE5 (канал Braytonks3D).
  • Лекция о PBR с уклоном в Blender (канал Blender Guru).
Запишите ребёнка на бесплатный урок в Skillbox Kids ➞
Учим детей программированию, веб-дизайну и разработке игр. Преподаватель — IT-эксперт — подберёт курс по интересам ребёнка. Подробности — по клику.
Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована