среда, 24 апреля 2013 г.

mental ray 4 Maya | Shaders Guide | шейдеры mi_car_paint_* и mi_metallic_paint_*

Здравствуйте друзья, сегодня мы продолжим знакомиться с базовыми шейдерами материалов mental ray, и перейдем к рассмотрению комплексных шейдеров библиотеки “paint”.
К данной библиотеке относятся шейдеры, отвечающие за создание автомобильной краски с вкраплениями из металлических частиц. Сейчас, большинство систем визуализации обладают реализацией шейдеров автомобильной краски, в mental ray, данные шейдеры появились в версии 3.6 и сразу предоставили богатые возможности по созданию шейдеров для визуализации автомобилей или других моделей, окрашенных специальной краской.

Если вам уже интересно, прошу под кат>>



mental ray for Maya, предоставляет следующие шейдеры из библиотеки paint:
- mi_car_paint_phen
- mi_car_paint_phen_X
- mi_car_paint_phen_X_passes
- mi_metallic_paint
- mi_metallic_paint_X
- mi_metallic_paint_X_passes
Данные шейдеры реализованы в интерфейсе Hypershade, Node Editor и Attribute Editor. Но перед тем как мы начнем знакомиться с параметрами шейдеров, мы рассмотрим теорию “paint” шейдеров, и как ее видят разработчики из NVIDIA ARC (ex. mental images).
Структура автомобильной краски.
На иллюстрации выше, представлена структура автомобильной краски, которая реализована в шейдере mi_car_paint_phen. В отличие от рассматриваемых в предыдущих главах шейдеров, шейдер mi_car_paint_phen является представлением типа Phenomenon. Декларирование Phenomenon очень похоже на декларирование простых шейдеров (shaders), кроме того, ключевое слово шейдеров заменяется на Phenomenon, и добавляются новые дополнительные определения и блоки.
Автомобильная краска имеет ряд специфических свойств. В верхней части кузова машины представляет собой тонкий слой пигмента. Свойства этого слоя таковы, что фактически воспринимают изменения цвета в зависимости от угла обзора, а также от угла падения входящего света.
В этом слое содержатся крошечные металлические частицы. Частицы отражают свет и можно увидеть сверкание этих частичек в яркий солнечный день, в связи с этим, отдельные частички отражают солнечный свет прямо на наблюдателя.
Верхнюю часть покрывает слой лака, который может быть более или менее отражающим и более или менее глянцевым, в зависимости от качества нанесенного покрытия и любым дополнительным восковым слоем (налетом). В частности, этот слой, как правило, обладает выраженным эффектом Френеля, отражающим больше света на небольших углах обзора по отношению к поверхности.
Шейдеры библиотеки “paint”, представлены следующими файлами:

link "paint.so"
$include "paint.mi"

В отличие от mental ray для 3ds Max и mental ray Standalone, в mental ray for Maya, шейдеры “paint” представлены несколькими вариантами. Шейдеры с приставкой *_X и *_X_passes — варианты шейдеров для композитинга и вывода изображений по элементам (пассам или render passes). Это вообще специфика реализации данных шейдеров в Maya. В 3ds Max, данные шейдеры выполнены в едином интерфейсе.
На что еще стоит обратить внимание, шейдеры из библиотеки “paint” относятся к физически корректным моделям затенения, в отличие от шейдеров библиотеки mib_illum_*, “paint” шейдеры реализуют не только specular составляющую, но и включают составляющую прямых и глянцевых отражений (reflections и glossy reflections). В то время как при реализации конструкции с помощью шейдеров mib_* необходимо создавать граф из узлов mib_illum_* и mib_glossy_*.

Шейдер mi_car_paint_phen
Как обычно, мы начнем рассматривать шейдер с его декларации в формате .mi, и реализации в интерфейсе Autodesk Maya. Шейдер mi_car_paint_phen является достаточно сложным и комплексным инструментом, реализующим в себе как зеркальные блики, так и отражения и преломления в различных слоях покрытия. В формате mental ray scene description language (.mi), данные шейдер декларируется следующим образом:
declare phenomenon "mi_car_paint_phen" 
(
    color       "ambient",
    color       "base_color",
    color       "edge_color",
    scalar      "edge_color_bias",
    color       "lit_color",
    scalar      "lit_color_bias",
    scalar      "diffuse_weight",
    scalar      "diffuse_bias",
    color       "flake_color",
    scalar      "flake_weight",
    scalar      "flake_reflect",
    scalar      "flake_exp",
    scalar      "flake_density",
    scalar      "flake_decay",
    scalar      "flake_strength",
    scalar      "flake_scale",
    color       "spec",
    scalar      "spec_weight",
    scalar      "spec_exp",
    color       "spec_sec",
    scalar      "spec_sec_weight",
    scalar      "spec_sec_exp",
    boolean     "spec_glazing",
    color       "reflection_color",
    scalar      "edge_factor",
    scalar      "reflection_edge_weight",
    scalar      "reflection_base_weight",
    integer     "samples",
    scalar      "glossy_spread",
    scalar      "max_distance",
    boolean     "single_env_sample",
    color       "dirt_color",
    scalar      "dirt_weight",
    scalar      "irradiance_weight",
    scalar      "global_weight",
    integer     "mode",
    array light "lights"
)
Шейдер mi_car_paint_phen формирует как диффузный цвет, тени, так и участвует в формировании глобального освещения. В Maya, доступ к нему моно получить из Hypershade, Node Editor и Marking Menus.
Реализация интерфейса шейдера mi_car_paint_phen в диалоговом окне Attribute Editor.
По умолчанию, к Shading Group, шейдер подключен через атрибут Material Shader, в свитке mental ray > Custom Shaders. Это означает, что в материале он может быть применен, как шейдер поверхности.
Шейдер поддерживает:

  • Диффузные отражения в слое пигмента с возможностью изменения\смещения цвета в связи с наблюдателем, а также от угла падающего света.
  • Зеркальные блики от источников света в металлических частицах
  • Оптические трассируемые отражения в металлических частицах
  • Зеркальные блики от источников света в слое покрытия лаком (с опциональным режимом “glazing”)
  • Включает слой покрытия лаком с выборочными зеркальными или глянцевыми отражениями и зеркальными подсветками с опциональным режимом “glazing”
  • Включает слой для имитации налета или грязи, основанный на модели затенения по Ламберту (lambertian), позволяя реализовать более реалистичное затенение («загрязненный вид»)

