Ранее в "сериале"...
В первой части обзора, я кратко затронул историю становления термина PBR и вывел главный тезис. PBR это не шейдер и не текстура или какой-то отдельно взятый рендер движок — это в первую очередь принципы и основы современной компьютерной графики, кто-то называет это философией.
Вторая часть обзора, была посвящена такому понятию как PBS — Физически корректный шейдинг, как неотделимая часть физически корректного рендеринга. Кратко рассмотрел, что такое BRDF функции.
Третья часть обзора — реализация GTR (GGX) функции в V-ray. Альтернативные, физически корректные, BRDF модели. Аналитические BRDF модели (Merl библиотека). Коммерческие BRDF решения — VRscans (VrayScanedMtl)
О физической корректности рендер систем.
Повторю еще раз для "горячих" финских парней - ни один рендер движок не имеет преимуществ над другим в контексте PBR, все они используют различные алгоритмы, которые решают математические задачи. Расчет глобального освещения (GI) это отдельная математическая задача. Каждый рендер движок решает эту задачу по-разному, но итог один, это результат наличия глобального освещения в 3d сцене. Глобальное освещение не может быть менее физически корректным у одного движка и более физически корректным у другого.
Корректней сравнивать алгоритмы и понимать, что каждый алгоритм нацелен на какой-то результат. Так например Irradiance Map в V-ray и Irradiance Cache в RedShift это алгоритмы с сильной интерполяцией результатов. Для вычисления GI эти алгоритмы используют меньшее число данных, поэтому рендеринг с этими алгоритмами происходит быстрей, но это не говорит о рендер движке как не состоятельном в контексте PBR. Вот если бы расчет GI заменялся бы расчетом Ambient Occlusion, то тогда да можно было бы сказать что мы имеем дело с физически некорректным решением.
"PBR" требования, предъявляемые к BRDF функции.
Расчет BRDF функции, которая определяет как луч света себя поведет при столкновении с поверхностью объекта в 3d пространстве, это то же задача. V-ray использует для этого GTR (GGX) функцию, Corona Renderer - GGX, Octan и Fstorm использует "свои" наработки, но это в любом случае подправленные в деталях известные BRDF функции, у Arnold - Cook-Torrance. На самом деле это не так важно название, важен результат и задачи с которыми справляется BRDF функция. На текущий момент к BRDF функции предъявляют следующие требования, соответствие которым определяет её как физически корректную:
Energy Conservation - закон сохранения энергии. Если по простому то все 100% света, которые попали на объект, должны быть правильно распределены - сколько-то % зеркально отразилось, сколько-то % поглотилось, сколько-то % прошло насквозь, но в сумме это должно давать вновь 100%
Reciprocity - Принцип взаимности или можно сказать инверсии, означает что результат BRDF функции останется не изменным, когда луч выпущенный из точки 1 (источник света), пройдя любое количество преломлений, отражений и т.д. при достижении конечной точки 2 (датчик), может вернуться тем же путем, если поменять местами точки 1 и 2, т.е. источник света и датчик. Другими словами, принцип математически доказывает утверждение: «Если я вижу тебя, ты можешь видеть меня».
Microfacets - поддерживать и соответствовать теории микрошероховатости поверхности (Microfacet theory)
Fresnel Effects - поддержка законов Френеля и связанных эффектов (Fresnel Glossy)
Anisotropy - поддержка анизотропности, которую можно встретить у таких материалов как брашированный метал, ткань, волосы, древесина.
Естественно, результаты сравниваются с аналитическими BRDF моделями из MERL библиотеки. GTR (GGX) отвечает большинству запросов, хотя у нее есть некоторые погрешности в Energy Conservation, возможно это только в имплементации у V-ray. Так же Octan может похвастать хорошими результатами, но дальнейшее повествование я буду вести про GTR (GGX) реализованную в V-ray поскольку с этим движком я иду по жизни уже более 15-ти лет.
Почему Chaos Group выбрали эту BRDF модель? Я думаю что это связано со определенными стандартами в киноиндустрии, где V-ray прочно занял свою нишу. В 2016 году вышел анимационный фильм FINAL FANTASY XV , полностью посчитанный на V-ray.
А 2017 году официальное лицо компании Chaos Group, он же папа V-ray - Владимир Койлазов (aka Vlado), получил Оскара за технологичные достижения в киноиндустрии.
Мне повезло встретиться с моим героем в оффлайн, на CG EVENT 2018 MOSCOW
И так почему GTR (GGX)? Я думаю это из-за того что бы быть конкуренто способным и одновременно дружественным рендер решением к студии Дисней. В этой студии так же выбрана BRDF модель GTR (GGX) в качестве основной функции, а эти ребята понимают в своем деле, поболее чем...
Так по запросу Physically-Based Shading at Disney в сети можно найти много документов с математическими формулами и графическими примерами, но поскольку я рассматриваю PBR принципы с потребительской точки зрения, мне интересно только то, как я эти все принципы могу адаптировать в пользовательской практике, а не через формулы.
В моей сфере самые актуальные рендер системы это Corona Renderer и V-ray Next. V-Ray, как я уже писал, мне знаком с первых версий, поэтому все свойства материалов я буду рассматривать и реализовывать на этом движке. Данные свойства кроссплатформенны, т.е. актуальны для любого современного рендер-движка. По этой причине я не буду впадать в сравнительный анализ всех доступных рендер систем. Люди со светлой головой смогут понять и правильно применить эти свойства не зависимо от используемой ими платформы.
Physically-Based Shading at Disney
По запросу «Disney shading principles» в Google можно найти кучу графических таблиц с цветными шариками, которые демонстрируют основные принципы, а фактически физические свойства любой поверхности, грамотное применение которых позволяет настроить любой материал. Я смог реализовать все диснеевские принципы на практике в рендер-движке V-ray Next и не испытал никаких трудностей, поскольку стандартный шейдер VRayMtl поддерживает их в полной мере, с небольшими "надстройками" в виде дополнительных расширений — VrayBlendMtl, Vray2SidedMtl и т.д.
Diffuse colour
Диффузный цвет (англ. Diffuse — рассеивать свет) базовая характеристика поверхности задающая цвет поверхности освещенной прямым источником света. В последнее время термин Diffuse colour, применяемый в CG стали подменять\путать\приравнивать к термину Альбедо (англ. Albedo — коэффициент отражательной способности). В реальности Albedo это комплексная характеристика поверхности — итог совместной работы всех представленных в таблице свойств материала — Specular Colour, Diffuse colour, SSS и т.д., а не просто диффузный цвет поверхности. Albedo — важная характеристика и при настройке шейдера следует поглядывать в таблицу известных значений альбедо, для некоторых материалов, что бы не делать дилетантских ошибок.
На практике я ограничиваю альбедо для максимально темного цвета равным значениями от 0.005 до 0.01, а для самых светлых тонов 0.7-0.8 - это контрольные цифры, которые определяют мой рабочий диапазон. Конечно не все данные есть в интернете, но вот сводная таблица некоторых значений, которые помогут верно "взять" диффузный цвет.
В иллюстрации ниже упрощенно показана разница между альбедо и диффузным цветом поверхности — разный диффузный цвет, при "обесцвечивании" дает один и тот же оттенок серого цвета, что говорит о том что при разном диффузном цвете поверхности — альбедо у этих материалов одинаковое.
Diffuse Roughness
Diffuse Roughness (англ. Roughness — шероховатость) В оригинальной таблице Дисней данная опция не представлена. Она используется в студии, но практика её применения достаточно узкая, чтобы уделять ей много внимания. Данную опцию в некоторых рендер системах называют Flatness (англ. Flatness — плоская).
Коротко о том чем обусловлено появление этой опции. Взгляните на изображение луны, фактически это сфера, но мы её видим плоской. Это связано с тем что из-за грубой поверхности и прочего комплекса физических явлений — объем «уплощается» и освещенная отраженным светом луна выглядит плоской. Физика и имплементация в CG описаны здесь. Применение данной опции актуально для грубых и глубоко матовых поверхностей — грубая ткань, натуральный камень, рыхлая бумага и т.д.
Subsurface Scattering
Корректней, на мой взгляд, назвать это свойство Translucency (англ. Translucency — светопроницаемость, полупрозрачность), поскольку определение Subsurface Scattering (англ. Subsurface Scattering — подповерхностное рассеивание ) это процесс поведения света внутри полупрозрачного объекта, а транслюцентность это свойство. В V-Ray для реализации этого свойства есть множество решений, как через стандартный шейдер, так и через отдельные решения, такие как VrayALSurfaceMtl, VrayFastSSS2 и т.д. Вопрос физически корректной имплементации подповерхностного рассеивания открытый, поскольку точных измерений было произведено достаточно мало, но все же в ряде источников можно найти некоторые из них. Эти данные используются в пред установках шейдера VrayFastSSS2 и их можно считать вполне физически корректными.
Metallic
В CG , по типу отражения, шейдеры разделяют на Dielectric и Conductive (или Metallic и Non-Metallic), в русской адаптации с английского языка, можно сказать металлы и… «все остальные», поскольку если переводить дословно, то Conductive это токопроводящий материал, но вода так же проводит ток, а имеет свойства отражения как у диэлектриков, поэтому правильней и понятней применять определение «металлы» и условно «неметаллы». В V-ray Next, в стандартном шейдере, ввели дополнительную опцию Metalness, но с небольшой оговоркой, физически корректный результат это значение либо 1 либо 0, промежуточные значения, не имеют за собой физически обоснованного контекста.
Specular
Specular (англ. Specular — зеркальный, отражающий и т.д.) С этим термином иногда возникает путаница — в V-Ray за отражающие свойства поверхности отвечает параметр Reflect, а за силу отражения параметр IOR (англ. Index of Refraction — Индекс преломления). Если грубо, то белый цвет рефлекта «включает» зеркальность материала, а IOR определяет силу этого отражения. На практике физически-корректные значения IOR для «неметаллов» колеблются от 1,3 до 1,8. Особняком стоят некоторые минералы, значение которых достигает 3. IOR металлов в CG имплементируется совершенно другим способом, здесь можно найти подробную инструкцию как получить максимально точный цвет метала. Иногда, термин IOR вводит в заблуждение. Индекс преломления актуален и для визуально непрозрачных материалов, таких как металлы. Измерения IOR у таких материалов производят на очень тонкой пленке, толщина которой меньше длинны световой волны, при таких размерностях IOR металла становится доступен к измерению. Что бы сделать измерения - пленку металла наносят на прозрачную поверхность: вода, стекло или пластик.
Правильным, для большинства «неметаллов», считается следующее решение — белый рефлект и подходящее значение IOR. Если IOR не известен то значение 1.5 будет оптимальным. Для водосодержащих материалов (алкоголь, органика, шампуни, человеческая кожа, молоко и т.д.) обычно используют IOR для воды — 1.33 или близкие к этому значения.
Следующее свойство не имеет физического обоснования, но все же было реализовано для CG художников в студии Дисней.
Specular Tint
Specular Tint — цветное отражение у «неметаллов», цвет устанавливается аналогичным диффузному или близким к нему. Если «притягивать за уши» физическое обоснование этой опции, то этот фейковый прием, позволяет реализовать некоторые свойства тканевых поверхностей «по-быстрому», минуя долгие SSS расчеты. Все дело в том, что волокна из которых состоят нити тканей транслюцентны, свет проникает вовнутрь, отражается и возвращается обратно на поверхность, «окрашивая» волокна «диффузным» цветом. Это грубая трактовка, но уместная для приблизительного понимания в каких случаях это решение можно использовать на практике.
Specular Roughness
Specular Roughness (англ. Roughness — шероховатость). В V-Ray, по дефолту, за «размытые» отражения отвечает опция Glossy Reflect, это инвертированная опция Specular Roughness. Если необходимо работать в PBR workflow, то в стандартном шейдере VRayMtl есть возможность переключаться между Roughness\Glossy для «размытия» отражений. Результаты работы Roughness и Glossy идентичны, просто они начинаются с разных концов, но в серединном значении 0,5 они совпадают.Roughness в V-Ray ввели для того что бы удобно было использовать так называемые «PBR текстуры» задающие параметры для опции Specular Roughness.