Вдохновил меня на написание этой статьи вот такой шейдерный казус, который я увидел на одной из моделей, купленных на этом сайте.
Казалось бы модель совсем "свежая" по дате создания... но шейдер, а вернее как были подключены карты нормалей в этом шейдере, вызвал у меня когнитивный диссонанс, как будто на дворе 2000-ый год. Не хочу обидеть автора модели и сказать спасибо за труды, так как модель в любом случае "зашла" в проект, но пробелы с шейдерами надо будет закрыть.
Ну и по теме. Рендер системы появились давно - V-Ray имеет уже почтенный возраст. Первая бета-версия рендера появилась в далеком 2000 году.
В 2000 году интернет не был распространен повсеместно и разработчики "варились в собственном соку", имея возможность обмениваться опытом только на конференциях. По этой причине термины и определения, используемые в том же самом шейдинге, придумывались исходя из ИМХО разработчика, поэтому к 2020 году, мы имеем кучу формулировок и текстур - выполняющих одну и ту же функцию.
Рендер движки для продакшена, теперь тесно "сотрудничают" с реал-тайм движками и наоборот. PBR это попытка привести всю CG отрасль к определенным стандартам и некой универсальности, что бы люди не испытывали "боль" при совместной работе в разном софте и рендер системах.
Сделал небольшой гайд, для новичков и неискушенных, как подключать и использовать различные текстуры вместе с VRayMtl. В большом разрешении таблицу можно скачать здесь.
Классический PBR Базовый сет это четыре карты: Diffuse, Specular\Metalness и Glossy\Roughness и Normal, но есть еще ряд текстурных, карт, подключение которых, у начинающих пользователей, могут вызвать затруднения, поэтому я решил сделать обзор ряда текстур, которые можно, так или иначе, использовать в стандартном шейдере VRayMtl и разобрать их по слотам подключения.
Слот Diffuse
Слот Diffuse - сюда можно\нужно подключать карты имеющие в своем названии - Albedo, Color (Colour), Diffuse, Base. Иногда эти определения могут быть сокращены до Diff, Col, Alb. Если в текстурном сете есть карты Cavity и Ambient Oclusion, то их можно использовать следующим образом.
В скриншоте ниже, я отобразил возможный метод подключение через стандартную ноду Composite. Подключать эту ноду, которую я назвал Extended Diffuse, так же к слоту Diffuse, вместо простой диффузной карты.
Отличие текстурных карт Cavity и Ambient Oclusion состоит в том, что Cavity "работает" на мелкую детализацию - трещинки, морщинки, углубления и прочие дефекты поверхности, а Ambient Oclusion работает на выявление и подчеркивания объема у небольших деталей, которые при расчете GI могут "потеряться" в общем объеме. Обе эти карты можно использовать одновременно или по отдельности, замешав их с основной диффузной картой через ноду Composite в режиме Multiply, а контрастность контролировать через непрозрачность слоя.
Слот Reflect
Сюда подключаем карты Specular или Reflect. Если работа ведется в Metalness WorkFlow, то Reflect должен быть просто белым. Если вы используете Specular WorkFlow, то подключаемая карта может будет серой для неметаллов, так и цветной для металлов. Подробней читать здесь - Что такое PBR? Часть V
В некоторых случаях можно использовать Cavity map, подключив её напрямую к слоту Reflect , что бы убрать отражения в мелких углублениях - это улучшит "читаемость" тонких деталей.
Слот Refract
В этот слот можно подключить карты с названиями Refract, Transmission, Transmittance, Translucency, Scatter Radius. Вне зависимости от названия, эти карты определяют прозрачность поверхности. Белый цвет это полная прозрачность, черный - это непрозрачный материал.
Карты Translucency и Scatter Radius более актуальны для использования в VrayFastSSS2 и других аналогичных решениях, но и стандартный шейдер VRayMtl поддерживает упрощенный режим SSS, поэтому ничего плохого не случится если вы возьмете в "оборот" и эти карты.
Слот Bump
В данный слот можно подключать напрямую любую растровую или процедурную карту. Цвет карты не имеет значения, но обычно используют черно-белые карты, где белый это максимальная высота рельефа, черный - отсутствие рельефа.
Те самые "синенькие" карты из модели - Normal Map подключаются исключительно через ноду VRayNormalMap. Данная нода поддерживает так же подключение и обычной Bump карты, поэтому в одном шейдере можно совместить несколько рельефных решений.
Если вы производите какие-то дополнительные манипуляции с Bump картой, например, её можно смешать с Cavity картой в режиме Multiply или производите еще какие-то манипуляции, то данные решения следует подключать к слоту Bump, через ноду VRayColor2Bump, так как в некоторых случаях шейдер может не "прочитать" ваши композитные решения.
В целом я рекомендую все процедурные карты и растровые карты, после корректирующих или композитных нод, подключать в слот Bump через ноду VRayColor2Bump, это 100% гарантирует корректную работу вашего решения.
Слот Reflection Glossy
Сюда подключаем карту Glossy или Roughness в зависимости от рабочего используемого пространства. Для использования Roughness карты, шейдер нужно перевесети в режим Use Roughness, но следует знать, что Glossy и Roughness это "зеркальные" карты, и если инвертировать Roughness, то получиться карта Glossy.
Слот Refraction Glossy
Для "размытия" прозрачности - VRayMtl использует только Glossy режим и если вам каким то чудом досталась в пользование карта Roughness для прозрачности, то её следует инвертировать.
Слот Displacement
К этому слоту нужно подключать Height карту. Силу рельефа контролировать через множитель для этого слота, а качество семплирования этой карты можно контролировать здесь: Render Setup > Settings > Default displacement
Чем меньше значение Edge Length тем точней и качественней будет рельеф, но за качество нужно будет "платить" большим расходом оперативной памяти - Displacement это очень прожорливое решение. По дефолту стоит 4, этого вполне достаточно для большинства задач.
Слот Tranclucency
К нему можно подключать цветные карты Scatter color, SSS, которые определяют цвет "внутренностей" материала. В VRayMtl данные карты будут работать только при "включенных" опциях Refract и Translucency. Сама карта, подключенная к слоту Tranclucency, будет обозначаться как Back-side color.
Слот IOR
Обычно, этот параметр не запекается в отдельную карту, его настраивают непосредственно в опциях шейдера, так как эта опция использует порядок цвета, за пределами стандартного динамического диапазона, т.е. больше 1 (> 255 sRGB). При очень большом желании значение IOR можно сохранить в растровой карте через форматы *.hdr или *.exr - эти форматы поддерживают расширенный динамический диапазон.
Слот Fresnel IOR
В некоторых текстурных сетах, может прилагаться данная карта и так же иметь название IOR, но её следует подключать в слот Fresnel IOR. В отличии от IOR, диапазон карты для Fresnel IOR лежит в пределах от 0 до 1, где черный цвет (0) это максимальное значение IOR, белый цвет (1) это минимальное значение IOR=1.
Разницы между IOR и Fresnel IOR нет, в сути это одно и то же, просто у них математика разная. По умолчанию используется IOR и настраивается напрямую в шейдере, специально разделять эти опции и присваивать им разные значения, это не "пибиэрно". В исключительных случаях это можно делать. Об этих случаях я писал здесь.
Слот Opacity
Слот для подключения карт непрозрачности. Данные карты могут иметь название Opacity, Opaque, в редких случаях - Mask. В этих картах черный цвет, задает полную прозрачность поверхности, а белый полную непрозрачность.
Слот Rougness
Этот слот для подключения карт диффузной шероховатости - Diffuse Roughness. Не стоит путать карту Roughness для размытия отражений и подключать её к слоту Diffuse Roughness напрямую. На моей практике карты для Diffuse Roughness не мне попадались, но в сети используется следующая формула для создания Diffuse Roughness карты
Diffuse roughness = 0.33*Reflection Roughness
Исходник этого решения обсуждается здесь . На практике это можно реализовать через ноды VrayCompTex или Composite. Карта шероховатости для отражения смешивается через умножение с картой цвета со значением 0.33 и подключается в слот Rougness
Слот Anisotropy
Мне не попадались "запеченые" карты для анизотропии и не известно, как обстоят дела с анизотропией в игровых движках, от куда собственно и перекочевала традиция "запекать" текстуры. В VRayMtl, анизотропность можно задать через черно-белую карту в диапазоне от 0 до 1, где 0 это отсутствие анизотропии, а 1 максимальное значение. Из практики - значение больше 0.8 ставить не следует.
Слот Anisotropy Rotation
Карты анизотропии, как писал выше, мне не попадались, но вот для контроля направления анизотропии - карты я видел. На сайте poliigon.com, для некоторых металлических шейдеров предлагается в карта Direction.
Для подключения таких, и ей подобных, карт нужно знать следующее - VRayMtl поддерживает только черно-белые текстуры для определения направления анизотропии. Диапазон таких карт от 0 до 1 , где ноль, черный цвет, эквивалентен 0 градусов, а единица, белый цвет, равна значению 360 градусов, поэтому все "цветные" карты, если они вам попались, следует адаптировать и привести к аналогичному решению, как на картинке ниже.
Слот Fog Color
Через этот слот можно задать цвет прозрачности материала. Карты для этого слота могут иметь название: Transmitance color, Observed color, Transmission Color
В Corona renderer — заявленная опция absorption color, употребляется неуместно, правильней было бы использовать термин Observed Color (англ. Observed Color — наблюдаемый цвет, видимый цвет)
Слот Self-Illumination
К данному слоту подключаются карты с названием Emissive или Self-Illumination. Функции этой карты очевидны, они "заставляют" поверхность объекта светиться.
Слот Metalness
Слот служит для подключения карт "металличности." Это черно-белая карта, где черный цвет "сообщает" рендер системе, что это поверхность диэлектрика, а белый цвет, что это поверхность металла. Промежуточные значения, т.е. серый цвет, как правило, не используются. Хотя в некоторых случаях это будет оправдано - если имитировать тонкую оксидную пленку, покрывающую поверхность металла.
ID mask, Mask, RGB mask
В некоторых текстурных сетах могу попадаться цветные и не очень понятные, на первый взгляд, карты. Это могут быть простые RGB маски, где используются три локальных цвета - красный, зеленый или синий. Или сложные композитные решения, в которых "запечены" несколько свойств.
"Извлечь" нужную текстуру (свойство) из такой композитной карты можно через ноду RGB Tint заменив нужный цвет на белый цвет. Все остальные компоненты нужно сделать черными.
Как правило в названии таких карт, уже обозначены свойства и каналы, в которых эти свойства "лежат", так на примере ниже представлена карта, где на красном канале лежит карта Roughness, а на зеленом Ambient Oclusion. Обычно значения прописываются по порядку расположения каналов в RGB
Или вот на этом примере
За аббревиатурой RMA - скрываются Roughness, Metalness, Ambient, которые извлекаются каждый по своему каналу RGB.
Fuzz карты
Это черно-белые карты для "рассадки растительности" на лице, ворсинок на поверхности ткани и т.д. В шейдерных решениях они, как правило, не используются. Это чисто техническая маска для работы с модификаторами волос и скатер плагинов.