Небольшая заметка о PBR

Я планировал рассказать о новой системе физического рендеринга Substrate в UE5 на основе подложек. Но для этого мне определенно могла потребоваться небольшая(!) заметка на тему того что такое "Физически корректный рендеринг"

Я пранировал сделать краткую справку, что из себя представляет Набор PBR текстур и как они в шейдере влияют на работу света... но что то дернуло меня ознакомится с оригинальными статьями по теме физического рендера поверхностей... затем послушать лекции SIGGRAPH*
*Special Interest Group on Graphics and Interactive Techniques — Специальная группа по графическим и интерактивным методам, конференция идущая с 1974го года.

И я понял -> что ничего не понял. Ведь:

“All models are wrong”

George E. P. Box

Да что там - даже ведущие инженеры разработчики внедряющие это в игровые системы жалуются на это:

PBR — это огромная нерешенная проблема, и когда я слышу, как люди мне говорят:
«Да, у нас есть PBR»,
я понимаю, что они на самом деле имеют в виду:
«Я понятия не имею, что такое PBR».
Хотя если честно: я сам не уверен, что понимаю, что такое PBR на самом деле. 🙂

Себастьян Лагард, ведущий инженер работавший над Frostbite и Unity

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

“All models are wrong, but some are useful”

George E. P. Box

Вульгарное объяснение PBR

(собственно ради которого и писалась заметка)

PBR material:

Для начала что такое PBR материал? Это такой материал который будет выглядить +- корректно при любом внешнем освещение. Днем ночью, утром. В ярком свете и в рассеяном.

Небольшая заметка о PBR

Формула описывающая поведение материла и его реакцию на свет.

PBR light:

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

И реакция поверхности может быть в виде следющих типов поведения света :

Небольшая заметка о PBR

Если реакция на точечные источника света достаточно похожа почти на всех движках, то GI и работа с рассеянным/отраженным светом сильно зависит от реализации в движке. Будут то Запеченный свет, Воксели, Свет атмосферы, Люмен, или Лучики РТ, или набор проб полей:

Небольшая заметка о PBR

PBR текстуры(или параметры):

Минимальный набор для создания PBR материала будет состоять из:

  • Metal map - Карта металличности. Определяет какая шейдерная модель будет использоваться для каждого пикселя на экране.
    0= диэлектрики, 1= 1металлы.
  • Base Color - Карта Диффузионного цвета или цвет спекуляра. Диффузионный цвет - это цвет свечения поверхности после отражения света.
    Спекулярный или зеркальный цвет - это цвет блика метала при отражении.
  • Roughness или Gloss - карта шераховатости или гладкости. (они обратны друг другу) Определяет в общем случае "размытие" блика на поверхности и поведение отражений на материале .

Традиционно "полуметаллы" выбрасываются из шейдерной модели ради упрощения.

 
 

Дескать в обычной жизни большой кусок чистого кремния или Кусок углепластика не встретишь. Вот полный список металлойдов/полуметаллов:

Небольшая заметка о PBR

Ну ну...

<b>Углепластик мы видим в жизни довольно часто...</b>
Углепластик мы видим в жизни довольно часто...
<b>Кремний,  чуть реже ...</b>
Кремний,  чуть реже ...

Металлы почти не диффузируют зато отражают окружающий свет, окрашивая его. Диэлектрики или не металлы - почти не отражают. Зато переизлучают.

В физическом плане это обычно означает что у диэлектриков параметр F₀от почти 0 до 15% (у кристалов 15-25%), а у металлов F₀ от 70% до 100%. Довольно сильная разница что бы реализовать 2 разные шейдерных модели. А параметр Угла Френеля F₀ оказывается четко привязан к такой физически замеряемой переменной как Индекс преломления.

Например такие игровые движки как unity unreal и godot работают со спекуляром диэлектриков в диапозоне от 0 до 8 %. Хотя скажем Фростбайт от ЕА использует расширенный до 16% диапозон.

ну и принцип

PBR Energy conservation

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

И да разогретые материалы будут светится - для этого бычно используют модель абсолютно черного тела и в движках реализуют через скрипты или функции Black Body в шейдерах:

<b>На вход температура в кельвинах - на выход значение силы свечения. </b>
На вход температура в кельвинах - на выход значение силы свечения. 

Как закон сохранения выразить? Визуально?

Это означает что если у шейдера материала выставить Base Color = 1(Абсолютно белый материал или отражение ) и поместит его в белую самосветящуюся комнату (с 6 сторон светить) , то такой материал должен быть "невидим" на фоне.

Вот как тут у шарик справа в сравнение с несовершенным шариком слева:

<b>Тест Белой Печи! Видишь суслика? В смысле 2й шарик? А он есть!</b>
Тест Белой Печи! Видишь суслика? В смысле 2й шарик? А он есть!

Впрочем это из за-за оптимизации реальных уравнений Френеля с кучей синусов и косинусов:

Небольшая заметка о PBR

Например уравнениями Шлика. Которые в разы проще:

Небольшая заметка о PBR

Эффект Френеля - это такой краевой эффект на границе касательного взгляда:

Небольшая заметка о PBR

Лучше всего эта разница описана в статье "Fresnel Equations Considered Harmful" от Naty Hoffman из Lucasfilm:

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

По сути с точки зрения сохранения энергии - только один параметр Base color должен влиять на видимость материала в абсолютно белой печи. Другие параметры влияния иметь не должны влиять на результат с точки зрения идеи имплементации PBR.
Но как мы увидим далее - сохранение энергии это скорее пожелание чем строгое требование.

Зачем же тогда "Energy conservation" нужно? А для того что бы материал правильно реагировал на комбинацию прямого и непрямого освещения. Старые движки, такие как UE3 могли нормально отрисовать на себе только блики от источников света, а "рассеянное" освещение фейковалось параметрами уровня, или зависимости от времени суток. Но для эффективной симуляции - реакция материала на свет должна быть "динамической" в зависимости от интенсивности света вокруг.

Дисклеймер: На свой страх и риск читайте дальше.

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

История Оптики(Кратко)

(Очень кратко! Но! Если кому то покажется мало - то рекомендую ФЕЙНМАНОВСКИЕ ЛЕКЦИИ ПО ФИЗИКЕ, том 3. Излучение Волны и Кванты)

И начнем мы из далека - вопрос как ведет себя свет начал иследовать еще Огюстен Жан Френель ученый Физик - который родился в 18м веке и проводил свои опыты в 19м. Запомним этого персонажа - он очень важен

