Что такое PBR? Часть 2

В предыдущей статье, я немного раскрыл, что стоит за термином PBR.

Перед тем как продолжить, хочу внести некоторую ясность в определениях. Как писал ранее, расшифровка PBR звучит как Physically Based Rendering (англ. Физически обоснованный\корректный рендеринг).

В сети так же можно встретить аббревиатуру PBS - Physically Based Shading (англ. Физически корректный шейдинг), не стоит на это обращать внимание, это все тот же PBR, просто в этом случае физически корректный шейдинг выделяют как отдельное направление.

Physically Based Shading (PBS)

Шейдер (англ. Shader – затеняющий), шейдинг (англ. Shading – затенение). В CG это определение перекочевало из области изящных искусств. Так называют технику штриховки карандашом, которая выявляет объем объекта.

Если мы нарисуем замкнутую линию, ну, например, пусть это будет круг (Аналогом в 3ds max может быть сплайн). Данная геометрическая фигура не дает нам никакого представления об объеме объекта и я уже не говорю о свойствах его поверхности и т.д.

Если нарисуем несколько замкнутых линий эллипсовидной формы, то они образуют каркас сферы (аналогом такого решения будет отображение сферического объекта в режиме «wire»). Текущее представление, уже может дать представление о форме объекта, но для людей с хорошим пространственным мышлением.

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

Резюмирую суть - то как будет выглядеть поверхность 3D модели, после рендеринга, определяет шейдер, в простонародье «материал». По внутренней сути, шейдер — это программа или код. Математическое ядро любого шейдера — это функция, вычисляющая как свет взаимодействует с поверхностью объекта.

Решение этой функции не простая задачка, это не 2+2 результат которой однозначно 4, а более сложная система отношений между различными переменными и параметрами, поэтому универсального и идеального шейдера на все случаи жизни просто не существует. Гипотетически можно конечно написать такую функцию, но это будет громоздкая и не оптимальная реализация.

BxDF функции

BxDF - семейство функций которые определяют как луч света ведет себя при "столкновении" с поверхностью 3d объекта. Символ x в аббревиатуре BxDF заменяется подходящей по ситуации буквой, а ситуаций может быть много, вот несколько типичных случаев:

- Луч полностью отразился - зеркальная поверхность

- Луч рассеялся - диффузная поверхность

- Луч прошел сквозь объект - прозрачная поверхность

- Луч зашел в объект и вернулся - полупрозрачный объект

В зависимости от ситуации используется подходящая функция - BDF, BSSRDF, BRDF, BTDF, BSSTDF, BSSDF, BSDF. Больше деталей можно узнать здесь, поскольку шейдерные функции это отдельный и очень емкий материал, который больше будет интересен кодерам, чем визуализаторам.

Для определения базовых свойств поверхности, которые удовлетворяют большинству пользовательских запросов используют относительно простую функцию: BRDF - Bidirectional reflectance distribution function. Чаще всего BxDF функции носят имена ученых, которые их разработали.

BRDF функции в V-ray

Популярная и широко используемая в продакшене рендер система V-ray долгое время применяла в стандартном шейдере VrayMtl следующие BRDF функции:

Brdf Phong

Brdf Blinn

Brdf Ward

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

Эмпирические данные (от др.-греч. [empeiria] «опыт») — данные, полученные через органы чувств, в частности, путём наблюдения или эксперимента.Это выглядит примерно так - некоторый ученый по имени «N» наблюдает как свет ложится по поверхности на том или ином материале и на основе этих наблюдений с учетом существующих теорий, базовых аксиом и научных постулатов, предпринимает попытки описать эти явления математически.Естественно невозможно ожидать, что два учёных, наблюдающих или проводящих эксперименты над одним и тем же явлением или объектом придут к одинаковым, независимым от теорий выводам.

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

GGX функция

GGX функция - это результат совместных изысканий четырех ученых Корнельского университета (США) Bruce Walter, Stephen R. Marschner, Hongsong Li, Kenneth E. Torrance. Алгоритм функции и результаты исследования опубликованы в 2007 году. Очевидно, что все четыре имени не запихнуть в название BRDF функции, поэтому данной модели дана аббревиатура GGX, расшифровать которую достаточно сложно. Возможно Generalized Gausian X, где Х – хрен знает, что обозначает. Математика здесь: Microfacet Models for Refraction through Rough Surfaces