Итак, мы познакомились с базовыми сведениями о шейдере mi_car_paint_phen и его возможностями. Далее, мы рассмотрим основные атрибуты и их влияние на шейдер.
Все основные атрибуты, сосредоточены в нескольких свитках: Diffuse Parameters, Specular Parameters, Flake Parameters, Reflection Parameters, Dirt Parameters и Upgrade Shader (для версии mi_car_paint_phen и mi_car_paint_phen_X), а так же Frame Buffer Contribution (для версии mi_car_pain_phen_X_passes). Рассмотрим атрибуты, размещенные в этих свитках подробнее, и приведем для них примеры.

Свиток Diffuse Parameters
В свитке Diffuse Parameters, сосредоточены основные атрибуты для настройки диффузного цвета шейдера. Напомню, что параметр, заключенный в кавычки (“”) является описанием на языке .mi (Scene Description Language), а параметр, заключенный в скобки – вариант написания в интерфейсе Attribute Editor.
“ambient” (Ambient) - является компонентом света окружения. Обратите внимание, что этот параметр трактуется по-разному по отношению к паре параметров ambience\ambient многих других базовых шейдеров, он находится под влиянием других параметров диффузного цвета расположенных ниже, и, следовательно, представляет входящий свет, а не "цвет окружения" объектов.
Пример визуализации шейдера с различными значениями Ambient.
Заметьте, что ambient при увеличении яркости оказывает влияние на отражённый цвет, формируемый с помощью Final Gather или Photon Map.
“base_color” (Base Color) – определяет базовый диффузный цвет материала.
Шейдер с различными значениями базового (диффузного) цвета.
“edge_color” (Edge Color) - это цвет, видимый на углах с глянцевыми отражениями (т.е. краях), которые, как правило, появляются гораздо темнее. Для металлизированных красок, которые обладают большой глубиной, например на спортивных автомобилях данный эффект имеет тенденцию проявляться почти черным.
Пример визуализации шейдера с различными значениями Edge Color.
“edge_color_bias” (Edge Color Bias) – определяет спад цвета по направлению к краю. Рекомендуемый диапазон находится в пределах от 0.0 до 10.0, где при значении 0.0, эффект не проявляется, а при высоких значениях делают край области уже, более низкие значения делают ее шире.
Пример визуализации шейдера с различными значениями Edge Color Bias. Чем выше значение, тем больше распространяется цвет, определенный в Edge Color.
“lit_color“ (Lit Color) – цвет, видимый в области поверхности подсвеченной источником света.
Пример визуализации шейдера с различными значениями Lit Color.
“lit_color_bias” (Lit Color Bias) – определяет значение спада цвета по направлению к освещению. Рекомендуемый диапазон находится в пределах от 0.0 до 10.0, при значении 0.0,
эффект не будет проявляться. Высокие значения, делают область цвета меньше \ уже, низкие, наоборот делают область больше \ шире.
Пример визуализации шейдера с различными значениями Lit Color Bias.
“diffuse_weight” (Diffuse Weight) – контролирует общий вклад диффузного цвета.
Пример визуализации шейдера с различными значениями Diffuse Weight.
“diffuse_bias” (Diffuse Bias) – модифицирует спад диффузного затенения. Наиболее оптимальный диапазон в пределах от 0.5 до 2.0, где 1.0 представляет стандартное затенение по Ламберту, большое значение увеличивает вклад диффузного цвета от освещения, меньше значения реализуют плоское диффузное затенение.
Пример визуализации шейдера с различными значениями Diffuse Bias.
“irradiance_weight” (Irradiance Weight) – влияние непрямого освещения (фотонных карт или Final Gather) на поверхность. Значение, внутри вычисляется делением на число Пи (3.141), например, значение 1.0, стандартно рассчитывается как 1.0/PI (или 1.0/3.141), что составляет примерно 0,318 (округлено).
Пример визуализации шейдера с различными значениями Irradiance Weight.
На заметку. Параметр Irradiance Weight, реализован в интерфейсе Attribute Editor Maya в свитке Advanced Parameters.
В свитке Diffuse Parameters, пользователю предоставляются основные параметры для настройки диффузных свойств шейдера. Но, как и в любом сложном материале, не обойтись только средствами диффузного затенения. Далее, мы рассмотрим свиток Specular Parameters, отвечающий за зеркальные подсветки (блики) в шейдере mi_car_paint_phen.

