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

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

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

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


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



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

Во-первых, использование карты metalness не является обязательным требованием для PBR системы, и использование карты specular не означает, что ассет «не PBR». Я часто вижу комментарии на форумах, когда кто-то видя, что автор при создании контента использует specular или gloss карту, спрашивает: «Почему вы не используете PBR?», поэтому давайте определимся с тем, что же такое PBR на самом деле.

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

И ещё — diffuse или albedo? По факту, эти два понятие означают одно и тоже, а именно — базовый цвет объекта, и часто используются как синонимы.

PBR: Что изменилось?



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

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

Традиционный контент



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

Диффуз слишком тёмный, скорее всего это сделано для приятного вида в определённом типе освещения окружения, но не в большом.
Ambient occlusion и cavity карты уже запечены в диффуз и specular. AO/cavity должны быть добавлены в шейдер на отдельные входы, чтобы он смог использовать их более разумным способом. Кроме того, АО большого размера не надо добавлять в specular, т.к. затенение не является тем, что определяет specular карта.

Карта градиента была также запечена в диффуз и specular. Градиентные карты могут быть удобными инструментами для создания масок локальных эффектов (к примеру, грязь/пыль в низу персонажа), тем не менее, они (маски) не должны быть умножены непосредственно на текстуру.

Шейдер этого ассета изначально не поддерживал карту gloss. Это означает, что specular карте пришлось делать двойную работу, пытаясь изображать карты и отражения и микроповерхности, в то время как как для всего материала использовалось одно значение блеска.

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

Конвертация текстур: Traditional -> PBR Specular

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

Во-первых, я удалил всё запечённое освещение и градиенты из 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) поддерживает оба, что позволяет сравнить их достоинства напрямую.

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

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

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

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

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



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

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

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

Карта albedo определяет цвет объекта независимо от типа материала, что может быть проще для понимания художниками.

Делит материалы на 2 категории — металлы и диэлектрики, что немного затрудняет создание нереалистичных текстур.

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

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

Некорректные результаты из-за установки нелогичных значений отражающей способности.

Используется больше текстурный памяти нежели в metalness методе.

Минусы 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 карты, в две отдельные текстуры.

✔ Diffuse Map
✔ Загрузите вашу albedo карту в Photoshop
✔ Создайте новый заполняющий слой в чёрным цветом (#000000)
✔ Вставьте вашу metalness карту в маску слоя вашего заполняющего слоя
✔ Specular Map
✔ Создайте дубликат оригинальной albedo карты и переместите её на заполняющий слой
✔ Создайте другой заполняющий слой со значением #383838
✔ Вставьте вашу metalness карту в маску слоя вашего заполняющего слоя
✔ Инвертируйте маску слоя
✔ Сравнения и заметки
✔ Теперь мы можем сравнить эффективность двух различных методов конвертации описанных выше.

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

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



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

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

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

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

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

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

Дата размещения: 5-11-2019, 14:05

Рекомендуем посмотреть
  • Статическое освещение в Unreal Engine 4 Каждый проект уникален и имеет собственные цели, поэтому этот раздел даст вам основные концепции и базисы для познания того, что вы хотите получить от статического освещения.
  • Смешивание кадров с использованием векторов движения Моя вариация смешивания кадров, впервые разработанная Guerrilla Games для Killzone 2, в конце статьи вы найдёте ссылки на их статью и другие ресурсы. Цель данного метода заключается в том, чтобы
  • Уменьшаем размер APK файла в Unreal Engine 4 Независимо от типа Android устройства, на которое нацелен ваш проект на UE4, уменьшение размера пакета Android приложения (APK) до уровня в 50 МБ для магазина Google
  • Бесшовный метод пересадки волос Бесшовный метод пересадки волос в наше время стал своеобразным прорывом в сфере пересадки волос. Он дает возможность сделать пересадку с малоинвазивным вмешательством.
  • Жидкая шумоизоляция После того, как наше правительство решило отменить процедуру прохождения технического осмотра автомобилей и ввело диагностическую карту, в качестве легитимного допуска к эксплуатации автомобиля у