Конвертирование текстур в/из PBR формат

В данной статье, я собираюсь продемонстрировать то, как контент созданный для традиционных шейдеров может быть сконвертирован в физически корректные шейдеры (PBR), как сконвертировать контент из одного PBR workflow (далее — метод) в другой, а также объясню различные особенности в современных методах. Данная статья предназначена для продвинутых пользователей, если вы не относите себя к таковым, то рекомендуется сначала ознакомиться с двумя статьями от Jeff Russell (ссылки в следующем абзаце), а также с той статьёй, в которой я описал базовые принципы, которые тут могут быть упомянуты, но не рассмотрены полностью.

Статьи для ознакомления:
Basic Theory of Physically-Based Rendering — от Jeff Russell
Physically Based Rendering, And You Can Too! — от Joe Wilson

PBR: Заблуждения и мифы

Прежде чем начать, я хотел бы прояснить некоторые вещи. Есть некоторые неточности в трактовке того, что такое физически корректный рендеринг, и какие текстурные карты должны в нём применяться.
Во-первых, использование карты metalness не является обязательным требованием для PBR системы, и использование карты specular не означает, что ассет «не PBR». Я часто вижу комментарии на форумах, когда кто-то видя, что автор при создании контента использует specular или gloss карту, спрашивает: «Почему вы не используете PBR?», поэтому давайте определимся с тем, что же такое PBR на самом деле.
В наиболее общем понимании PBR — это набор сложных шейдеров, которые описывают физику света и материи, наряду с тем контентом, который настроен под это дело с использованием правдоподобных значений реальных материалов. По сути,PBR является целостной системой создания контента и визуализации, которые могут и часто имеют отклонения в итоговой реализации (как правило шейдеры или типы входящих текстур), в зависимости от того, какие инструменты или движок вы используете. Кроме того, добавление любого старого контента в PBR шейдер не гарантирует физически корректные результаты. Это ошибочное мнение встречается также часто как и упомянутые выше «Почему вы не используете PBR?». Необычные шейдеры — лишь половина работы, вы также должны логически настроить контент.
И ещё — diffuse или albedo? По факту, эти два понятие означают одно и тоже, а именно — базовый цвет объекта, и часто используются как синонимы.

PBR: Что изменилось?
разница между традиционным методом и PBR

Чтобы в полной мере понять, как создать или конвертировать контент, предназначенный для PBR систем, важно, посмотреть на то, как меняются шейдеры. Одно из самых больших различий в том — как просчитывается продвинутое освещение в современных шейдерах. Сегодня у нас есть динамические источники света, которые отбрасывают реалистичные тени, а также освещение основанное на изображении (IBL), дающее точную диффузию окружения и зеркальных отражений. Это означает, что нам больше нет нужды рисовать освещение, отражение или тени непосредственно в наших текстурах. Сейчас мы можем уделить больше внимания на репликацию свойств материала, а не запекать освещения для определенных условий.

Кроме того, рендеринг линейного пространства означает, что больше нет нужды разукрашивать specular карту в цвет обратный нашему диффузу, чтобы получить нейтральный, белый блик, в то время как сохранение энергии в функции микроповерхности (шершавые поверхности будут иметь более широкие блики, рассеивая свет по большому участку поверхности) избавляет нас от необходимости вручную, на specular карте, делать шершавые участки тёмными, а глянцевые участки белыми. Это означает, что specular карты будут в основном содержать чуть больше информации нежели «плоские» значения (оттенки серого для диэлектриков, цветные для некоторых металлов) для каждого типа материала, в то время как карты микроповерхностей должны определить большую часть вариаций поверхности.

Традиционный контент
разница между традиционным методом и PBR