Свиток Specular Parameters
В свитке Specular Parameters, сосредоточены основные параметры шейдера mi_car_paint_phen, отвечающие за формирование зеркального блика (specular) на освещенной поверхности. Стоит отметить, что шейдер mi_car_paint_phen содержит два слоя зеркальных подсветок, контролируя которые, можно добиться различных визуальных стилей.
“spec” (Spec) – задает цвет прямого зеркального блика (specular highlight).
Пример визуализации шейдера с различными значениями параметра Spec.
“spec_weight” (Spec Weight) – является скалярным множителем вклада зеркальных бликов. Выше значение, блик будет ярче, меньше значение, блик будет менее ярким.
Пример визуализации шейдера с различными значениями параметра Spec Weight.
“spec_exp” (Spec Exp) – определяет экспоненту по методу Фонга.
Пример визуализации шейдера с различными значениями параметра Spec Exp.
“spec_sec” (Spec Sec) – задает цвет вторичного зеркального блика (secondary specular hightlight).
Пример визуализации шейдера с различными значениями параметра Spec Sec.
“spec_sec_weight” (Spec Sec Weight) - является скалярным множителем вклада вторичных зеркальных бликов. Выше значение, блик будет ярче, меньше значение, блик будет менее ярким.
Пример визуализации шейдера с различными значениями параметра Spec Sec Weight.
“spec_sec_exp” (Spec Sec Exp) – определяет экспоненту вторичного зеркального блика по методу Фонга.
Пример визуализации шейдера с различными значениями параметра Spec Sec Exp.
“spec_glazing” (Spec Glazing) – позволяет активировать специальный режим для первичных зеркальных бликов (primary specular highlights) именуемый glazing. Включение данного режима, позволяет добиться гладких и блестящих бликов, это хорошо подходит для спортивных, отполированных автомобилей. Если необходимо добиться потрепанного вида, как будто машина взята со свалки, этот режим стоит отключить. По умолчанию, включено.
Пример визуализации шейдера с включенным и отключенным параметром Spec Glazing.
С помощью параметров свитка Specular, можно с очень высокой точностью настроить блики на поверхности, а разделение на два отдельных слоя, позволяет реализовать разные как по форме, так и по интенсивности блики. Но одной из важных возможностей любого шейдера автомобильной краски, является имитация микроскопических металлических частичек в краске. В mi_car_paint_phen шейдере, данная функция реализована за счет свитка Flake Parameters.

Свиток Flake Parameters
В свитке Flake Parameters, сосредоточены все основные параметры шейдера mi_car_paint_phen, позволяющие контролировать различные свойства металлических частичек в краске. В отличие от шейдера автомобильной краски доступного в системе V-Ray (шейдер VRayCarPaintMtl), шейдер mi_car_paint_phen, реализует эти частицы процедурно, причем, не требуя создания отдельной процедурной текстурной карты в заданном разрешении.
Рассмотрим параметры этого свитка подробнее.
“flake_color” (Flake Color) – определяет цвет (отражение) металлических частиц в краске, по умолчанию белый.
Пример визуализации шейдера, с различным значением параметра Flake Color.
“flake_weight” (Flake Weight) - является скалярным множителем для определённых параметром Flake Color цветов.
Пример визуализации шейдера, с различным значением параметра Flake Weight.
“flake_reflect” (Flake Reflect) – определяет силу трассируемых отражений в частицах, которые позволяют реализовывать блестящие отражения, например, окружение с помощью HDRI. Значение 0.0, исключает возможность визуализации данного эффекта.
Пример визуализации шейдера, с различным значением параметра Flake Reflect.
Данный эффект, как правило, должен проявляться очень тонко, часто используется значение 0,1. Окончательная интенсивность отражений также зависит от Flake Color и Flake Weight.
“flake_exp” (Flake Exp) – задает экспоненту зеркальных бликов формируемых по методу Фонга для металлических частиц.
Пример визуализации шейдера, с различным значением параметра Flake Exp.
“flake_density” (Flake Density) – задает плотность частиц. Используются значения в пределах от 0.1 до 10.0, где более низкие значения задают меньшую плотность частиц, а более высокие значения увеличивают плотность частиц.
Пример визуализации шейдера, с различным значением параметра Flake Density.
Так как частицы по своей природе малы, они могут легко ввести артефакты в визуализируемое изображение, если их визуальная плотность становится значительно меньше, чем пиксель. Если супердискретизация визуализации высока, небольшие частицы также могут потенциально вызвать избыточную дискретизацию и, следовательно, значительно увеличивается время визуализации, так как усреднение избыточной дискретизации существенно сокращает проявление эффекта частиц. Чтобы избежать этого, существует параметр Flake Decay.
“flake_decay” (Flake Decay) – позволяет задать расстояние, на котором влияние частиц снижается. Значение 0.0, отключает спад. Любое положительное значение, требует подбирать flake_weight так, что бы достигать нуля на этом расстоянии.
Пример визуализации шейдера, с различным значением параметра Flake Decay.
Верхняя иллюстрация, демонстрирует визуализацию частиц на различном расстоянии без применения Flake Decay, а иллюстрация ниже, показывает, как влияет данный атрибут на результат, когда значение выше 0.0.
“flake_strength” (Flake Strength) – позволяет задать различие в ориентации частиц. Подходящие значения находятся в диапазоне от 0.0 до 1.0, где 0.0 означает, что все частицы параллельны поверхности, а более высокие значения задают все более и более разнообразную ориентацию частиц.
Пример визуализации шейдера, с различным значением параметра Flake Strength.
“flake_scale” (Flake Scale) – задает размер частиц. Процедурная текстура вычисляется в пространстве объекта, и, следовательно, будет следовать за формой объекта. Имейте в виду, что масштаб частиц находится под влиянием любых преобразований масштаба объекта.
Пример визуализации шейдера, с различным значением параметра Flake Scale.
Как было сказано выше, следует следить за масштабированием модели. На иллюстрации ниже, показано, как будет выглядеть модель с шейдером mi_car_paint_phen, если уменьшить или увеличить ее масштаб.
Влияние масштаба модели на визуализацию металлических частиц в шейдере mi_car_paint_phen.
Не менее важным является слой лака нанесенного на покрытие. В отличие от шейдера автомобильной краски в системе визуализации V-Ray, где за лакированное покрытие отвечают параметры свитка Coat Parameters, в шейдере mi_car_paint_phen, за свойства лакированного покрытия отвечает свиток Reflection Parameters.
До настоящего момента, все примеры были сделаны с параметрами, заданными в этом свитке по умолчанию.