<b>Например эффект изменения качества отражения от угла зрения к нормале поверхности, получил его имя. </b>
Например эффект изменения качества отражения от угла зрения к нормале поверхности, получил его имя. 

Именно опыты Френеля положили основу так называемой геометрической, она же лучевая (Ray) оптики, так же он сделал важные открытия в волновой оптике. Им были открыт показатель преломления и в честь Огюстена был назван один из важнейших параметров в PBR - фактор Френеля, а так же коэффициенты отражений Френеля на углах F0 , F82, F90.

Позже пошли активные исследования в волновой оптике были открыты явления интерференции и дифракции.

Небольшая заметка о PBR

Когда было выяснено что у света есть длина волны и длина волны сильно влияет на поведения луча конкретного света (запомним этот момент!)

Позже в начале 20м век были изучены и некоторые квантовые эффекты, - которые "почти" нам в PBR и не пригодятся.

Изобретение PBR, точнее BRDF!

(A few moments later)

Совершим скачек во времни и перейдем к самому интересному - к CG!

Впервые ДФОС была определена Эдвардом Никодемусом в 1965 году.

ДФОС = Двухлучевая функция отражательной способности.

Он назвал ее BRDF, ли по русcки ДФОР функция

Небольшая заметка о PBR

Она описывала как окрасится точка поверхности на основании углов падения и отражения - а так же положения источника света и положения глаз наблюдателя.

ах да, расшифровка: BRDF/ДФОР - это

Двухлучевая функция отражательной способности:

Небольшая заметка о PBR

Это 4х мерная функция. Где каждая "мера" это свой вариант описания поведения того или иного аспекта поведения поверхности или света.

Где "4 меры" это углы падения и отражения, а так же формулы силы блика и рассеивания поверхности.

Это считает первым математическим приближением к реальному миру...

>>>Математическим<<< Почему я так делаю акцент на "математику"? Что же....

Небольшая заметка о PBR

Данная математическая модель поведения света при взаимодействие с поверхностью все еще довольно далека от реальности. Так что весь BRDF подход - строится на том что у нас есть "математическая гипотеза" - как ведет себя свет, она выводится в виде формул и потом в ходе моделирования на суперкомпьютере отскока cветовых отражения лучей и мы получаем формулы что уже только потом проверяется под реальность.

Подгонка - это чистая математика. Это можно рассматривать как сжатие(даже можно сказать пережатие) реальных данных в (пере) упрощенные уравнения. Часто визульно хороший результат BRDF может быть сделан на не физических предположениях. Что бы просто объяснить реально замеряемое поведение материала через эту формулу.

Но почему не используют для основы... реальность? (точнее используют, но увы не все, и не сразу)

<b>Если что реальный лес - справа. </b>
Если что реальный лес - справа. 

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

Небольшая заметка о PBR

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

Реальные материалы с реальными, а не усредненными замерами поведения длин волн - дают довольно тяжелые для эмуляции данные:

Небольшая заметка о PBR

Нужно ли говорить что разница между реальным и цифровой моделью в 3х цветах RGB модель поведения поверхности, может быть довольно велика и различаться? Зачастую данные могут расходится на 10-20% - а ошибка в 5% может быть очень и очень хорошим результатом!

Вот например различия между моделями BRDF и реальностью для примера. Это показывает как далеки модели от физической реальности:

Небольшая заметка о PBR

Но это я забегаю вперед.

Так подгонять начали с модели света имени Ламберта (это другой ученый 18го века)

Эта модель освещения в компьютерной графике, описывающая идеальное диффузное (матовое) рассеяние света. Немного упрощенная для удобства.

Небольшая заметка о PBR

В этой модели яркость поверхности одинакова для любого наблюдателя, независимо от угла обзора, и зависит только от угла падения света (косинуса угла между нормалью к поверхности и направлением на источник света)

Но это не очень хорошо. Не хватает Бликов и первое поколение моделей поведения света для BRDF была модель Фонга(Phong) 1973 где была добавлена модель спекулярного блика:

Небольшая заметка о PBR

И позже дополненная в 1977м Джимом Блином, что получило название: BlinnPhong (Все эти модели материалов до сих пор есть в 3д редакторах, таких как Мая)

Небольшая заметка о PBR

Но наиболее полная и популярная формула поведения света была выведена в1981м

Небольшая заметка о PBR

Куком-Торрансом (Это разные люди R. L. Cook and K. E. Torrance) которые представили математическую(!) модель для моделирования поведения света на идеи так называемых "микрофасетках" - дав определение "Шершавости"

Небольшая заметка о PBR

Вы наверное (не) захотите спросить - что такое фасеты? Ведь так? Ну если даже нет, то. я все равно поясню:

Небольшая заметка о PBR

Фасеты - это обозначение идеально шлифованных граней в ювелирном деле.

Ну если взглянть на 1(!) пиксель текстуры "Шершавости" :

Небольшая заметка о PBR

Соотвественно Микрофасеты - это воображаемые грани на крошечном участки поверхности, которые мы не можем различить между собой на макроуровне, так как они сливаются воедино давая лишь "характерную кривую отражения" (Specular Lobe)

(Ведь они намного меньше выходного пикселя!!!)  Но что если мы приблизим взгляд? хммм....
(Ведь они намного меньше выходного пикселя!!!)  Но что если мы приблизим взгляд? хммм....

Формула задающая плотность граней - выглядит так:

Небольшая заметка о PBR

Для удобства - они представляются в виде идеальных ровных (!) треугольников. Но модель поведения отражения света от микрофасетов была определена путем математического вычисления на основе рейтрейсинга по разному набору граней, в разной комбинации и создания модели "лепестка" (Specular Lobe) спекулярного (зеркального) отражения от поверхности.

Небольшая заметка о PBR

Эта штука называется функцией Нормального диффузного распределения (NDF)

Собственно есть множество разных результатов такого математического подсчета шероховатости. Их наверное больше сотни!

Небольшая заметка о PBR

Особо много наработок и реальных замеров было в лаборатории Митсубиси - MITSUBISHI ELECTRIC RESEARCH LABORATORIES -им это было очень нужно для создания рендеров будущих дизайнов машин:

Так что проверяйте сами какая модель используется в рендере или игровом движке (Например в Unreal использутся модель GGX для NDF)

Небольшая заметка о PBR

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

Так что бы вы были вкурсе, консенсус инженеров сошелся что из всех моделей Phong, Beckmann, Trowbridge-Reitz (оно же GGX) - именно GGX наиболее близка к значительной части окружающих нас материалов. Если быть точнее - то наименее далека - и дает меньшую ошибку - в среднем.

