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

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

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

Physically Based Shading (PBS)
Шейдер (англ. Shader – затеняющий), шейдинг (англ. Shading – затенение). В CG это определение перекочевало из области изящных искусств. Так называют технику штриховки карандашом, которая выявляет объем объекта.
Если мы нарисуем замкнутую линию, ну, например, пусть это будет круг (Аналогом в 3ds max может быть сплайн). Данная геометрическая фигура не дает нам никакого представления об объеме объекта и я уже не говорю о свойствах его поверхности и т.д.

Cover 02.1.png

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

Cover 02.2.png

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

Cover 02.4.png

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

BxDF функции

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

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

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

Cover 02.5.png

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


Phong


Cover 02.6.png


Blinn

Cover 02.7.png

Ward

Cover 02.8.png

Данные модели 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 не хватает «дымки» вокруг блика и его растяжки по поверхности.

Cover 02.9.png

Длинный «хвост» или эффект «дымки» вокруг основного блика обусловлен тем, что большинство объектов, которые встречаются в обычных бытовых условиях, не имеют идеальной полированной поверхности у них всегда имеются микрошероховатости, которые оказывают влияние на глянцевитость поверхности.
Этот недостаток у 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) Продолжение следует…

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


Источник: render.ru