Свиток Reflection Parameters
В свитке Reflection Parameters, собраны все основные атрибуты шейдера для визуализации лакированного покрытия (Coat Layer). В зависимости от того, какой тип краски используется, эффект покрытия лаком может проявляться достаточно сильно или наоборот, обладать большой глянцевитостью.
“reflection_color” (Reflection Color) – устанавливает цвет отражений лакированного слоя, по умолчанию белый. Лак, как правило, отражает более на углах скольжения (краях).
Пример визуализации шейдера, с различными значениями атрибута Reflection Color.
“edge_factor” (Edge Factor) - определяет толщину краев.
Пример визуализации шейдера, с различными значениями атрибута Edge Factor.
“reflection_edge_weight” (Reflection Edge Weight) – контролирует силу отражений на краях (по умолчанию 1.0)
Пример визуализации шейдера, с различными значениями атрибута Reflection Edge Weight.
“reflection_base_weight” (Reflection Base Weight) – определяет силу отражений на углах полигонов (по умолчанию низкий, 0.1 – 0.3).
Пример визуализации шейдера, с различными значениями атрибута Reflection Base Weight.
Опционально, вы можете настроить глянцевые отражения в лакированном слое.
“samples” (Samples) – данный атрибут позволяет указать количество выборок (сэмплов) для глянцевых отражений. По умолчанию, равен 0, что означает отключение расчета глянцевых отражений.
Пример визуализации шейдера, с различными значениями атрибута Samples.
“glossy_spread” (Glossy Spread) – позволяет задать силу глянцевитости, Автомобили, как правило, хорошо отражают, так что это значение должно быть небольшим.
Глянцевые отражения создаются с помощью шейдеров mib_glossy_reflection. Поэтому параметры “max_distance” (Max Distance) (ограничивает распространение лучей отражений) и “single_env_sample” (Single Env Sample) (оптимизация поиска карт окружения) оказывают воздействие на ряд других параметров этого шейдера. Только ряд параметров подвергаются воздействию. Если требуется больше, можно либо построить собственный граф затенения или создать из них собственную вариацию Phenomena шейдера mi_car_paint_phen.
В реальном мире, автомобили покрыты слоем грязи и массой сколов на поверхностях. Особенно в нижней части кузова. Для имитации грязи, в шейдере mi_car_paint_phen предусмотрены атрибуты, расположенные в свитке Dirt Paramters.

Свиток Dirt Parameters
Данный свиток, содержит ряд атрибутов, отвечающих за грязь на покрытии автомобильной краски. Грязь можно создавать как с помощью процедурных текстур, так и различных растровых текстурных карт. Простой диффузный слой грязи, покрывает нижележащий слой краски и слой лака.

“dirt_color” (Dirt Color) – позволяет задать цвет слоя грязи.
“dirt_weight” (Dirt Weight) – сила проявления грязи, которая, вероятно, будет подключена к шейдеру текстуры, что бы получить вариации в грязи по всей поверхности. Если Dirt Weight равен 0.0, слой грязи не будет проявляться.
Пример визуализации шейдера mi_car_paint_phen с добавленным слоем грязи.
Помимо описанных выше свитков, в шейдере mi_car_paint_phen, предусмотрен отдельный свиток расширенных параметров.

Свиток Advanced Parameters
В свитке Advanced Parameters, представлены два специфичных атрибута, отвечающих за взаимодействие шейдера с глобальным освещением (Indirect Illumination) и на его глобальный вклад в визуализацию сцены.