<b>GGX Распределение:</b> Слева направо шероховатость составляет 0.1, 0.3, 0.6, 0.8, 1.0
GGX Распределение: Слева направо шероховатость составляет 0.1, 0.3, 0.6, 0.8, 1.0

Ох и вы наверное захотите спросить(нет?) как замерить Эту кривую в реальности? Например один из самых простых способов который изобрели в Unity Technologies:

Небольшая заметка о PBR

Вам нужно поместить образец материала на специальный вращающейся стенд - и фотографировать материал под разными углами со вспышкой и без, с четким сохранением угла.
Это работает - но ужасно не практично >_<.
Ибо далеко не все материалы будет удобно так "фиксировать", а живые существа вероятно вырываться и убегать... Хотя и тут есть свои способы.

Как это делали в Calisto Protocol. О чем у них есть хорошее выступление на GDC The Character Rendering Art of 'The Callisto Protocol'

Небольшая заметка о PBR

Ну лажно это мы забегаем вперед. Как мы видим - термин PBR - сам по себе не совсем корректен. Ибо он идет от математики, и если быть точнее то геометрической оптики.

Но описывает ли она ВСЕ материалы? Определенно нет! Но всегда можем поиграться с шероховатостью позже модифицировав базовое значение в шейдере в зависимости от углов или растояний. Нужно не бояться это делать, ведь текущая модель Микрофасет никак не учитывает возможность: существования разнообразных других вариантов микроповерхностей - из веретена(ткань), Арок и пещер(пор).

Небольшая заметка о PBR

А что насчет световозращательных поверхностей таких как скотчлайт?

Катафот он же световозвращатель или ретрорефлектор дает максимальную яркость когда мы на него смотрим по нормали.

Небольшая заметка о PBR

У Бена Кловарда было отличное видео как имитировать катафот на UE и Unity! Но этот способ увы от внешних лампочек не зависит. Но PBR это хороший старт - а дальше все зависит от вас!

Из реальных альтернатив нашел только доклад NVIDIA, где та предоставила свою модель "мягких" пыльных поверхностей состоящую из шариков:

Но вернемся к шершавости . И точнее как этот параметр ведет себя на тесте белой печи....ой:

<b>Увеличиваем шершавость слева на права. Все ОЧЕНЬ ПЛОХО! </b>
Увеличиваем шершавость слева на права. Все ОЧЕНЬ ПЛОХО! 

Штож....на самом деле PBR в это плане буквально НЕ работает. Могу заметить, что почти все современные BRDF модели на самом деле не проходят испытания в белой печи. Тон у материала не сохраняется независимо от параметров:

<b>Но некоторые проходят лучше других! Слева гладкие шарики - справа шершавые.  Кроме Ламберта - у него то и шершавости нет.</b>
Но некоторые проходят лучше других! Слева гладкие шарики - справа шершавые.  Кроме Ламберта - у него то и шершавости нет.

Более грубые материалы темнеют из-за активной потери энергии...

Если для темных поверхностей - можно ручками суммировать карту шероховатости к альбедо через умножение на коэффициент подбираемый руками. То как быть со светлыми? которые из за шершавости могут ощутимо потемнеть?

Это происходит на самом деле от того что модели шероховатости были разработаны на моделях одиночного отскока света.

Картинка из доклада  E. Heitz, Multiple-Scattering Microfacet BSDFs with the Smith Model,
Siggraph 2016
Картинка из доклада  E. Heitz, Multiple-Scattering Microfacet BSDFs with the Smith Model, Siggraph 2016

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

<b>Да - это Пиксар! Но тут буквально видны ВОРСИНКИ!!!</b>
Да - это Пиксар! Но тут буквально видны ВОРСИНКИ!!!

Например Дисней создал отдельную модель параметра Sheen (блеск) - для объяснения множественного пере отражения на множестве перпендикулярно торчащих ворсинок

Небольшая заметка о PBR

Эффект довольно тонкий и виден только на краях, вот пример поближе:

Небольшая заметка о PBR

Хотя стоит отметить что модель Sheen от Диснея не является согласованной с сохранением энергии.

Для большинства поверхностей микрогеометрия является изотропной: вращательно-симметричной, без какой-либо присущей им направленности.Но некоторые поверхности имеют характерную анизотропную структуру микрогеометрии:

Небольшая заметка о PBR

И это сильно влияет на то как бликует поверхность:

Небольшая заметка о PBR

Так для симуляции анизтропии, хорошо подойдут так называемые Карты потока (Flow maps).
Они в чем то похожи карты нормали, где 2 канала описывают следующие параметры: направление движения по UV(лево-право, вверх -вниз)

Строение микроповерхности - очень и очень сильно влияет на то как мы увидим зеркальный блик от микрорельефа поверхности, давайте представим себе вот такую рефленую поверхность:

Небольшая заметка о PBR

Не стоит говорить что для наблюдателя А - материал будет бликовать по макcимуму. А наблюдатель Б увидит только диффузионный свет.

То есть корректнее было бы называть такой подход как Geometry Based Render или более дипломатично Physics Inspired Render. Что собственно должно обозначать или геометрический подход или "вдохновение миром" но не точное соответствие, на

Но подождите - оптика состоит из 3х разделов:

  • Geometry(Ray) optic
  • Wave optic
  • Quantum optic

Так давайте поговорим про длины волн и допускаемые упрощения. со стороны физической модели!

PBR свет:

Так давайте разберемся что такое PBR свет и как его моделировать:

Итак - свет это волна.

Небольшая заметка о PBR

И мы можем своими глазами видеть целый потрясающий диапазон света из безграничного многообразия электромагнитных волн!

Небольшая заметка о PBR

От 400 до 700 нм ...

Но подождите! Как мы видим?
Для этого у нас в глазу есть всего 4 типа рецепторов: Черно белые Палочки замеряющие общую интенсивность и цветочувствительные Колбочки:

Небольшая заметка о PBR

И наш глаз принимает все многообразие цветов всего на 3 рецептора!
(палочки палят общую интенсивность!)

Небольшая заметка о PBR

А что это значит? Это значит что с точки зрения имитации человеческого зрения в CG - нам совершенно не нужна сложная кривая фронта света - нам нужны только 3(!) параметра цвета
R G и B - соотвествующие чувствительности человеческого глаза! Именно через них и выражается цвет что мы видим.

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