Для демонстрации различий между традиционным и современным шейдерами, я буду использовать винтовку созданную для Darkest of Days. Данный ассет отличный пример, т.к. он показывает техники которые я использую в процессе создания PBR материала, а именно:

  • Диффуз слишком тёмный, скорее всего это сделано для приятного вида в определённом типе освещения окружения, но не в большом.
  • Ambient occlusion и cavity карты уже запечены в диффуз и specular. AO/cavity должны быть добавлены в шейдер на отдельные входы, чтобы он смог использовать их более разумным способом. Кроме того, АО большого размера не надо добавлять в specular, т.к. затенение не является тем, что определяет specular карта.
  • Карта градиента была также запечена в диффуз и specular. Градиентные карты могут быть удобными инструментами для создания масок локальных эффектов (к примеру, грязь/пыль в низу персонажа), тем не менее, они (маски) не должны быть умножены непосредственно на текстуру.
  • Шейдер этого ассета изначально не поддерживал карту gloss. Это означает, что specular карте пришлось делать двойную работу, пытаясь изображать карты и отражения и микроповерхности, в то время как как для всего материала использовалось одно значение блеска.
  • Specular значения были установлены «на глаз», а не исходя их реальных данных. В итоге, чёрный покрашенный металл слишком отражает свет и имеет небольшой желтый оттенок без видимых причин, в то время как пластиковые и резиновые материалы обладают недостаточной отражающей способность.
Конвертация текстур: Traditional -> PBR Specular
Теперь, когда мы понимаем общие различия между традиционными и PBR шейдерами, мы можем обновить контент, чтобы работать со specular’ом на физически корректной основе.

разница между традиционным методом и PBR

Во-первых, я удалил всё запечённое освещение и градиенты из albedo и specular карт. AO и cavity были убраны в 2 отдельные текстуры и подключены в соответствующие входы в шейдере. После чего я сделал диффузную карту более светлой.

С этого момента я разделяю содержимое карты specular на gloss и specular карты. Все вариации поверхности я вывел в gloss карту, где обновил значения для каждого материала. Если у вас уже есть gloss карта, то проверьте её, дабы удостовериться, что изменения имеют смысл. К примеру, основное покрытие винтовки, метал — более гладкий/глянцевый нежели матовый слой лака; в то время как царапины на финишной глянцевой красе могут обнажить грунтовку, которая будет более шершавой.