“irradiance_weight” (Irradiance Weight) - влияние непрямого освещения (фотонных карт или Final Gather) на поверхность. Значение, внутри вычисляется делением на число Пи (3.141), например, значение 1.0, стандартно рассчитывается как 1.0/PI (или 1.0/3.141), что составляет примерно 0,318 (округлено). Пример действия данного атрибута, показан выше, в разделе по свитку Diffuse Parameters.
“global_weight” (Global Weight) – глобальный параметр, для единого контроля элементов диффузного цвета, металлических частиц и зеркальных подсветок. Данный атрибут, не оказывает влияние на отражения и слой грязи.
Пример визуализации шейдера, с различными значениями Global Weight.
“mode” - контролирует, какие источники света будут использованы
“lights” - это список инстансов источников света (light instances), используемый для определения источников света.

Итак, в первой части раздела, мы познакомились с шейдером mi_car_paint_phen, однако, библиотека paint шейдеров, предоставляет ряд дополнительных шейдеров. Следующий шейдер данной библиотеки – mi_metallic_paint. В чем его отличие от шейдера mi_car_paint_phen, вы узнаете далее.

Шейдер mi_metallic_paint
Шейдер mi_metallic_paint, используется для облегчения визуализации краски типа металлик. Однако, он работает только с пигментацией и частицами, без реализации отражений лакированного слоя. Для достижения полного эффекта, он должен быть объединен с шейдером отражений, таким как mib_glossy_reflection) через атрибут “base_material” (Base Material). Также можно применить шейдер рельефности для частиц (обычно применяется шейдер mi_bump_flakes).
Пример графа шейдеров, в основе которого лежат mib_glossy_reflection, mi_metallic_paint и mi_bump_flakes.
Чтобы автоматически получить всю эту структуру из связанных элементов, можно использовать готовый Phenomena шейдер mi_car_paint_phen, который также поддерживает имитацию слоя грязи. Шейдер mi_car_paint_phen мы рассмотрели выше, с большим количеством примеров.
Шейдер mi_metallic_paint поддерживает:

  • Диффузные отражения в слое пигмента с возможностью изменения\смещения цвета в связи с позицией наблюдателя, а также от угла падающего света.
  • Зеркальные блики от источников света в металлических частицах
  • Оптические трассируемые отражения в металлических частицах
  • Зеркальные блики от источников света в слое покрытия лаком (с опциональным режимом “glazing”)

Шейдер, на языке .mi (Scene Description Language), декларируется следующим образом:
declare shader
color "mi_metallic_paint" (
    color       "ambient"           default 0 0 0 1,
    color       "base_color"        default 0.8 0.1 0.0 1,
    color       "edge_color"        default 0.0 0.0 0.0,
    scalar      "edge_color_bias"   default 1.0,
    color       "lit_color"         default 0.6 0.0 0.2,
    scalar      "lit_color_bias"    default 8.0,
    scalar      "diffuse_weight"    default 1.0,
    scalar      "diffuse_bias"      default 1.5,
    scalar      "irradiance_weight" default 1.0,
    color       "spec"              default 1 1 1 1,
    scalar      "spec_weight"       default 0.2,
    scalar      "spec_exp"          default 60.0,
    color       "spec_sec"          default 1 1 1 1,
    scalar      "spec_sec_weight"   default 0.3,
    scalar      "spec_sec_exp"      default 25.0,
    boolean     "spec_glazing"      default on,
    color       "flake_color"       default 1.0 1.0 1.0 1,
    scalar      "flake_weight"      default 1.0,
    scalar      "flake_reflect"     default 0.0,
    scalar      "flake_exp"         default 45.0,
    scalar      "flake_decay"       default 0.0,
    shader      "flake_bump",
    scalar      "global_weight"     default 1.0,
    integer     "mode"              default 3,
    array light "lights"
)
version 2
apply material
end declare
Для примера, я создал сцену с применением шейдеров mi_car_paint_phen, mi_metallic_paint и структуры из шейдеров [mib_glossy_reflection + mi_metallic_paint + mi_bump_flakes].
Пример визуализации сцены с применением mi_car_paint_phen, mi_metallic_paint.
Рассмотрим параметры шейдера mi_metallic_paint более подробно. Но стоит заметить, что все эти параметры практически идентичны шейдеру mi_car_paint_phen.

Свиток Diffuse Parameters
“ambient” (Ambient) - является компонентом света окружения. Обратите внимание, что этот параметр трактуется по-разному по отношению к паре параметров ambience\ambient многих других базовых шейдеров, он находится под влиянием других параметров диффузного цвета расположенных ниже, и, следовательно, представляет входящий свет, а не "цвет окружения" объектов.
“base_color” (Base Color) – определяет базовый диффузный цвет материала.
“edge_color” (Edge Color) - это цвет, видимый на углах с глянцевыми отражениями (т.е. краях), которые, как правило, появляются гораздо темнее. Для металлизированных красок, которые обладают большой глубиной, например на спортивных автомобилях данный эффект имеет тенденцию проявляться почти черным.
“edge_color_bias” (Edge Color Bias) – определяет спад цвета по направлению к краю. Рекомендуемый диапазон находится в пределах от 0.0 до 10.0, где при значении 0.0, эффект не проявляется, а при высоких значениях делают край области уже, более низкие значения делают ее шире.
“lit_color“ (Lit Color) – цвет, видимый в области поверхности подсвеченной источником света.
“lit_color_bias” (Lit Color Bias) – определяет значение спада цвета по направлению к освещению. Рекомендуемый диапазон находится в пределах от 0.0 до 10.0, при значении 0.0,
эффект не будет проявляться. Высокие значения, делают область цвета меньше \ уже, низкие, наоборот делают область больше \ шире.
“diffuse_weight” (Diffuse Weight) – контролирует общий вклад диффузного цвета.
“diffuse_bias” (Diffuse Bias) – модифицирует спад диффузного затенения. Наиболее оптимальный диапазон в пределах от 0.5 до 2.0, где 1.0 представляет стандартное затенение по Ламберту, большое значение увеличивает вклад диффузного цвета от освещения, меньше значения реализуют плоское диффузное затенение.
“irradiance_weight” (Irradiance Weight) – влияние непрямого освещения (фотонных карт или Final Gather) на поверхность. Значение, внутри вычисляется делением на число Пи (3.141), например, значение 1.0, стандартно рассчитывается как 1.0/PI (или 1.0/3.141), что составляет примерно 0,318 (округлено).