Небольшая заметка о PBR

Как не грустно это признавать - наши глаза это весьма несовершенные приборы которые легко обмануть и которые способны потерять кучу передаваемой извне информации. И не только всего диапазон спектра - но и всякой мелочи вроде поляризации света (некоторые насекомые и молюски способны видеть его )

Но это сильно упрощает головную боль для эмуляции в Рендеринге.
Как и отсекает возможность симуляции некоторых световых эффектов - таких как Флуоресцентная краска для ночных клубов.

<b>Флуоресцентная краска в лучах УФ. Может ли стандартный  PBR такое? нет! Ибо нужно добавлять в движок новый RenderPass для УФ света.</b>
Флуоресцентная краска в лучах УФ. Может ли стандартный  PBR такое? нет! Ибо нужно добавлять в движок новый RenderPass для УФ света.

Ультрафиолевых чернил, которые светятся под действием УФ излучения в видимом спектре. Увы - такое пока придется задавать в готовых игровых движках через скрипты и Эммисив карты, а не симулировать на основе физики материала.

Другой аспект PBR - который так же иммитируется , а не симуляция переизлучения поглощенного света в виде Инфракрасного следа:

Небольшая заметка о PBR

Так что всякие нагревы поверхностей придется кодить отдельно и разные слои игры.

Собственно весь вся математика в CG для света может строится на нескольких вариантах работы с цветом: RGB, HSV и Lab . Ибо посылать массив цветового потока - ни одна видеокарта в реальном времени не потянет.

Впрочем если вы делаете собственный 3д движок - то может именно вы захотите учесть этот эффект излучения видимого света после поглощения УФ или ИК(нагрева)? Так вы хотя бы сможете удивить публику и получить гранты на разработку военных симмуляторов.

Но вернемся к истории введения PBR - я закончил на 1981м когда резко перешел к рассмотрению шероховатости. Это все медленно развивалось и улучшалось по мере роста вычислительных мощностей и накопления эксперементальных данных. Мультфильмы и игры 90х использовали простейшие модели без PBR настоящий проры произошел в конце 2000х когда разные студии пытались пихать модели поверхностей в игры и фильмы.
Но не очень удачно... я нашел не сильно большой списк таких попыток:

  • ILM (Iron Man, Terminator: Salvation) 2008
  • Pixar (Wall-E, Up) 2008
  • Bungie (Halo 3) 2008
  • Imageworks (Alice in Wonderland) 2009
  • Treyarch (Call of Duty: Black Ops) 2010

Пока наконец не вышел фильм от Диснея в 2012 Ральф! (Wreck-It Ralph) И следом за ним - легендарная статья Диснея, в которой было все разобрано по полочкам и сформулированы принципы ХУДОЖЕСТВЕННОГО PBR(!!!) которые все кинулись осваивать.

"Physically Based Shading at Disney"

Это поменяло все! Так как вместо непонятных физических понятий не совсем понятных художникам - демонстрировался набор принципов как с помощью простых крутилок от 0 до 1: можно навертеть нужный результат:

Небольшая заметка о PBR

Это первая из первых моделей затенения, специально разработанная для художников, чтобы :

"Позволить им (почти) всегда делать все физически правильно и получать вменяемый результат и при этом быть максимально простым в использовании"

Disney Principled

Последующие модели PBR во многом ведут свою родословную от Диснея - пусть и с определенными упрощениями и допущениями. Люди получили набор настроек которые позволяли получить рендер материала который работал в любых комбинациях в любых условиях освещения!

Например вслед PBR за Дисней кинулся переделывать свой движок Тим Свини - в результате уже через пару лет вышел UE4(2014й) на замену UE3.

Как читать BRDF SLICE?

Вы наверняка заглянули в доклад Диснея - и увидели там сканы BRDF от MERF так похожие на конфеты.

Небольшая заметка о PBR

И наверняка у вас возник вопрос "как их считывать" , чтож команда Respawn Entertainment на GDC2017 дала нам хороший урок по их дешифровки

Представим что у нас есть фейковый BRDF в виде радужного градиента:

На самом деле<b> Розово-фиолетовая часть градиента</b> должна заполнять черную зону выполняя роль Обратного Ретро отражения. Но мы это увидим чуть позже
На самом деле Розово-фиолетовая часть градиента должна заполнять черную зону выполняя роль Обратного Ретро отражения. Но мы это увидим чуть позже

Тогда он наносится на сферу поворачиваемую против часовой стрелки.

Небольшая заметка о PBR

Тогда на срез BRDF, представляет собой поведение матрила в зависимости от 2х углов:

  • Угол Падения света
  • Угол зрения камеры наблюдателя.

И по разным сторонам плитки проявляются характерные зоны реакци на свет: Зона отражения по Ференлю,

Иногда зона "ретро-отражения" называется " grazing retero-reflection"

Небольшая заметка о PBR

Данная картинка описывает положение грани по отношению к источнику свету и зрителю. Думаю на картинку нужно пдольше посмотреть самостоятельно и подумать...

Где углы θ от b θ от h выполняют повороты сферы, а угол φ от d - вращение сферы от перпендикуляра

Соответственно на срезе BRDF мы видим характерные зоны - как меняется вещество в зависимости от угла падения света и угла взгляда на поверхность.

BRDFs В основном зависит от Функция. 𝑁 ⋅ 𝐻 и 𝐿 ⋅ 𝑉!
И наверное вам захочется увидеть сравнение разных моделей на шариках:

Небольшая заметка о PBR

Слева на права - идет квадрат "шероховатость", которая выражается в виде квадрата "художественной" шероховатости Альфа

Небольшая заметка о PBR

И шарики будут помещены в 3 разных интерьера:

Uffizi, Grace и Campus. 
Uffizi, Grace и Campus. 

Под Грацией нашел HDR из Grace Cathedral

Небольшая заметка о PBR

Uffizi - HDR соотвествующие галереи в Уфицци. А кампус - вероятно относится к окружению кампуса в Цурихе.

1) BRDF на ламберте(? НЕТ! Но тут так написано), чисто синтетический срез поверхности без ретроотражений:

* это странно - у Ламберта вообще бликов не должно быть! Только  чистый диффуз. Скорее всего очепятка Респаун и в слайде имеется ввиду <b>GGX</b>
* это странно - у Ламберта вообще бликов не должно быть! Только  чистый диффуз. Скорее всего очепятка Респаун и в слайде имеется ввиду GGX

Так как чистый срез BRDF на ламберте - это одноцветная плитка. Что хорошо видно по уравнению:

