Что такое 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 используется базовый сет из следующих растровых карт

Metalness workflow

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

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

Очевидно, что некоторые текстуры подключаются к разным слотам шейдера и в принципе отличаются по содержанию. Разница между 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

Metalness workflow

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

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

Яндекс.Дзен | ВКонтакте | YouTube | Instagram

Источник

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

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

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

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

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 Validate

У Specular/Gloss несколько минусов. Во-первых, он сложнее для новичков, потому что в работе с ним нужно постоянно сверяться с таблицами и следить за значением Specular. Во-вторых, он более ресурсоёмкий, потому что использует две цветные текстуры — цвет есть и у Diffuse, и у Specular.

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

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

«Окантовка» в Metallic/Roughness

Избежать этого можно, если повысить разрешение текстуры, или с помощью эффектов. Сначала нужно размыть текстуру Metallic, а затем с помощью фильтра Histogram Scan уменьшить или увеличить радиус размытия.

Помимо основных Albedo, Reflectivity и Microsurface существуют и необязательные вспомогательные текстуры, которые делают процесс работы удобнее или дополняют материал.

Curvature Map — это «карта кривизны», чёрно-белая текстура, на которой яркость пикселя показывает изменение кривизны поверхности. С помощью Curvature Map можно получить маски внутренних (Cavity) и внешних (Concavity) углов, а получить эту текстуру можно из Normal Map через конвертацию. О том, что такое Normal Map, мы подробно писали здесь.

Пример Curvature Map и зависимости цвета и кривизны

Для создания текстуры Антон сначала добавил на модель пустую маску, а затем добавил на неё карту Curvature. После этого он применил эффект Levels, который позволил специальным ползунком регулировать значение текстуры.

Ambient Occlusion — это текстура «самозатенения», которая может использоваться и как дополнительная, и как одна из основных текстур материала. В Marmoset Toolbag для неё есть отдельный слот, в котором её можно дополнить текстурой Cavity.

[Она показывает] тени, которые возникают в условиях полностью рассеянного освещения, то есть когда нет направленного источника, а есть просто среднее освещение вокруг, и есть места на модели, куда свет попадает меньше или больше.

На основе инвертированной AO с Curvature Map можно создать, например, текстуру загрязнения. Антон объяснил, как это работает, на примере модели канистры — грязь скапливается сильнее в труднодоступных местах, как и свет.

Position Map — эта текстура содержит несколько градиентов, которые проходят вдоль одной из осей модели. Она используется для создания различных эффектов вроде того же загрязнения.

World Space Normal — это текстура нормалей в мировых координатах. Она используется для создания базовых масок по схожему с Position Map принципу, но вместо однородного градиента World Space Normal учитывает топологию модели.

Её можно даже использовать в качестве Normal Map до тех пор, пока объект не поворачивается, так как в WSN сохранены данные мировых координат нормалей.

Color ID — это цветная текстура. Она содержит цветные маски, которые можно в любой программе конвертировать в чёрно-белые. Чаще всего её используют в двух случаях: при большом количестве деталей, которые не поддержаны геометрией, и моделировании однотипных ассетов с похожими материалами.

При работе на большом проекте вы можете договориться и выработать гайдлайн, по которому, например, материалу дерева в Color ID будет соответствовать красный цвет, а материалу резины — синий.

Пример Color ID на той же канистре

Thickness — «текстура толщины», на которой обозначается толщина поверхности в конкретном месте. Чем темнее пиксель — тем тоньше. Она запекается похожим с Ambient Occlusion образом. Если инвертировать нормали Ambient Occlusion, то получится текстура Thickness.

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

Источник

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

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