На основе сравнительного анализа и математических вычислений было доказано что результаты этой функции максимально близки к результатам у аналитических BRDF функций различных материалов, которые были получены путем сканирования - MERL database

В частных случаях функция GGX по-прежнему не удовлетворяла все запросы, так например блик на полированном хромовом шарике имел более длинный «хвост», чем получался у GGX функции. На слайде ниже видно, что основное «тело» блика функции GGX и BRDF модели отсканированного материала (MERL database) очень похожи, но в GGX не хватает «дымки» вокруг блика и его растяжки по поверхности.

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

GTR функция

Недостаток у GGX функции, отсутствие возможности управлять "хвостом" блика, был решен в R&D (англ. Research and Development — исследования и разработки) отделе студии Дисней, который модифицировал GGX функцию, «скрестив» её с зеркальной моделью Trowbridge-Reitz описанную в работе 1975 года «Average Irregularity Representation of a Rough Surface for Ray Reflection».

Таким образом в GGX функции появилась переменная для управления «хвостом» блика. Самой функции дали название GTR (Generalized Trowbridge-Reitz) В стандартном шейдере VRayMtl по умолчанию задается значение для «хвоста» блика равное 2 (опция GTR tail falloff), что производит блик эквивалентный функции GGX. Значения меньше двух, дают возможность более тонко настроить блик и это уже будет работа GTR функции.

Продолжение следует…

USHAKOV | CG CHANNEL

Комментарии (24)

0
bisow
Поправьте линк на предыдущую статью, пожалуйста
+2
Pavel_Ushakov
Сделано
+3
Lier
Спасибо, жду следующую серию )
Отдельное спасибо за вставки с учёными, некоторые моменты не знал.
0
mr.spoilt
На дзене все есть
+1
Pavel_Ushakov
Спасибо. Почти всё уже есть на Дзене, в ВК совсем всё.... Постепенно информация выровняется во всех источниках и вы сможете читать её там, где вам удобно.
+2
DoCentttt
Хорошо, но жать куда? Чтоб красиво? Что за водичка?
+5
brovar
чтоб хорошо делать на практике, нужно знать теорию.
0
dontpiter
Довольно забавно выглядят... Автор для того, чтобы писать в подобном стиле нужно иметь за плечами определённый бэкграунд в CG.
0
mr.spoilt
Вы походу не знаете, кто такой автор )
+1
DoCentttt
Я тож не знаю кто это.может за пределами сайта это гуру какой-то, но в пределах сайта нашего это вот кто https://3ddd.ru/forum/thread/show/chiernyi_spisok_rabotodatieliei_i_ispolnitieliei/31#post543119 

Чсвшник с гнильцой и кидала
0
mr.spoilt
А как коррелируют косяки с порядочностью и профессиональные знания?
+1
DoCentttt
Никак. Говорю, что чел известен не знаниями, а непорядочностью. Вот и все. Его знания мне неизвестны абсолютно
+1
Pavel_Ushakov
«Слышал звон да не знает, где он»

Вопрос давно закрыт и с исполнителем всё было решено полюбовно. Все взаимные претензии давно сняты.
0
DoCentttt
Верю. Я взял информацию с открытых источников.
0
Pavel_Ushakov
https://3ddd.ru/forum/thread/show/chiernyi_spisok_rabotodatieliei_i_ispolnitieliei/33#post566695
0
dontpiter
Понятия не имею. На запрос "Павел Ушаков cg" гугл, кроме этой статьи про PBR и каких то досок на пинтресте ничего не выдаёт. Возникает резонный вопрос, а почему, собственно, автор пишет статью на эту тему?
+5
Kenzo80
По-моему маловато логотипов Ushakov. Сэкономили?
+3
nomaxi
Надо было под каждым абзацем лупить. А лучше после каждого слова!
"В Ushakov предыдущей Ushakov статье Ushakov, я Ushakov немного Ushakov раскрыл Ushakov"
+2
bulaev86
...Малкович, Малкович... https://www.youtube.com/watch?v=0XpxhWFionk 
0
cerber13
Подскажите пожалуйста фамилию автора статьи
Заранее спасибо
+3
newzboy
Мне, кажется, ХОРОШО =)
Спасибо!
+1
Pavel_Ushakov
Спасибо.
+1
Grend
Спасибо автору, интересно написано и по делу.
+1
Fruitgum
Хорошая тема)))Спасибо автору, читаю дальше......