Т.к. большинство текстурных вариаций переместились в карту gloss, мы можем сфокусироваться на значениях отражающей способности. На этом этапе очень важно, определить, что является металлом, а что нет (да, даже если вы не используете metalness метод). Причина этого проста, изоляторы (диэлектрики), как правило, имеют неокрашенные значения отражающей способности ~4% в линейном пространстве (или #383838 в sRGB), min и max значения, обычно в диапазоне 2-16% (хотя некоторые диэлектрики, кроме камней >4%), в то время как чистые металлы имеют значительно более высокие показатели отражающей способности, как правило, в диапазоне 70-100%. Таким образом, очень важно точно определить какой тип материала вы представляете, когда речь заходит о поиске правильного значения отражающей способности.

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

Metalness метод против Specular метода
Прежде чем продолжить, следует понять основные различия между metalness и specular методами. Большинство игровых движков поддерживает тот или другой метод, Toolbag 2 (как и UE4) поддерживает оба, что позволяет сравнить их достоинства напрямую.

разница между традиционным методом и PBR

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

Метод metalness использует карту albedo, для определения диффузного и отражающего содержимого, дабы определить, где материал диэлектрик, а где металл. Причина этого в том, что металлы проводят электрический ток, это означает, что большинство фотонов (которые представляют собой электромагнитные волны) отражаются от поверхности, и любые фотоны, которые проходят через поверхность поглощаются, а не диффундируют, так что металлы, как правило, не имеют диффузного компонента. Изоляторы, отражают очень небольшое количество света (~ 4%) и большая часть света, который ударяется о материал рассеивается или отскакивает вокруг поверхности, создавая равномерное распределение цвета.

На практике это означает, что многое или даже все (если ваша текстура имеет только металлы или диэлектрики, но не оба) диффузные или specular карты не будут нести в себе информации, поэтому metalness метод, как правило, более эффективный. Тем не менее, одним из недостатков содержания и диффузного и specular содержимого в одной текстуре, является то, что появляются артефакты вдоль границы перехода материалов.
разница между традиционным методом и PBR

Gloss и roughness карты определяют туже информацию, но обычно, в обратных значениях. Gloss карта, своими светлыми значениями, определяет гладкие/глянцевые поверхности, а roughness шероховатые/матовые поверхности. В некоторых ситуациях понятие glossiness является синонимом reflectivity, поэтому некоторые люди принимают roughness в качестве более понятного слова. Здесь важно не то, как называется карта, а то, какую смысловую нагрузку она несёт; спросите у вашего технического художника/инженера если остались вопросы.

Плюсы specular метода

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

Минусы specular метода

  • Некорректные результаты из-за установки нелогичных значений отражающей способности.
  • Используется больше текстурный памяти нежели в metalness методе.
Плюсы metalness метода

  • Карта albedo определяет цвет объекта независимо от типа материала, что может быть проще для понимания художниками.
  • Делит материалы на 2 категории — металлы и диэлектрики, что немного затрудняет создание нереалистичных текстур.
  • Использует меньше текстурной памяти нежели метод полноцветных отражений.

Минусы metalness метода

  • Участки перехода материалов вызывают артефакты в виде белых линий.
  • Меньше контроля над отражающей способностью диэлектриков*
  • Если художники не понимают рабочий процесс, то использование нелогичных значений в metalness карте «ломает» шейдер.

* Некоторые metalness методы позволяют использовать metalness карту, а также specular для контроля отражений диэлектриков. На данный момент, такое не возможно в Toolbag 2.

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

Конвертация текстур: Specular -> Metalness
Теперь, когда мы правильно настроили контент и знаем разницу между двумя методами, сконвертировать карты будет довольно просто.

Сперва создайте metalness маску, присвоив чёрный цвет (не металлы), или белое значение (металл) в зависимости от того что это за поверхность. Если у вас есть PSD файл с вашей текстурой, то вам будет проще создать эти маски, используя содержимое нужных слоёв. Ваша metalness карта должна быть в основном чёрно-белая, а оттенки серого должны быть в местах грязи, пыли, ржавчины и тд. Также значения оттенков серого можно использовать для материалов, которые являются частично металлическими; однако такое случается довольно редко. Обычно, когда металлический объект имеет покрытие, то он действует как диэлектрик.

Конвертирование текстур в PBR формат
Конвертирование текстур из PBR формата После того как вы сделали вашу metalness карту, создайте новый файл в Photoshop и добавьте вашу диффузную карту в качестве фонового слоя. Затем добавьте specular слой на уровень выше и добавьте маску слоя. Вставьте вашу metalness карту в specular маску слоя. Вы должны увидеть в содержимом specular’а наличие металлических поверхностей, а в диффузном содержимом наличие диэлектриков; в итоге у вас получится albedo карта для metalness метода.

Конвертация текстур: Metalness -> Specular
Конвертация из metalness метода в specular довольно проста. На просто надо разделить диффузную и specular информации из albedo карты, в две отдельные текстуры.
разница между традиционным методом и PBR
Diffuse Map

  • Загрузите вашу albedo карту в Photoshop
  • Создайте новый заполняющий слой в чёрным цветом (#000000)
  • Вставьте вашу metalness карту в маску слоя вашего заполняющего слоя
Specular Map

  • Создайте дубликат оригинальной albedo карты и переместите её на заполняющий слой
  • Создайте другой заполняющий слой со значением #383838
  • Вставьте вашу metalness карту в маску слоя вашего заполняющего слоя
  • Инвертируйте маску слоя
Comparisons and Disclaimers
Теперь мы можем сравнить эффективность двух различных методов конвертации описанных выше.
разница между традиционным методом и PBR

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

Логика материала

Так что же я имею в виду под «разумными» или «настроенными» значениями? К сожалению, это сложный вопрос, ответ на него зависит от того, какой именно материал вы собираетесь создавать. Вместо того, чтобы создать шпаргалку, я попытаюсь объяснить что такое «логика материала».

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

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

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

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

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

Перевёл на великий и могучий RedComrade

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