Свиток Specular Parameters
“spec” (Spec) – задает цвет прямого зеркального блика (specular highlight).
“spec_weight” (Spec Weight) – является скалярным множителем вклада зеркальных бликов. Выше значение, блик будет ярче, меньше значение, блик будет менее ярким.
“spec_exp” (Spec Exp) – определяет экспоненту по методу Фонга.
“spec_sec” (Spec Sec) – задает цвет вторичного зеркального блика (secondary specular hightlight).
“spec_sec_weight” (Spec Sec Weight) - является скалярным множителем вклада вторичных зеркальных бликов. Выше значение, блик будет ярче, меньше значение, блик будет менее ярким.
“spec_sec_exp” (Spec Sec Exp) – определяет экспоненту вторичного зеркального блика по методу Фонга.
“spec_glazing” (Spec Glazing) – позволяет активировать специальный режим для первичных зеркальных бликов (primary specular highlights) именуемый glazing. Включение данного режима, позволяет добиться гладких и блестящих бликов, это хорошо подходит для спортивных, отполированных автомобилей. Если необходимо добиться потрепанного вида, как будто машина взята со свалки, этот режим стоит отключить. По умолчанию, включено.

Свиток Flake Parameters
“flake_color” (Flake Color) – определяет цвет (отражение) металлических частиц в краске, по умолчанию белый.
“flake_weight” (Flake Weight) - является скалярным множителем для определённых параметром Flake Color цветов.
“flake_reflect” (Flake Reflect) – определяет силу трассируемых отражений в частицах, которые позволяют реализовывать блестящие отражения, например, окружение с помощью HDRI. Значение 0.0, исключает возможность визуализации данного эффекта.
Данный эффект, как правило, должен проявляться очень тонко, часто используется значение 0,1. Окончательная интенсивность отражений также зависит от Flake Color и Flake Weight.
“flake_exp” (Flake Exp) – задает экспоненту зеркальных бликов формируемых по методу Фонга для металлических частиц.
“flake_decay” (Flake Decay) – позволяет задать расстояние, на котором влияние частиц снижается. Значение 0.0, отключает спад. Любое положительное значение, требует подбирать flake_weight так, что бы достигать нуля на этом расстоянии.
“flake_bump” (Flake Bump) – фактически использует шейдер рельефности частиц. Для реализации рельефности, разработан шейдер mi_bump_flakes, но может быть использован и любой другой шейдер, который изменяет вектор нормалей (например, mib_passthrough_bump_map).
Шейдер соединенный с “flake_bump” (Flake Bump) может также возвращать цвет, который будет цветом (интенсивностью) частиц, или он может оставить цвет без изменений.

Свиток Advanced Parameters
В свитке Advanced Parameters, представлены два специфичных атрибута, отвечающих за взаимодействие шейдера с глобальным освещением (Indirect Illumination) и на его глобальный вклад в визуализацию сцены.
“global_weight” (Global Weight) – глобальный параметр, для единого контроля элементов диффузного цвета, металлических частиц и зеркальных подсветок. Данный атрибут, не оказывает влияния на отражения и слой грязи.
“mode” - контролирует, какие источники света будут использованы (см. описание ниже)
“lights” - это список инстансов источников света (light instances), используемый для определения источников света.

Как говорилось выше, для имитации частиц, в шейдере mi_metallic_paint, необходимо использовать шейдер mi_bump_flakes. Этот шейдер, предоставляет три атрибута для контроля металлических частиц в шейдере краски металлик.

Шейдер mi_bump_flakes
В интерфейсе Maya, данный шейдер представлен полностью и позволяет добавить к шейдеру mi_mettalic_paint, атрибуты для имитации плотности и степени проявления металлических частиц.
Интерфейс шейдера mi_bump_flakes.
На языке .mi (Scene Description Language), шейдер mi_bump_flakes, декларируется следующим образом:
declare shader "mi_bump_flakes" (
    scalar      "flake_density"     default 0.5,
    scalar      "flake_strength"    default 0.8,
    scalar      "flake_scale"       default 0.2,
)
version 1
apply texture
end declare
Как видите, шейдер содержит всего три атрибута, которые в шейдере mi_car_paint_phen реализованы в свитке Flake Parameters со всеми остальными атрибутами для контроля частиц. Рассмотрим эти параметры еще раз:
“flake_density” (Density) – задает плотность частиц. Используются значения в пределах от 0.1 до 10.0, где более низкие значения задают меньшую плотность частиц, а более высокие значения увеличивают плотность частиц.
“flake_strength” (Strength) – позволяет задать различие в ориентации частиц. Подходящие значения находятся в диапазоне от 0.0 до 1.0, где 0.0 означает, что все частицы параллельны поверхности, а более высокие значения задают все более и более разнообразную ориентацию частиц.
“flake_scale” (Scale) – задает размер частиц. Процедурная текстура вычисляется в пространстве объекта, и, следовательно, будет следовать за формой объекта. Имейте в виду, что масштаб частиц находится под влиянием любых преобразований масштаба объекта.