Небольшая заметка о PBR

И из статьи Диснея

Небольшая заметка о PBR

2) Disney BRDF - Диснеевская модель поверхности из мультиков и ее
поведение:

Небольшая заметка о PBR
Небольшая заметка о PBR

σ = 0.5 альфа - в случае Орен-Наяра работает чуть по другому - без квадрата.

Небольшая заметка о PBR

* "Новая модель" это и есть название. Насколько в курсе - это модель параметра Френеля перепараметризовано на основе уравнений Лазаньи-Шлика. И позже легла в основу "Open PBR Surface". Идея в том что в ней Помимо F0 еще и параметр F82. из за нарастающей ошибки света в поведении материала на реальном образце металлов. Значение отклонения % отражения реальных физических замеров может достигать до 3%! (что уже заметно тренированному взгляду)

Вот примерная таблица ошибок между между PBR на основе Шлика и Лазаньи Шлика в сравнении с реальными замерами материалов:

% ощибки
% ощибки

И вы наверное захотите спросить этот вопрос "почему"?
(я захотел - значит и вы должны! Разве это не так работает?)

Почему Disney Principled PBR стал так популярен?

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

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

А ту же "поляризацию света" в отличие от некоторых членистоногих мы не увидим. Хотя она существует:

Например поляризацию мы можем увидеть за счет специальных очков с нужнми фильтрами: например через MasterImage 3D с круговой поляризацией и без них, на которых запечатлены мертвые жуки Cetonia aurata.

Обратите внимание, что без очков и жуки, и их зеркальные отражения имеют блестящий цвет, как будто панцирь жука - из металла. Правый поляризатор убирает блеск с жуков, но сохраняет его у их зеркальных отражений. Левый поляризатор действует противоположным образом, меняя направление отраженного света на противоположное. Это происходит из за явления Структурной окраски(Structural coloration) - Явления обусловленного волновыми свойствами света, а именно дифракцией света на устойчивой микроструктуре сравнимой по размерам с длиной волнй от 200 до 1000 нм. Такие явления получили название "Thin-film optics" и стали активно добавляться в рендер недавно.(OpenPBR, Substrate)

Или мы часто не увидим разницу между естественным отражением от поверхности и изображением на мониторе от RBG матрицы.

Точнее наш мозг "адаптируется" под укороченный диапазон монитора всранение всевозможными цветами которые вообще различает наш глаз. В среднем хороший монитор (такой как Retina у Apple) способен передать 2/3 видимого цветового пространства, в то время как плохой - только половины:

Небольшая заметка о PBR

Зачем это нам? А затем эта тонкая взаимосвязь между спектральными данными и определением цветового пространства RGB особенно важна при работе со значениями F₀ для металлов!
Хроматические цвета, которые мы присваиваем, должны находиться в пределах гаммы нашего рабочего цветового пространства. Металл, реальный спектральный коэффициент отражения которого выходит за пределы гаммы, может в результате выглядеть слегка ненасыщенным или смещенным при отображении в более ограниченном пространстве, например BT.709. Телевизионного сиганла.

Так же мы не видим микрофасеты (но можем увидеть по эффетку 1го порядка размытию, и буквально можем пощупать!), не видим преломление света и воздуха(а оно есть!) вне особых условий раздела среды. Зато мы видим "ЦВЕТ"(на палочках и колбочках) и Интенсивность.

И именно BRDF DISNEY проанализировав наборы реальных сканов материалов MERF смогла выделить для себя(и нас) простые ползунки позволяющие создать BRDF +- похожий на базу, удобный для художников, так вот базовые принципы материала Диснея:

  • Параметры выбирались более интуитинво понятные - а не корректно-физические.
  • Параметров должно быть как можно меньше, что бы не вызвать комбинаторного взрыва.
  • Параметры не должны влиять на другие параметры как можно меньше.
  • Параметры от 0 до 1 должны описывать поведение реального материала. Выход за пределы допустим если параметр имеет художественную ценность. (Анизотропия, Sheen, Спекуляр)
  • Выход за пределы (в минус или больше 1) допустим если параметр имеет художественную ценность.(Анизотропия, Sheen, Спекуляр).

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

Небольшая заметка о PBR

И по сути сформировалось 2 "школы" PBR:

Небольшая заметка о PBR
  • 1.Metal/Roughness
  • 2.Specular/Glossiness

Отличия в первую очередь в картах Metal/Specular и Base Color.

1й способ через карту металла - блее оптимизированный для реал тайма. А 2й способ подхода к рендеру "более" честный.

Разница в том что в подходе Specular-Glossiness - разницы метал/не металл нет. Движок не разделяет эти процессы. Карта 3х RGB Спекуляр напрямую задает цветной блик Параметра Френеля:
(от 0 0 0) до (255 255 255)

В то время как в Metal -Roughness используется карта маталличности для ручного переключения шейдерной модели между металлическим и не металлическим поведением поверхности. А Дифффуз у металлов отключается - карта Base как раз начинает отвечать за цвет металла.

Карта Шершавости и карта глянца/блеска - это обратные велечины:

Gloss = (1-Roughness) и наоборот.

Для справки движок UE4 использовал Metal -Roughness подход.
Но с выходом Unreal 5.7 системы Substrate старая модель PBR была заменена на систему подложек (универсальная модульная шейдрена система описывающая поведение материала, где нет необходимости выбирать одну шейдерную систему и молится что бы она подходила всей 3д модели) совместимую с OpenPBR (и MaterialX), где карта металличности больше не нужна, и можно как задать прямой параметр F₀, или задать F₀ через IOR.

Но об этой системе в следующих статьях. 
Но об этой системе в следующих статьях. 

(Иронично что многие это до сих пор не знают и пытаются делать по старому, не замечая что движок переводит старый PBR metalness/Roughness подход в систему Substrate!)

Или вообще задать в качестве Френеля настоящий(!) Физический LUT поведения зеркального отклика блика от поверхности как это можно сделать в Unreal 5.

Небольшая заметка о PBR

В настройках Detail можно добавить нужные градиенты:

Небольшая заметка о PBR

Описано как это сделать тут:

Небольшая заметка о PBR

Но вернемся из 2020х обртано в 2012+...

Но какие движки были первыми? Кто взял решение диснея?

Но вернемся к рендеру - одной из первых игр с полноценным PBR была Метал Гир от Кодзимы на движке Fox. Она довольна интересна в том плане - что Конами использовала некоторые подходы которых в чистом виде нет в других движках(но мы можем их добавить в шейдере!)

