Четвертую часть обзора , я прервал на описании диснеевских PBR принципов в шейдинге. Через пару абзацов я продолжу, но хочу сделать небольшую заметку о шероховатости поверхности.
Шероховатость поверхности
В статье 1992 года Predicting Reflectance Functions from Complex Surfaces , опубликованной на кафедре компьютерной графики Корнельского университета, о нем я писал в первой части , размещена следующая картинка.
На этом изображении фиксируется факт того, что через BRDF можно задать размерность шероховатости начиная от 0,1 мм. Мне стало любопытно, а так ли это на самом деле? Так же больший интерес представляла возможность привязать значение Roughness\Glossy к каким то конкретным цифрам из реальности. Мне понадобилась неделя что бы разобраться в слесарных вопросах связанных с понятиями шероховатости поверхности. Это материал для отдельной статьи, которую я обязательно опубликую, как закончу с PBR.
Что по итогу?
Мне удалось найти решение, которое позволяет перевести реальность в CG. В статье Acquiring Parameters for Renderingбыли опубликованы метод и формула, где использовался показатель RMS (Root Mean Square) - среднее квадратическое значение шероховатости поверхности для определения значений Roughness\Glossy. Осталось дело за малым - я прошерстил все профессиональные ресурсы связанные с обработкой поверхностей, замерами шероховатости и т.д. что бы получить необходимые данные. Оказывается есть такая штука как линейка шероховатостей, где представлены базовые показатели шероховатости поверхности. Внешний вид, у разных производителей, может отличаться, но суть и значения неизменны.
Затем разобрался как перевести одни единицы измерения шероховатости в другие. Я ни разу не математик, хотя и учился в математическом классе, все формулы давно забыты. Благо есть Exel, где все необходимые формулы можно найти и по итогу все получилось. Я сделал цифровую версию линейки в 3ds max и сделал шейдер металла с различными значениями шероховатости.
Шероховатость я реализовал через ноду VrayColor2Bump, настройки которой позволяют реализовать сверхмалые значения бампа. Затем сделал такую же линейку, но в ней шероховатость была реализована только средствами BRDF, т.е. через параметр Roughness\Glossy. Результат меня порадовал, визуально, плюс минус, всё совпадает и реальная линейка, и обе виртуальные.
Что до линейки сделанной средствами BRDF, то после показателя шероховатости № 21, никаких визуальных изменений уже не происходит. Почему так? А все дело в том, что размерность шероховатости, после табличного значения № 20, превысила 0.001 мм(см. показатель Ra). От сюда можно сделать вывод о не корректности информации из картинки, используемой в статье Predicting Reflectance Functions from Complex Surfaces.
Как показала практика, BRDF функция способна имплементировать реальные значения шероховатости только в диапазоне от 0,001 и ниже, все остальные значения нужно "добирать" через использование опции Bump, комбинируя значения параметров Roughness\Glossy и Bump. Из таблицы ниже есть возможность подглядеть вычисленные и сопоставленные мной виртуальные значения шероховатости с реальными (см. колонки Roughness\Glossy и показатель Ra)
Конечно это просто цифры и у большинства возникнет вопрос - ну ок... молодец, а что с ними делать? Как писал ранее, это небольшой анонс будущей темы обзора, где я свяжу эти данные с реальностью. Ну согласитесь - удобно знать какое значение Roughness\Glossy поставить для брашированной поверхности металлического чайника, чем подбирать это значение "на глазок".
И так продолжу по теме...
Прервал я свое описание диснеевских PBR принципов в шейдинге на свойстве Specular Roughness.
Шероховатость поверхности может иметь нерегулярную структуру, которую можно представить как обычный шум (noise), а может иметь регулярно-направленную структуру, которая будет оказывать существенное влияние на форму блика поверхности.
Блик на поверхности, образованный нерегулярным типом микрошероховатости (бумага, бетон, штукатурка, материалы которые были подвергнуты пескоструйной обработке и т.д.) называют Изотропным.
Блик на поверхности, образованный регулярно-направленным типом микрошероховатости (ткань, брашированный метал, волосы, древесина и т.д.) называют Анизотропным.
Anisotropy
Блик всегда повернут перпендикулярно направлению шероховатости поверхности, от сюда вытекает следующее свойство Anisotropy Rotation (англ. Rotation — вращение)
Anisotropy Rotation
Следующая опция Sheen (англ. Sheen — отблеск, отлив) преимущественно применяется при реализации тканевых шейдеров. В статье о диснеевских принципах, он описывается как «an additional grazing component». Данную формулировку в контексте статьи можно перевести как «дополнительный компонент со скользящим затуханием по поверхности».
У данной опции «ноги растут» от такого свойства поверхности, как ворсистость. Микроворсинки, торчащие из волокон нити, это тоже своего рода шероховатость поверхности. На гладких тканях (шелк, плащевка и т.д. ) это свойство не проявляется, но на шерстяных тканях, бархате и им подобным это свойство достаточно заметно.
Это свойство не имеет реализации в стандартном шейдере V-ray, но может быть реализовано достаточно просто и честно, через процедурную карту Falloff в режиме Fresnel (затухание по Френелю).
Sheen
Sheen Tint это надстройка к опции Sheen, которая окрашивает ворсинки в цвет близкий к диффузному. Обоснование тоже самое как и в случае со Specular Tint — волокна из которых состоят нити тканей транслюцентны, свет проникает вовнутрь, отражается и возвращается обратно на поверхность, «окрашивая» волокна «диффузным» цветом.
Sheen Tint
Следующая опция Clearcoat (англ. Clearcoat — дословно «чистое покрытие», лак), достаточно узкоспециальная и не имеет широкой практики применения в рядовой визуализации. Через данную опцию реализуются автомобильная краска, дерево покрытое лаком с двойным бликом и прочие уникальные поверхности.V-ray данной опции не имеет, так как частота её применения исключительно мала в общей практике, но реализовать данную опцию через VrayBlendMtl в режиме Shellac не составляет никакого труда, к тому же для автомобильной визуализации написан отдельный шейдер VRayCarPaintMtl.
Clearcoat
Опция Clearcoat Gloss — контролирует глянцевитость лака. В диснеевском шейдере диапазон этой опции урезан (ужат) до 0,25 Roughness или 0,75 Glossy эквивалент. Забыл упомянуть, что само покрытие имеет IOR 1.5 (среднее значение IOR для большинства лаков), а BRDF функция GGX, а не GTR, что важно.
Clearcoat Gloss
Прозрачность и термины связанные с ней. В первую очередь опция Refraction и её определение.
Refraction (англ. Refraction — Преломление ). Так же как и в случае с Reflection — данная опция просто «включает» прозрачность у материала, где белый цвет означает полную прозрачность, а IOR определяет силу преломления.
В «быту» термин Refraction, как правило, не употребляют. Вместо него используется термин Transmittance (англ. Transmittance — пропускающая способность, светопроницаемость). Почему так?
Ответ прост, поскольку вся физика материалов основана на поведении (взаимодействии) луча света при столкновении с поверхностью объекта. Некий условный луч, при столкновении с поверхностью может либо отразиться, формируя Specular и Diffuse свойства поверхности, а может быть поглощен данной поверхностью полностью или частично.
Transmittance
Очень важно разобраться с определениями, тогда все становится предельно просто, в контексте понимания как настраивать прозрачные и не очень материалы.
Opaque (англ. Opaque — непрозрачность). Материал считается непрозрачным, даже если, имея минимальную толщину, он не пропускает свет.Transparent (англ. Transparent — прозрачный) Материал считается прозрачным, если очертания предмета, просматриваемого через него, различимы.Translucent (англ. Translucent — полупрозрачный, просвечивающий) Материал считается полупрозрачным, если он пропускает свет, но через него не видно никаких объектов или они плохо различимы.
С прозрачностью и непрозрачностью, все предельно просто — это две крайние точки. У непрозрачных материалов, я уже разобрал все возможные опции.
Прозрачный материал не имеет диффузной составляющей поэтому максимально корректным решением будет черный цвет в слоте Diffuse. Цвет прозрачности определяет такое свойство как Light absorption (англ. Light absorption — поглощение света). И вот тут опять начинается путаница в определениях. Термин absorption color (англ. Absorption color — цвет поглощения) иногда используется неуместно и не корректно.
В реальности, когда речь ведется о поглощении света, то это значит следующее — когда я вижу желтое стекло, то это значит что были поглощены все остальные цвета, кроме желтого. В качестве примера приведу Corona renderer — заявленная опция absorption color, употребляется неуместно, правильней было бы использовать термин Observed Color (англ. Observed Color — наблюдаемый цвет, видимый цвет) Ниже приведена таблица, поглощаемых и наблюдаемых цветов.
В V-Ray была произведена замена терминов, вероятнее всего, что бы не ошибиться в терминологии. Observed Color было дано название Fog (англ. Fog — туман), а такое свойство как Absorption distance (англ. Absorption distance — дистанция поглощения) подается как опция Fog Bias (англ. Fog Bias — смещение тумана). Формулировки, на мой взгляд, тоже так себе, но что есть то есть.
Какие термины употреблять уместнее всего?
Transmitance color — цвет прозрачности. В V-Ray, как уже говорил этот термин подразумевает собой опция Fog и добавочная «подкрутка» к ней — Fog multiplier.
Light attenuation — сила (глубина, скорость) затухания луча света внутри объема объекта, характеристика основанная на свойстве Absorption distance. По факту, затухание света внутри объема работает по умолчанию. То есть чем объект толще, тем он темней, но во многих рендер движках, есть возможность подкрутить силу затухания в большую или меньшую стороны. В V-Ray это опция Fog Bias.
Transmittance colour & Attenuation
Из таблицы видно, что при одинаковом значении цвета прозрачности, можно получить разную глубину прозрачности, меняя значение параметра attenuation (Fog Bias)
Более сложные, с точки зрения физики взаимодействия с лучом света— транслюцентные материалы. Полупрозрачность, в первую очередь, обусловлена наличием мелких непрозрачных частиц внутри объема. Наличие таких частиц, а так же их структура (форма, строение) дает начало для свойства Transmission roughness (англ. Transmission roughness — шероховатость прозрачности) и вытекающее из него SSS (Sub Surface Scattering) свойство.
Так же как Specular roughnes «заставляет» луч света «растекаться» бликом по поверхности — Transmission roughness «ломает» направление луча внутри объекта заставляя его растекаться внутри объема создавая эффект подповерхностного рассеивания света. В реальности подповерхностное рассевании света не возможно без внутренних "дефектов", но в компьютерной графике Transmission roughness и SSS разделены и пользователю можно их задействовать независимо друг от друга, т.е. "включение" Transmission roughness в шейдере не "запускает" алгоритм вычисления SSS в простом шейдере VrayMtl, его нужно включать отдельно.
Transmission roughness
В V-ray свойство Transmission roughness имплементировано через опцию Refract glossy.
PS Это была предпоследняя часть обзора диснеевских принципов. В последней части будет обзор «редких» шейдерных решений для, таких свойств как Thin Film (англ. — тонкие пленки), и шейдинг объектов с односторонней геометрией.