Стоит заметить, что создание графа из шейдеров mi_metallic_paint, mi_bump_flakes и mib_glossy_reflection, хоть и является более гибким решениям в плане настройки и контроля отдельных элементов, время визуализации с таким графом не значительно, но возрастает, в отличие от применения Phenomena шейдера mi_car_paint_phen. Поэтому, разработчики рекомендуют воспользоваться именно Phenomena шейдером.
И в завершении очередной главы, пришло время поговорить о специфичных реализациях шейдеров mi_car_paint_phen и mi_metallic_paint, для применения вывода по отдельным элементам (пассам).

Шейдеры *_X и *_X_passes
В Autodesk Maya 2009 были добавлены шейдеры с постфиксом (суффиксом) *_X и *_X_passes. К таким шейдерам можно отнести следующие шейдеры из библиотеки “paint”.
- mi_car_paint_phen_X
- mi_car_paint_phen_X_passes
- mi_metallic_paint_X
- mi_metallic_paint_X_passes
Эти шейдеры были добавлены в связи с кардинально измененной моделью выводов отдельных элементов изображения (пассов). И что бы реализовать возможность вывода их с помощью обновлённой системы, были разработаны данные шейдеры. При всей кажущейся сложности, на самом деле все делается очень просто. Данный метод будет пригоден не только для работы с шейдерами библиотеки “paint”, но и с шейдерами mia_material_X и mia_material_X_passes, и, от части, со стандартными шейдерами библиотеки “base”, рассмотренными в предыдущих главах. Тематике вывода отдельных элементов изображения (пассов) в mental ray for Maya я посвящу отдельный пост. Но сейчас, мы рассмотрим этот процесс применительно к шейдерам библиотеки “paint”.
Чтобы выполнить вывод отдельных элементов с использованием шейдеров mi_car_paint_phen_X и mi_metallic_paint_X, необходимо воспользоваться специальным шейдером для вывода – writeToColorBuffer, находящимся в группе шейдеров Miscellaneous в группе шейдеров Mental Ray, расположенной в Hypershade. А для шейдеров mi_car_paint_phen_X_passes и mi_metallic_paint_X_passes, реализована поддержка вывода на прямую, через механизм Passes Rendering, предоставляемый mental ray for Maya.
Однако не все элементы могут быть выведены, с использованием шейдеров *_X и *_X_passes. Выводимые элементы, представлены в списке ниже.

  • mi_car_paint_phen_x_passes
    • Ambient Material Color, Beauty, Diffuse, Direct Irradiance, Indirect, Reflection, Specular
  • mi_metallic_paint_x_passes
    • Ambient Material Color, Beauty, Diffuse, Direct Irradiance, Indirect, Reflection, Specular

Если вы будете использовать шейдеры mi_car_paint_phen_X и mi_metallic_paint_X, то подготовка к выводу проходов выполняется следующим образом.
При применении шейдеров mi_car_paint_phen и mi_metallic_paint, их необходимо сконвертировать в шейдер *_X или *_X_passes. Для этого, выберите шейдер и перейдите в Attribute Editor к свитку Upgrade Shader, и выберите необходимый тип шейдера (*_X или *_X_passes).
Свиток Upgrade Shader в атрибутах шейдера mi_car_paint_phen.
После чего, открыв диалоговое окно Render Settings, перейдите во вкладку Passes. Далее необходимо добавить специальный элемент (пасс) Custom Color. Он нам потребуется для вывода отдельных элементов формируемых шейдером writeToColorBuffer.
Создание элемента Custom Color в диалоговом окне Render Setting.
Здесь стоит заметить, что необходимо добавить столько элементов (пассов) Custom Color, сколько вам необходимо и желательно их переименовать в соответствии с решаемой задачей. Переименовать элемент можно с помощью Attribute Editor, просто два раза кликнув на элементе мышкой. Для тестовой сцены в этом посте, мне потребовались элементы диффузного цвета, непрямого освещения, отражений и зеркальных бликов. После того, как были добавлены элементы, необходимо их объединить с текущим слоем визуализации. Для этого, выделите все элементы и в диалоговом окне Render Settings, воспользуйтесь кнопкой Associate selected passes with current render layer, расположенной между списками Scene Passes и Associated Passes.
Пример подготовленных элементов на основе Custom Color.
Теперь, нам необходимо подключить шейдер mi_car_paint_phen_X или mi_metallic_paint_X к узлам элементов (пассов) Custom Color. Для этого, в Hypershade необходимо добавить шейдер writeToColorBuffer для каждого из созданных элементов (пассов).
Шейдер writeToColorBuffer связанный с элементом Custom Color.
Для создания связи между элементом (пассом) и шейдером writeToColorBuffer, необходимо в параметрах шейдера, выбрать элемент (пасс) в раскрывающемся списке Custom Color Pass. Далее, необходимо связать шейдер mi_car_paint_phen_X или mi_metallic_paint_X с шейдером writeToColorBuffer. Для этого, средней кнопкой мыши, перетащите шейдер *_X на слот Color (в свитке Input) в атрибутах шейдера writeToColorBuffer.
Подключение шейдера *_X к шейдеру writeToColorBuffer.
Далее, в открывшемся диалоговом окне Connection Editor, соедините шейдер *_X с writeToColorBuffer. Так как нам необходимо выводить отдельные элементы (пассы), шейдеры *_X и *_X_passes, содержат дополнительные каналы (атрибуты) вывода. Например, на приведенной выше иллюстрации, выводу подвергся канал diffuse_result. Далее, выбранный канал (атрибут) подключается к каналу color в шейдере writeToColorBuffer.
Пример созданного графа с шейдерами *_X и writeToColorBuffer и элементами Custom Color.
Все эти операции, можно повторить для всех основных шейдеров, используемых в сцене. Как будет закончена подготовка графов и связей с элементами (пассами), можно запустить процесс визуализации. Для этого, воспользуйтесь командой Batch Render, расположенной в меню Render.