Так для теста материалов для игры, программисты Кодзимы смоделировали их Конферанс зале:

Небольшая заметка о PBR

Без шуток. Где еще идеально на работе будешь тестировать материалы в своем же офисе? А Без шуток - они реально это сделали:

Небольшая заметка о PBR

Что бы команда художников, могла спокойно приносить внутрь реального зала предметы и смотреть как они выглядят. И потом добиваться такого же визуала и внутри своего ЛИСьего движка:

Небольшая заметка о PBR

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

Небольшая заметка о PBR

(!)Так что если вы собираетесь сделать свою реалистичную игру - то один из первых уроков FOX engine и Кодзимы в том - что нужно сделать кусок своего офиса - что бы в нем можно было тестировать материалы.

Нужно понимать что в те времена у разработчиков еще не было таких "привычных" библиотек предоставляемых со стороны команды Substance(их купила Adobe позже) как Painter и Designer. Так что разработчикам, что хотели осваивать PBR пайплайн - приходилось с нуля создавать свои собственные материалы и библиотеки.
Именно поэтому первые игры начлаа 2010х и по 2016 на PBR принципе кажутся более "разнообразными" в визуальном плане чем многие современные игры страдающие от проклятия Unreal5 look/slope. (Эффект при котором почти все игры сделанные на одном движке, одних материалах и текстурах выглядят идентично, что не удивительно.) Впрочем сегодня виноват далеко не сам движок - а "удобные инстурменты" Substance Painter и Designer, которые просто отучают людей эксперементировать над созданием материалов.

В случае Fox engine были не только уникальные материала. Но и собственные шейдерные трюки. Например они шероховатость для некоторых материалов сильно зависела от "угла" взгляда и/или от расстояния.

Это получило название "Viev Dependent Roughness" или переводя с японского "Шероховатость зависящая от точки зрения"

Небольшая заметка о PBR

Чем ближе взгляд был к касательной плоскости , тем более зеркальным был материал. И давал физически большее сильный блик:

Небольшая заметка о PBR

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

Модель микрофасеток для такой шероховатости можно представить себе такой:

Небольшая заметка о PBR

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

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

Небольшая заметка о PBR

Большая часть разработчиков наверняка надеется, что сам подход PBR материалов идеален сам по себе и додумывать/дорабатывать ничего не нужно в игровом движке - ибо анрил/юнити и сделает все за них. Что же пожелаем им удачи, ведь в случае неудачи - они всегда можно обвинить кого то-другого, но не себя за то что визуал выглядит "Дженерик".

Для справки такой эффект в других движках легко моделируется за счет математики на основе угла Френеля в шейдере. Благо его маска считается движком всегда и почти ничего не стоит для GPU.
Шейдер материала с таким поведением шершавостьи идеально подойдет для моделирования шлифованных обработанных камней и древесины. Впрочем можно поступить и обратным образом при моделировании структурной окраски материала - который под касательным углом меняет шероховатость и цвета как те крылья бабочек.

Можно ли передать поведение цвета и света на крыльях с помошью стандартного PBR набора теустур? Нет. Так что вернемся к Конами и материалам:

Создание PBR текстур (в древности)

Для игры Метал Гир, Конами изготавливало свои собственные текстуры, и наверное вам захочется узнать как же они это делали в те времемена когда еще не было ни Пейнтра, ни Дизигнера.

Это сейчас "удобно" создавать материалы процедурным образом за счет Substance Designer, А потом наносить данные материалы в Substance Painter на модель...

Что же, для снятия небольших материалов - у той же Конами была подготовлена специальная комната

Небольшая заметка о PBR

И в качестве базовой цветовой мищели использовалась специальная бумага с 18% Эталонным диффузом и ColorChecker - цветовая мишень с эталонными цветами.

Небольшая заметка о PBR

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

Небольшая заметка о PBR

Полсе чего в зону фотографирования помешался образец текстуры:

Небольшая заметка о PBR

К образцу применялись настройки камеры полученные на калибровке камеры: (Да- калибровать нужно каждый раз)

Небольшая заметка о PBR

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

Небольшая заметка о PBR

Как создавать шершавость из PSD файла? Масками по основным цветам, поле чего делали заливки и сверху наносили шумовой узор несовершенств характерный для материала.

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

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

Небольшая заметка о PBR

Покраска же большинства объектов в нужные материалы - делалось не вне движка - а внутри его, за счет слоя карт Material ID в буфере Геометрии

Небольшая заметка о PBR

В слое рендера Material ID - определял дополнительные особенности материалов. В первую очередь он использовался для переключения вариации материалов: железо/золото/ржавчина.

Это влияло на :
Параметр Френеля, Прозрачность и Зеркальный Цвет для металлов.
Которые брались из свойств ассетов.
Вот так один и тот же пистолет с разными картами мог выглядеть совершенно по разному:

Небольшая заметка о PBR

Так же ID отвечал за "износ" и параметр шероховатости. пушки сверху блестят, снизу изношенные.
(Сегодня ID материала часто настраивают в 3д редакторе для создания масок покрасе в Сабстенсе, но почему бы их не использовать в самой игре для создания большего числа вариаций? )

Небольшая заметка о PBR

А так же была настройка шероховатости для свойств сухости и влаги.
(Кстати тоже сильно недооцениваемый элемент погружения - материалы зависящие от внешних условий. )

Небольшая заметка о PBR

На этом особенности движка FOX engine говорить прекращаем и

вернемся к прочим особенностям PBR... и поговорим о той проблеммах маштаба!

Проблема МультиМасштаба и PBR

Одна из серьезных проблемм материала PBR в игровых движках напрямую связана с вопросом фильтрации текстур и потери "качества" у данных с расстоянием. Так игровые движки упрощают текстурные данные карты в MIP карты :

Небольшая заметка о PBR

Это удобно, но увы с увеличением масштаба и расстояния - 3д объекты на сцене могут терять данные об их внешнем виде в результате чего на расстоянии ассеты становятся буквально скучными.

По сути наши PBR материалы хорошо если работают на расстояниях 1-15 метров от камеры игрока. На это можно не обрашать внимание если делаем игру в коридорорах. Но что если у нас будут большие открытые участки?

<b>Справа шарики с проблемой сглаживания и потерей деталей - а слева наоборот с проблемой ""визуального шума"из за отсутствия оного.</b>
Справа шарики с проблемой сглаживания и потерей деталей - а слева наоборот с проблемой ""визуального шума"из за отсутствия оного.

