Основы по физически корректному рендерингу (PBR) и пример текстурирования.

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

Примечание. Для создания текстур под физически корректный рендеринг не обязательно использовать Photoshop, можно обойтись Gimp или Krita.

PBR — Physically-Based Rendering — Физически корректный/основанный рендериг.

PBS — Physically-Based Shading — Физически корректный/основанный шейдинг.

Полезные статьи и прочие материалы по основам PBR:

ARTTalk — Перевод статьи Basic Theory of Physically-Based Rendering

ARTTalk — Перевод статьи Tutorial_ Physically Based Rendering, And You

The Comprehensive PBR Guideby Allegorithmic vol.2

Перевод The Comprehensive PBR Guideby Allegorithmic vol.2

 

Значения из таблиц можно брать пипеткой.

Таблица интенсивности Specular от Crytek

Таблица интенсивности Specular от Dontnod с примерами шероховатости

Таблица значений Albedo, Metallic и примеры шероховатости от Unity

Таблица значений Albedo, Specular и примеры шероховатости от Unity

Таблица интенсивности альбедо

 

Выжимка из статей.

О sRGB и Photoshop.

При работе с текстурами под PBR необходимо работать в sRGB цветовом пространстве (спектре). В sRGB пространстве 50% средне-серый это не 0,5 или 127, а скорее значение 0,5 возведённое в обратную гамму 2.2, которая равна 187 в Photoshop. В этом случае sRGB помогает избежать артефактов в виде полос (порогов, ступеней). В sRGB пространстве больше точности для тёмный оттенков, к которым человеческий глаз более чувствителен (он может различить около 500 оттенков серого).

Стоит проверить правильно ли настроен Photoshop. Для этого проследуйте в Edit, выберите Color Settings. В открывшемся меню необходимо установить следующее:
RGB — sRGB IEC61966-2.1
Gray – Gray Gamma 2.2
Spot – Dot Gain 20%

Особенности яркости для текстур под PBR при использовании Specular.

  • Самые тёмные участки на альбедо диэлектриков не должны быть темнее 30-50, а самые яркие не светлее 240. В природе самым тёмным является уголь с значением 40-50, а самым ярким — свежий снег с значением 230-240.
  • Альбедо для чистых металлов должен быть абсолютно чёрным (0,0,0). Цвет чистым металлам задаётся через Specular. Грязь и окисления на металлах идут как диэлектрики, поэтому к ним применимы правила для альбедо диэлектриков.
  • Specular у чистых металлов имеет значения в пределах 180-255.
  • Specular у диэлектриков находится в пределах 40-60 для обычных материалов, а 60-75 для ряда минералов (рубин, изумруд и так далее). Значением 40 обладает вода. Меньше 40 делать не стоит, так как это значения для газообразных сред.
  • Грязь и окисление на металлах имеет значения Specular, как у диэлектриков.

 

Создание текстур под физически корректный рендеринг (PBR).

В этом примере будет показано создание набора текстур, который при рендере будет давать результат похожий на сталь/железо. Рендер будет делаться в Marmoset Toolbag 2.

Целевой результат:

noostyche_pbr_1


 

Файлы примера:

Исходник PSD

Текстуры


Создание альбедо/диффуза.

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

noostyche_ePBS_iron_1

 

2. Добавляю следы обработки металла станком (бороздки). Это просто шум (Noise) с Motion blure. Бороздки будут отображены на альбедо отличным от чёрного цветом, так как в них металл немного окислился:

noostyche_ePBS_iron_2

3. Добавил слоёв грязи и повреждений металла поверх бороздок от обработки станком. Грязь и повреждения взял с фототекстур и скомбинировал:

noostyche_ePBS_iron_3

Далее грязь и повреждения металла буду для краткости именовать просто “грязь”.

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


Создание Specular.

Текстуру Specular создавал с целью лучше разграничить чистый металл и грязь, но при однородном материале можно обойтись без текстуры Specular, подогнав общее значение Specular к параметру желаемого материала.
1. Взял близкое к табличному значение для Specular чистого железа:
noostyche_ePBS_iron_4

2. Скопировал слой бороздок из альбедо и инвертировал их, чтобы чистого металла было больше, чем бороздок. Приблизительно подогнал яркость чистого металла слоя бороздок под табличное значение Specular чистого железа. Сами бороздки будут темнее, чем чистый металл, так как они подверглись окислению.

noostyche_ePBS_iron_4b

3. Следующим шагом будет добавление грязи на Specular. Для этого взял  близкое к табличному значение для Specular ржавчины:

noostyche_ePBS_iron_5

4. Скопировал группу со слоями грязи из альбедо, вставил в группу со Specular и слил её в один слой:

noostyche_ePBS_iron_6

5. Обесцветил грязь. Приблизительно подогнал яркость грязи к табличному значению ржавчины:

noostyche_ePBS_iron_7

6. Наложил подогнанную по яркости грязь на слой Specular металла с бороздками:

noostyche_ePBS_iron_8

Specular готов.


 

Создание Gloss.

Gloss ещё называют Roughness — шероховатость. Он отвечает за зеркальность отражений. Чем светлее текстура Gloss/Roughness, тем более гладкая поверхность объекта = зеркальней отражение (при максимально значении — зеркало); чем темнее, тем более шероховатая поверхность объекта = отражения мутнее (различные матовые материалы: древесина, хлопчатобумажная ткань и так далее).  Ржавчина будет шероховатой — широкий блик, зеркального отражения не будет; чистый полированный металл — узкий блик, будет видно зеркальное отражение.
1. Скопировал из Specular группу грязи и немного прибавил ей яркости:

noostyche_ePBS_iron_9

2. Скопировал из группы diff текстуру бороздок и увеличил яркость для более зеркальных отражений:

noostyche_ePBS_iron_10

3. Совместил и получился результат:

noostyche_ePBS_iron_11

 

Gloss готов.


Создание Normals.

С помощью xNormal cгенерировал из альбедо две нормали: бороздки и грязь (получились ямки). Совместил их перекрытием (Overlay):

noostyche_ePBS_iron_12

Всё, все текстуры готовы.


 

 

Результаты рендеринга в Marmoset.

Без Gloss и нормалей, только Specular и альбедо:

noostyche_pbr_2Без Gloss (его ещё называют Roughness — шероховатость — он отвечает за рассеивание света материалом) шар получается идеально отполированным и отражает как зеркало.

 

Без Specular и нормалей, только Gloss и альбедо:

noostyche_pbr_3

C комплектом Gloss, Specular и альбедо, но без нормалей:

noostyche_pbr_4За счёт Specular грязь стала более выразительной.

 

С нормалями и альбедо, но без Specular и Gloss:

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

 

С нормалями, Gloss и альбедо, но без Specular:

noostyche_pbr_6Вот это уже ближе к реальности.

 

С нормалями, Specular и альбедо, но без Gloss:

noostyche_pbr_7

 

Результат с полным комплектом:

noostyche_pbr_1

Конечный результат. На сталь похоже, кажется 🙂
Оригинал статьи.