На заметку. Рекомендую использовать именование файлов по отдельным элементам (пассам). В диалоговом окне Render Settings, в свитке File Output, в поле File name prefix введите базовое имя слоя (например, имя шота или камеры). Кликните в данном поле правой кнопкой мыши и выберите в раскрывшемся меню пункт Insert pass name . Данный подход позволит вам быстрее найти нужный элемент (пасс) в директории вывода.

Внимание! Рекомендую отключить флажок Alpha Channel (Mask) в диалоговом окне Render Settings, в свитке Renderable Cameras (вкладка Common). Если данный флажок установлен, то итоговый результат визуализации элементов (пассов) может не записаться в файл, а на выходе будет выдан пустой файл с прозрачным каналом.

После того, как будет выполнена визуализация, вы получите все необходимые файлы отдельных элементов (пассов). Данные файлы можно спокойно использовать при дальнейшем композитинге изображения или анимации в стороннем приложении, таком как NUKE, Fusion или After Effects.
Пример отдельных элементов изображения, полученные с помощью шейдеров mi_car_paint_phen_X и writeToColorBuffer.
В отличие от шейдеров с постфиксом (суффиксом) *_X, шейдеры *_X_passes могут напрямую взаимодействовать с системой вывода элементов (пассов) в mental ray for Maya. Для этого, вам потребуется так же, при необходимости, сконвертировать стандартный шейдер mi_car_paint_phen в шейдер *_X_passes, и в диалоговом окне Render Settings, выбираются уже полноценные элементы, такие как Diffuse, Reflection, Specular и другие. При запуске визуализации с помощью Batch Render, результат будет сохранен на жестком диске. Применение шейдеров *_X_passes, позволяет быстрее настроить вывод элементов (пассов) изображения, в отличие от представленного выше подхода с введением отдельного шейдера для буфера кадров.
Еще стоит обратить внимание на то, что в отличие от шейдеров *_X, шейдеры *_X_passes обладают специальным свитком параметров, отвечающим за участие в процессе визуализации элементов (пассов). Свиток Frame Buffer Contribution, предоставляет атрибуты контроля над участием шейдера в формировании элемента (пасса).
Свиток Frame Buffer Contribution в шейдере mi_car_paint_X_passes.
Например, если выставить в атрибуте Write Operation значение 0, визуализация элемента (пасса) выполняться не будет.

На этом, пожалуй, все. В сегодняшнем посте, мы познакомились с шейдерами, входящими в библиотеку шейдеров paint.so и декларируемых в paint.mi.
Шейдеры библиотеки “paint” могут быть применены не только в визуализации автомобилей. Благодаря гибкой настройке и большому количеству различных атрибутов, их можно применить в визуализации многих материалов, в основе которых лежит металлическое покрытие.
В следующем посте, мы детально рассмотрим шейдеры mia_material, mia_material_X и mia_material_X_passes, входящие в библиотеку “architectural”. Пользователям 3ds Max, данные шейдеры известны как Arch&Design Material, но их реализация в интерфейсе Maya незначительно, но отличается от реализации в 3ds Max.

До скорой встречи, ваш dimson3d! :)

Опубликовано

mental ray Standalone Global Review
- mental ray Standalone | Первое знакомство
- mental ray Standalone | Экспорт данных из 3D приложений
- Доклад с AU 2012 и введение в mental ray Standalone

mental ray 4 Maya | Shaders Guide
- mental ray 4 Maya | Shaders Guide | Введение
- mental ray 4 Maya | Shaders Guide | Основы
- mental ray 4 Maya | Shaders Guide | dgs_material, dielectric_material
- mental ray 4 Maya | Shaders Guide | mib_glossy_reflection
- mental ray 4 Maya | Shaders Guide | mib_glossy_refraction
- mental ray 4 Maya | Shaders Guide | шейдеры mib_illum_*
- mental ray 4 Maya | Shaders Guide | шейдеры transmat и path_material
- mental ray 4 Maya | Shaders Guide | Доступ к скрытым шейдерам библиотеки Production
- mental ray 4 Maya | Shaders Guide | шейдеры mi_car_paint_* и mi_metallic_paint_*

Комментариев нет:

Отправить комментарий