То за пределами этих диапазона 1-15 метров - нужно значения нужно как то менять, что бы скомпенсировать потери сжатия информации. И очень хорошо это видно на примере карт шераховатости и карт нормали, на которых весь PBR (не считая параметра френеля и работает).
И весь секрет Полишенеля в том... что наши карты шершавости и карты нормалей - хранят в своей сути одни и те же данные данные:

Gloss и Roughness это почти одно и то же. Обратные к единице величины. 
Gloss и Roughness это почти одно и то же. Обратные к единице величины. 

-> данные о сложности геометрии поверхности которые должны переходить в друг друга, а не мипмапится независимо друг от друга! Нормали должны становятся ориентациями микрограней, если смотреть на них издалека. И наоборот - шершавость. вплотную превращаться в нормали!

Делают ли игровые движки это из коробки? Нет.

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

Это проблема не нова и называется "зеркальным сглаживанием" в CG.

<b>Слева зазеркаленное изображение в мипкарте, справа образец воды как должно быть</b>
Слева зазеркаленное изображение в мипкарте, справа образец воды как должно быть

И специально для вас я нашел материал где она хрит как то решалась!

Для борьбы с зеркальным сглаживанием в индустрии было предложено множество методов. Если еще раз упрощать то проблемма возникает из за потери информации от растоояния. Теряется настоящая форма NDF - лепестка излучения которое должно идти от поверзности.

Небольшая заметка о PBR

Она становится слишком гладкой в быстрых алгоритмах мипкарт, вместо того что быть по настоящему сложной!

Небольшая заметка о PBR

По хорошему в игровых движках для PBR рендера нужно иметь возможность контролировать форму кривой отклика материала от расcтояния.

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

Но это отчасти можно поправить, например в оффлайне.

Изветен метод "Bump to Roughness method from Pixar" который используется для решения этой проблемы в Пиксар.

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

Да и с появлением таких технологий как Nanite от Эпик Геймз и megageometry от NVIDIA - этот способ очевидно не подойдет. И есть ли у нас вменяемая альтернатива?
Как ни странно относительно простое решение есть - в статье "Material Advances in Call of Duty: WWII" от АктивижнБлиззард 2017го.

слева мипмапинг текстур в лоб, справа техника из  Sledgehammer Games
слева мипмапинг текстур в лоб, справа техника из  Sledgehammer Games

Заметка и так разрослась. Так что пройдусь кратко. Sledgehammer Games предоставила два возможножных алгоритма получения карты глянца. По двум алгоритмам, как суммировать мипкарту нормалей и блеска:

(!) напоминаю что: Gloss = 1-Roughness!

Предполагая, что можно ограничиваемся аппаратной фильтрацией мипкартой, то для нас остается два решения, ни одно из которыхне является идеальным:

-либо используем модель площади микроповерхности и фильтруем, используя неправильную меру площади,

-либо используем Смоделированную область макроповерхности и соответствующим образом отфильтруйте слегка измененное, но неправильное распределение.

Небольшая заметка о PBR

Проблема в том что нужны дополнительные исследования что бы понять какой вариант ближе к реальности. Увы несмотря на то что это доклад 2017го года - новых данных особо не прибавилось.

В Call of Duty: WWII Sledgehammer Games использовали модель площади макроповерхности, и все значения, рассчитанные в этой статье, основаны на нормализации площади макроповерхности, как я понимаю - модель макроповерхности соответствует усреднению нормали в мипкарте, так что можно брать 3 канал соотвествующий (если это я не так понял - просьба поправить!)

И финальная апроксимация формулы выглядит так:

Небольшая заметка о PBR

Ось X - это Gloss, а ось Y - средняя нормальная длина. Справа апроксимированные данные уточненные так что бы кривая не выходила за пределы: (0.65 <->1) Формула апроксимации наверху.

Примерно так модифицируется мипкарта Блекска от расcтояния: в COD: WW2

<b>У COD карта Блеска (GLoss) - потемнение - это рост шершавости. </b>
У COD карта Блеска (GLoss) - потемнение - это рост шершавости. 

MIP с 0 по 5 демонстрационной карты Блеска. MIP с большим номером и с меньшим разрешением справа становятся все темнее, чтобы представить большее отклонение от нормы на normal карте.

Важно отметить, что идея гладкой поверхности упрощается до зеркальной зеркальной при увеличении растояния без каких-либо дополнительных изменений, если средний вектор длины у нормали меньше 0.5-0.65: поэтому если нормаль меньше этого значения - модифификация

Небольшая заметка о PBR

Так что читайте и изучайте SIGGRAPH и смотрите подходящие к вам решения...

Микромасштаб

Но что насчет микро масштаба? Кажется очевидным что если текстура окажется вблизи камеры то она не должна быть "размытой", логично что текстуры материалов можно "улучшить" за счет добавления техники Detail Textue и микрорельефа.
Эта обычно шумовая текстура с паттерном микроповерхности не обязана быть "огромной", для наших нужд хватит и тайлов 64х64, 128х128...

Тут уже проще, так как данное решение часто используется уже в движках, в виде подготовленных для нас функции:

Небольшая заметка о PBR

Которая внезапно работает...

...неправильно!!!
Эх - и инженеры Epic games не святые.

Так как это решение не будет учитывать ...уже готовую текстуру нашей базовой шероховатости! А ведь именно текстура шероховатости материала должна быть "маской" влияющий на эффект силы и добавления детальной карты нормали! Видите ли тут вход для Альфы? Нет, так что лучше сделать свой набор функций для добавления микрорельефа.

Так как шершавость и карты нормалей в своей сути одно и то же, но на разных масштабах. Дополнительно можно добавить и общее уменьшение шероховатости вблизи на чуть более гладкое - зеркальное. Но по факту это будет художественным решением.

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

Diffuse Roughness =/= Specular Roughness

Небольшая заметка о PBR

Шершавость одна и та же и для дифуза и для спекуляра. Но это частое и довольно сильное допущение и упрощение, которое часто используют во всех игровых движках для реал тайма. По факту же - шершавость для "диффуза" и "зеркального блика" почти будет РАЗНОЙ!
Но для того что бы это передать в игровом дивжке нужно использовать уже модели PBR основанные на многослойных материалах. Где слой с несовершенствами будет добавляться не в карту "шероховатости", а в виде отдельного слоя материала со своим IOR.

Небольшая заметка о PBR

Так например это в реальности очень хорошо можем увидеть такое поведение на таких материалах как Стекло, Металл, Покрытый лаком Мрамор, замершие узоры на стекле.

Это происходит от того что поверхность и "дефекты" на поверхности которые мы "приписываем" шероховатости - буквально состоят из включения другого материала с другими базовыми свойствами.

Небольшая заметка о PBR

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

Это конечно нам нужно будет отнюдь не везде - а только у некоторых специфичных материалах.

И это можно сделать только в движках поддерживающих многослойные BRDF как Unreal 5 , хотя как я ранее уже замечал - многие не будут этого делать просто потому что даже не задумываются об этом явлении. Когда в следующих перейду к рассмотрению Substrate - обязательно покажу как это можно реализовать.

Дальнейшее развитие идей PBR.

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

Справедливости ради многие команды вполне себе уперлись в ограничения Disney PBR на основе которого были основаны первые подходы, к которым современные 3д художники так привыкли.

Так что в ходе исследований возможностей раздвинуть границы(многие из которых были указаны выше, а многие темы только обсуждаются) многие команды по разработки CG графики обнаружили, что они по сути пытаются решить одну и ту же задачу. Это выразилось в то, что довольно быстро все специалисты из совершенно разных команд начали общаться и делиться своими наработками в рамках "Open PBR" -который позиционируется как следующий шаг в достижении Реализма.

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

Небольшая заметка о PBR

И от учета точного IOR материалов, при расчете прохождения луча света - вплоть до учета структурной окраски и дифракции света. Вместо не точного коэффициента "металличности".

Например вопрос множественной слоистости - я касался вскольз, будем разбираться с ним в дальнейших заметках по системе Substrate в Unreal Engine 5.7+ где "Субстрат" стал заменой старым шейдерным моделям для расчетов.

Более подробную спецификацию Open PBR - которая активно дополняется, можно почитать тут:

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

Поговорим об "Атмосфере"

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

Небольшая заметка о PBR

Говоря о влиянии окружающей среды - один из аспектов который отбрасывается почти полностью при моделировании, это учет того момента , что Эффект Френеля зависит не только от IOR материала , но и от IOR окружающей среды - а значит материалы и поверхности должны вести себя по разному в воздухе (IOR = 1.0003), в Воде (IOR= 1.333).

Для воздуха IOR Считается =1 и преобразование в коэффициент френеля простое:

Небольшая заметка о PBR

Собственно поведение кривой будте таким:

Небольшая заметка о PBR

А вот формула для преобразования в коэффциент Френеля из свойств материалов в общем случае.

Небольшая заметка о PBR

Довольно просто не правда ли?

Используя чистый коэффициент Френеля - можно учитывать влияние атмосферы.

Многие создатели игр - часто забывают(не знал но забыл!) об этом - полезно будет контролировать итоговый параметр F0 материала окружающей среды через таблицы параметров IOR в движке - если нашей камере игрока доведется побывать например на разных планетах, жидкостях и под водой. Кажется это мелочь - но на самом деле она способна поменять восприятие игры кардинально!

Изменение IOR c 1 до 1.333 при погружении в воду способно изменить поведение отражений на диэлектриках (IOR = 1.5+_) влияет очень сильно, в отличие от металов.

Учтя этот момент - мы сможем показать игру реальное поведение света на других планетах! То чего не смог сделать Starfield ...

О каком еще аспекте PBR который отбраковывается?

Поговорим о "Пористости"

И зачем оно нужна?

Пористость - это свойство поверхности впитывать "влагу". Этот параметр нужно вводить в PBR если мы планируем делать эффекты погоды и дождя.

Влажные поверхности очень сильно отличаются от сухих!

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

Да - часть эффектов можно задать через слой "воды" на поверхности BRDF по модели Clear Coat, или многослойного BRDF как в OpenPBR. Но вода буквально впитывается в материал и меняет его свойства!

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

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

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

Это происходит из за такого явления как "пористость"

Небольшая заметка о PBR

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

Небольшая заметка о PBR

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

Небольшая заметка о PBR

Мокрый материал обычно отражает длинные «красные» волны больше, чем короткие «синие» волны.

Но увы тема поведения материала при намокани имеет не очень много научных работ и исследований.

В целом если собираетесь делать в своей игре погодные условия - можно учесть что все материалы могут быть разделены на несколько видов:

  • Не намокающие
    (Но по ним должна течь вода и капли!)
    Металл и покрытые лаком материалы, а так же материалы с высокой степенью шлифовки. Так же живые ткани довольно сильно сопротивляются смачиванию.
  • Намокающие твердые материалы.
    Это грубые камни, кора деревьев.
    По ним должны стекать капли и должен менять цвет базового слоя.
  • Намокающие мягкие материалы
    Капли воды по ним не стекают - но они хорошо впитывают влагу сильно меняя свой цвет. Это ткани и сыпучие материалы - такие как песок.

Но влажность и эффекты дождя это отдельная сложная тема которую стоит рассматривать отдельно. И добавление таких эффектов способно сделать погружение в вашу игру гораздо более глубоким.

Пока что в рамках этой заметки поделюсь графиком зависимости коэффициента влажного альбедо к сухому. И оно не линейно!

Небольшая заметка о PBR

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

При этом важно отметить, что при очень низком альбедо ( < 0,039) кривая поднимается выше 1,0 (не показано на графике). Это связано с тем, что альбедо воды (чистой воды — 0,02 при нормальном падении света, но наличие примесей в воде могут увеличить это значение) выше этих низких значений альбедо, что приводит к буквальному осветлению тёмной поверхности.

Увы в интернете есть лишь два крупных источника по данной теме и влиянию пор и влажности на PBR.

Это современная лекция Ubisoft с GDC про Тропическую погоду:

И древние лекции 2012-2014 про "дождливый материал" Sebastien Lagarde технического инженера внесшего свой вклад в разработку движков Фростбайт и Юнити.

На сегодня все - надеюсь вам этот мой хаотичный поток сознания возникший в ходе поглощения лекций и материалов с GDC и SIGGRAPH показался полезным. И поможет улучшить визуал ваших игры вместо банального использования 3х текстур без модификаций в движке через шейдерную модель по умолчанию. Что обычно приводит к проклятому UE-like дженерик виду.

Пользуйтесь - улучшайте и развивайте. Многие темы будут еще рассмотрены мной отдельно и подробно когда я буду писать материалы по конкретной реализации Substrate Unreal. Или нет. Как повезет. Так что подписывайтесь что бы не пропустить.

83
20
4
2
1
1
1
116 комментариев