понедельник, 29 июля 2013 г.

mental ray 4 Maya | Shaders Guide | шейдер mia_material | Часть 2

Здравствуйте. В первой части восьмой главы гида по шейдерам mental ray, мы рассмотрели основы, заложенные в шейдер mia_material (*_X, *_X_passes) входящего в библиотеку “architectural.so”. Во второй части, мы продолжим знакомиться с этим шейдером. Как упоминалось ранее, библиотека “architectural.so” содержит шейдеры разработанные для архитектурной и дизайнерской визуализации. В первой части, было сказано, что наиболее важным является совместное применение шейдеров mia_material (*_X, *_X_passes) и модели освещения Physical Sun and Sky, а так же шейдера Portal Light и шейдеров фотометрических источников света. Вторая часть содержит детальное описание всех основных атрибутов шейдера mia_material_X (*_X_passes), представленного в интерфейсе Autodesk Maya.
Внимание! В Autodesk Maya 2014 и Autodesk Maya 2014 Service Pack 1 были реорганизованы шейдеры материалов. Сейчас, шейдеры mia_material_X и mia_material_X_passes являются основными для работы с mental ray for Maya. Классические шейдеры из библиотеки “base.so”, размешены в группе Legacy Materials, также, в данную группу, поместили базовый шейдер mia_material.

Шейдер mia_material_X (*_X_passes) является комплексным шейдером, состоящим из множества взаимосвязанных элементов, которые отвечают за определенные функции и формируют общее затенение.
Если вам интересно, добро пожаловать под кат 8)


Шейдер mia_material_X (*_X_passes)
Шейдер, практически полностью реализован в интерфейсе Autodesk Maya. Все основные атрибуты могут быть настроены в Attribute Editor. Для удобства использования, разработчики разделили шейдер на несколько свитков отвечающих за определенные свойства материала (такие как диффузный цвет, отражения, преломления, анизотропные отражения и другие).
Интерфейс шейдера mia_material_X в диалоговом окне Attribute Editor.

На языке mental ray Scene Description Language, шейдер декларируется следующим образом.
shader "name"                      #значения по умолчанию
  "mia_material"     (
"diffuse_weight" 1.,
"diffuse" 1. 1. 1. 1.,
"diffuse_roughness" 0.,
"reflectivity" 0.,
"refl_color" 1. 1. 1. 1.,
"refl_gloss" 1.,
"refl_gloss_samples" 8,
"refl_interpolate" off,
"refl_hl_only" off,
"refl_is_metal" off,
"transparency" 0.,
"refr_color" 1. 1. 1. 1.,
"refr_gloss" 1.,
"refr_ior" 1.4,
"refr_gloss_samples" 8,
"refr_interpolate" off,
"refr_translucency" off,
"refr_trans_color" 0.7 0.6 0.5 1.,
"refr_trans_weight" 0.5,
"anisotropy" 1.,
"anisotropy_rotation" 0.,
"anisotropy_channel" -1,
"brdf_fresnel" off,
"brdf_0_degree_refl" 0.2,
"brdf_90_degree_refl" 1.,
"brdf_curve" 5.,
"brdf_conserve_energy" on,
"intr_grid_density" 2,
"intr_refl_samples" 2,
"intr_refl_ddist_on" off,
"intr_refl_ddist" 0.,
"intr_refr_samples" 2,
"single_env_sample" off,
"refl_falloff_on" off,
"refl_falloff_dist" 0.,
"refl_falloff_color_on" off,
"refl_falloff_color" 0. 0. 0. 1.,
"refl_depth" 5,
"refl_cutoff" 0.01,
"refr_falloff_on" off,
"refr_falloff_dist" 0.,
"refr_falloff_color_on" off,
"refr_falloff_color" 0. 0. 0. 1.,
"refr_depth" 5,
"refr_cutoff" 0.01,
"indirect_multiplier" 1.,
"fg_quality" 1.,
"fg_quality_w" 1.,
"ao_on" off,
"ao_samples" 16,
"ao_distance" 10.,
"ao_dark" 0.2 0.2 0.2 1.,
"ao_ambient" 0. 0. 0. 1.,
"ao_do_details" on,
"thin_walled" off,
"no_visible_area_hl" on,
"skip_inside_refl" on,
"do_refractive_caustics" off,
"backface_cull" off,
"propagate_alpha" off,
"hl_vs_refl_balance" 1.,
"cutout_opacity" 1.,
"additional_color" 0. 0. 0. 1.,
"no_diffuse_bump" off,
"mode" 4,
"lights" []
[+] bump_mode
[+] overall_bump
[+] standard_bump
[+] multiple_outputs
)

Свиток Diffuse
В свитке Diffuse, сосредоточены основные атрибуты шейдера для управления диффузным цветом материала.
Атрибуты ”diffuse_weight” (Weight) и ”diffuse” (Color) устанавливает желаемый уровень отражения диффузного цвета. Поскольку в основе шейдера лежит метод сохранения энергии, фактический уровень диффузного цвета, зависит от коэффициента отражения и прозрачности, о чем было написано в первой части.
Пример визуализации шейдера mia_material_X с RGB цветом, растровой текстурой и процедурной текстурой.
Пример влияния различных значений “diffuse_weight” на интенсивность диффузного затенения.

Компонента диффузного цвета: использует модель затенения по Орену-Наяру (Oren-Nayar). Когда атрибут “diffuse_roughness” (Roughness) равен 0.0, результат будет идентичен классической модели затенения по Ламберту (Lambertian Shading). Если значение будет выше 0.0, поверхность получит более «порошкообразный» или «припудренный» вид.
Пример влияния атрибута “diffuse_roughness” на диффузное затенение поверхности.

Свиток Reflection
В свитке Reflection, сосредоточены все основные атрибуты шейдера, отвечающие за формирование зеркальных и глянцевых отражений. Стоит отметить, отражения, формируемые шейдером mia_material_X, зависят не только от простого определения вклада отражений, но и от кривой функции BRDF, о чем будет рассказано ниже.

“refl_color” (Color) – позволяет определить цвет отражений. Может быть использовано как простое значение цвета, так и растровая или процедурная текстура.
Пример визуализации шейдера, с различными текстурами назначенными атрибуту ”refl_color”.

“reflectivity” (Reflectivity) — определят уровень отражений, формируемых шейдером.
Уровень отражений, формируемых шейдером при различных значениях атрибута “reflectivity”.

Это максимальное значение, актуальное значение также определяется углом наклона поверхности и выводится из кривой BRDF. Эта кривая (будет рассмотрена ниже в разделе, посвященном свитку BRDF) определяется двумя атрибутами, brdf_0_degree_refl (для поверхностей, обращенных к наблюдателю) и brdf_90_degree_refl (для поверхностей, обращенных перпендикулярно к наблюдателю)
Пример визуализации отражений с различными значениями атрибута brdf_0_degree_refl.

На иллюстрации выше показано, как зависит отражение на поверхности при различных значениях атрибута brdf_0_degree_refl. При этом атрибут “reflectivity” равен 1.0.

  • У объекта слева, значение brdf_0_degree_refl выставлено по умолчанию.
  • У объекта в центре, значение brdf_0_degree_refl равно 0.5
  • У объекта справа, значение brdf_0_degree_refl равно 0.9

Обратите внимание, как сильные отражения автоматически "вычитаются" из оранжевого диффузного цвета. Если этого не произошло, материал станет нереально ярким, и будет нарушать физические законы.
Для имитации полноценных зеркальных отражений, необходимо выравнивать значения brdf_0_degree_refl и brdf_90_degree_refl. Например, выставить значение 1.0.

“refl_gloss” (Glossiness) – данный атрибут позволяет управлять глянцевитостью материала, формируя глянцевые, а не зеркальные отражения. Значение равное 1.0, формирует полноценные зеркальные отражения (как зеркало), значение ближе к 0.0, формирует глянцевые отражения (матовые поверхности, зачищенные металлы и т.п.).
Пример визуализации шейдера, с различными значениями атрибута “refl_gloss”.

“refl_samples” (Samples) – устанавливает максимальное количество лучей (сэмплов), используемых для формирования глянцевых отражений. Высокие значения, визуализируются медленнее, но позволяют получить гладкий результат. Меньшие значения визуализируются быстрее, но создают зернистые глянцевые отражения.
В большинстве случаев, приемлемого результата, можно добиться со значением 32 луча (сэмпла).
Пример визуализации шейдера, с различными значениями “refl_samples”.

Есть две особенности, которые следует учитывать:

  • Если значение “refl_gloss” равно 1,0 будет визуализироваться "идеальное зеркало", в связи с чем, не имеет смысла рассчитывать несколько лучей в данном случае, следовательно, будет вычисляться только одно отражение луча.
  • Если значение “refl_samples” равно 0, отражения будут визуализироваться как "идеальное зеркало" (и будет вычисляться только однократное отражение) независимо от фактического значения “refl_gloss”. Это может быть использовано для повышения производительности при визуализации поверхностей с очень слабыми отражениями. Форма и размер блика, контролируется степенью глянцевитости.

В металлических предметах цвет влияет на отражения, в то время как другие материалы не обладают таким свойством. Например, золотой слиток будет иметь золотистые отражения, в то время как красный стеклянный шар не имеет окрашенных отражений красного цвета. Активация данного эффекта, достигается выбором атрибута “refl_is_metal” (Metal Material).

  • Когда выключено, атрибут “refl_color“ определяет цвет, а атрибут “reflectivity” (вместе с настроенной функцией BRDF) интенсивность и цвет отражений.
  • Когда включено, атрибут “diffuse” определяет цвет отражений, а атрибут “reflectivty” определяет «вес» между диффузными отражениями и глянцевыми (металлическими) отражениями.

Пример визуализации шейдера с применением атрибута “refl_is_metal” (Metal Material).

Изображение слева, показывает действие неметаллических отражений (“refl_is_metal” (Metal Material) отключен). Можно заметить, что в материале четко отражается цвет предметов, цвет материалов не меняется.
На центральном изображении используются металлические отражения (“refl_is_metal” (Metal Material) включен). Теперь цвет отражения зависит от цвета материала. Изображение справа показывает вариант с коэффициентом отражения равным 0,5, создавая связь 50:50 между окрашенными отражениями и диффузными отражениями.
Глянцевые отражения, требуют множества лучей для формирования гладкого результата, однако это сказывается на производительности. Для увеличения производительности, был разработан ряд функций для оптимизации производительности в вычислениях глянцевых отражений.
Первой из таких функций, является интерполяция (Interpolation).
“refl_hl_only” (Highlights Only) – когда данный атрибут активен, алгоритм сглаживания позволяет лучам быть использованными повторно для формирования сглаживания. В результате глянцевые отражения формируются быстрее за счет снижения точности. Интерполяция поясняется более подробно в отдельном разделе данной главы.
Пример визуализации шейдера mia_)material_X с выключенным (слева) и с включенным (справа) атрибутом “refl_hl_only” (Highlights Only).

Для поверхностей с сильными отражениями необходима полноценная трассировка отражений. Однако, для поверхностей с небольшой силой отражений (где они меньше проявляются, и действительно ничего не отражается) для этого можно использовать атрибут, переключатель “refl_hl_only” (Highlights Only).
Если данный атрибут включен, лучи фактических отражений не отслеживаются. Вместо этого визуализируются только «блики», а также мягкие отражения, формируемые с помощью Final Gathering.
Режим “refl_hl_only” не требует дополнительного времени на визуализацию и может дать удивительно убедительные результаты. Хотя данный метод и не может быть полностью убедителен для «основных» объектов в сцене, он может быть хорошо использован для менее существенных элементов сцены (например, на заднем плане). Он, как правило, лучше всего работает на материалах со слабыми отражениями или с глянцевыми (размытыми) отражениями.
На иллюстрации выше, показано, как работает метод интерполяции с помощью ”refl_hl_only”  (Hightlights Only). На верхнем изображении, данная функция отключена, и можно увидеть, как сформированы прямые (зеркальные) и глянцевые отражения. На нижнем изображении показано, как влияет атрибут ”refl_hl_only” (Highlights Only) на формирование отражений.

Свиток Advanced Reflection
Для оптимизации вычислений и управления параметрами отражений, в шейдере mia_material_X предусмотрено несколько дополнительных атрибутов. В интерфейсе Maya, они представлены подсвитком Advanced Reflection (расположенным в свитке Reflection). В данном свитке, сосредоточены данные атрибуты.
"refl_falloff_on" (Use Max Distance) — когда данный атрибут включен шейдер будет учитывать зависимость отражений от расстояния.
”refl_falloff_dist” (Max Distance) - позволяет ограничить отражения до некоторого расстояния и может помочь ускорить визуализацию, а также избежать вытягивания в удаленных объектах на чрезвычайно размытых отражениях.
"refl_falloff_color_on" (Fade To End Color) – когда данный атрибут включен, отражения будут затухать с указанным в атрибуте ”refl_falloff_color” (End Color) цветом или текстурой.
”refl_falloff_color” (End Color) – если данный атрибут включен, отражения будут исчезать с этим цветом. Если он не включен, отражения будут исчезать с цветом окружающей среды. Первый режим может быть полезен для интерьерных сцен, последний для сцен экстерьеров.
Каждый материал может использовать локально установленную максимальную глубину трассировки, это достигается за счет атрибута ”refl_depth” (Max Trace Depth). Когда данная глубина будет достигнута, материал будет вести себя, как если бы был активен атрибут ”refl_hl_only” (Highlights Only), то есть отображались бы только блики и "эмулированные" отражения. Если значение ”refl_depth” (Max Trace Depth) равно нулю, то используется глобально заданная глубина трассировки (Render Settings > Quality Tab > Raytracing).
”refl_cutoff” (Cutoff Threshold) — это порог, при достижении которого отражения отклоняются (не прослеживается). Это относительная величина, если равна 0,01 (по умолчанию), означает, что лучи, которые составляют менее 1, по отношению к результирующему пикселю, игнорируются.
Атрибут ”no_visible_area_hl” (No Highlights For Visible Area Lights) определяет, будут ли видимы блики от площадных источников света (Area Lights).
Окончательным атрибутом оптимизации (включено по умолчанию) является ”skip_inside_refl” (Skip Reflection On Inside). Большинство отражений на внутренних сторонах прозрачных объектов очень слабы, за исключением частных случаев, которые обусловлены происхождением при определенных углах известных как "Полное внутреннее отражение" (ПВО (англ. TIR)). Этот переключатель экономит время визуализации, полностью игнорируя слабые отражения, но вычисляя и не сохраняя ПВО (англ. TIR).

Свиток Refraction
Как говорилось в первой части данной главы, шейдер mia_material_X является полноценным физически корректным шейдером, имеющим в своем арсенале не только возможность визуализации полноценных отражений, но и предоставляет возможности по визуализации преломляющих свойств материалов. В Maya, все основные атрибуты для контроля преломления, находятся в свитке Refraction.

“refr_ior” (Index of Refraction) – определяет индекс преломления (IOR) материала. Который является величиной, как сильно луч света "искривляется" при входе в материал. Как зависит направление света, при входе или выходе из объекта. Шейдер mia_material_X, использует направление нормалей поверхности как основу для определения входа и выхода лучей. Поэтому важно следить за направлением нормалей поверхности во время создания модели. Индекс преломления также может быть использован для определения кривой BRDF, определяя поведение света в классе прозрачных материалов, известных как "диэлектрики".
Пример визуализации шейдера, с различным индексом преломления.

На иллюстрации выше показано, как влияет индекс преломления на свойства материала. Сфера слева, практически невидима, это объясняется тем, что индекс преломления равен 1.0 (что эквивалентно воздуху), мы не получим никаких изменений в отражениях через материал и, следовательно, не видим «грани» или изменения любого другого рода. В то же время, сферы в центре и справа имеют реальные изменения преломления, руководствуясь значением IOR.
Помимо этого, преломления можно контролировать с помощью кривой BRDF, о чем мы поговорим в отдельном разделе данной главы.
”refr_color” (Color) – данный атрибут, определяет цвет преломлений в материале. Может быть использованы как растровые так и процедурные текстурные карты.
Пример визуализации шейдера, с различными значениями атрибута ”refr_color”.

”transparency” (Transparency) – определяет прозрачность материала. В связи с тем, что материалы основаны на методе сохранения энергии, значение, установленное в атрибуте прозрачности это максимальное значение, фактическое значение зависит от коэффициента отражения, а также кривой BRDF.
Пример влияния прозрачности на свойства и внешний вид материала.

”refr_gloss” (Glossiness) – определяет, будет ли материал обладать глянцевыми преломлениями. Контролируя атрибут ”refr_gloss” (Glossiness), вы можете определить насколько резкими или размытыми будут преломления/прозрачность. Атрибут может быть определен значениями от 1.0 (полная прозрачность), до 0.0 (полная диффузная прозрачность).
Визуализация шейдера, с различными значениями атрибута ”refr_gloss”.

"refr_gloss_samples" (Samples) – определяет количество выборок (сэмплов) для формирования глянцевого преломления/прозрачности. Чем выше значение, тем чище будет результат. Обычно, достаточно выборки в 32 луча, для увеличения скорости вычислений, рекомендуется понижать данное значение, для повышения качества необходимо повышать данное значение, но времени, затраченного на визуализацию, потребуется больше.
Шейдер mia_material_X с различными значениями атрибута ”refr_samples”.

Так же, как и с глянцевыми отражениями, глянцевые преломления имеют атрибут ”refr_interpolate”, что позволяет быстро, гладко, но менее точно формировать глянцевую прозрачность. Интерполяция будет детально описана далее в этой главе.

Свиток Advanced Refraction
В свитке Advanced Refraction, находятся атрибуты для дополнительного контроля над свойствами прозрачности и преломления материала.
"refr_falloff_on" (Use Max Distance) - когда данный атрибут включен, шейдер будет учитывать зависимость преломлений от расстояния.
"refr_falloff_dist" (Max Distance) -  ограничивает преломления до некоторого расстояния, которое и ускоряет визуализацию, а также избежать вытягивания в удаленных объектах в чрезвычайно размытые отражения.
"refr_falloff_color_on" (Use Color at Max Distance) – когда данный атрибут включен, преломления будут затухать с указанным в атрибуте ”refr_falloff_color” (End Color) цветом или текстурой.
”refr_falloff_color” (Color at Max Distance) - в отключенном состоянии, прозрачность меняется на черный. При включении она исчезает на заданную глубину. Это является самым физически точным способом имитации тонированного стекла и подобных материалов, так как толщина объекта будет влиять на оттенок.
"refr_depth" (Max |Trace Depth) -  определяет максимальную глубину трассировки. Когда данная глубина будет достигнута, mental ray не будет вычислять преломления. Меньшие значения, позволяют увеличить скорость визуализации, большие значения, позволяют повысить качество визуализации, но при этом, увеличивая время визуализации.
"refr_cutoff" (Cutoff Threshold) - это порог, при котором преломления отклонены (не прослеживается). Это относительная величина, то есть по умолчанию 0,01 означает, что лучи, которые составляют менее 1 по отношению к финальному пикселю игнорируются.
"thin_walled" (Thin Walled) - прозрачные / полупрозрачные поверхности рассматриваются как "тонкие", и свет не преломляется через них. Объекты (например, стекла окна или шторы) должны быть смоделированы с помощью всего одной поверхности, а ориентация нормалей значения не имеет.
”solid” (Solid) - прозрачные / полупрозрачные поверхности рассматриваются как "твердые/плотные", а лучи света преломляются проходя через них. Каждый объект должен иметь надлежащую поверхность с правильной ориентацией нормалей.
“do_refractive_caustics” (Refractive Caustics) – Когда включен (значение 1) метод расчета эффекта каустики, данный атрибут позволяет прозрачным объектам преломлять свет и генерировать эффект каустики.
“do_refractive_caustics” (Transparent Shadow) - в этом режиме (значение 0, выключен) прозрачные объекты используют стандартные прозрачные тени (transparent shadows), независимо от того, активен метод расчета эффекта каустики или нет. Это позволяет свету проходить через прозрачные объекты без преломления, при этом, позволяя формировать каустику другими объектами (если они участвуют в этом процессе).
Визуализация шейлера mia_material_X, с режимами Transparent Shadow и Refractive Caustic. Расчет каустики в сцене включен.

“backface_cull” (Backface Culling) - При включении (1), делает противоположную сторону полигонов полностью невидимым, если смотреть с обратной стороны (но они по-прежнему будут отбрасывать тени, отражать фотоны и т.д.).
“propagate_alpha” (Propagate Alpha) - При включении (1) прозрачности распространяется альфа все, что видно через прозрачный объект, даже если преломленный.
Итак, мы рассмотрели основные атрибуты шейдера mia_material_X, отвечающие за формирование диффузного затенения, отражений и прозрачности. Это основные три слоя, формирующие затенение в создаваемом материале.

Свиток Anisotropy
Данный свиток, предназначен для контроля свойств анизотропных поверхностей, таких как металлы с зачищенной поверхностью или шершавый пластик.
”anisotropy” (Anisotropy) – контролирует направление анизотропных отражений, по умолчанию 1.0. Значения меньше 1.0, формируют отражение вдоль оси U, значения выше 1.0, отражение будет сформировано вдоль оси V.
Влияние различных значений атрибута ”anisotropy” на анизотропные свойства материала.

”anisotropy_rotation” (Rotation) – позволяет выполнить вращение анизотропных отражений. Значение 0.0 не выполняет вращение, значение 1.0 выполняет вращение анизотропных отражений на 360 градусов.
Пример вращения анизотропных отражений на поверхности объекта с помощью контроля атрибута ”anisotropy_rotation”.

На заметку. Когда используется вращение анизотропных отражений ”anisotropy_rotation” (Rotation) будьте внимательны, используемая текстура должна быть применена без дополнительной фильтрации. В противном случае сглаживание пикселей вызовет локальные повороты анизотропии, которые создают артефакты на швах.

Для значений 0 или выше, пространство, которое определяет "направление растяжения" получается из пространства текстуры подключенной к атрибуту ”anisotropy_channel” (Channel).
"anisotropy_channel" (Channel) — пространство координат для определения направления анизотропных отражений. Также, могут быть использованы следующие значения:

  • -1: базовое вращение определяемое системой локальных координат объекта
  • -2: базовое вращение определяемое базисом векторов рельефности
  • -3: базовое вращение определяемое производной поверхности
  • -4: базовое вращение следующее за вектором, размещенным в state>tex до вызова mia_material

Управляя анизотропными отражениями, вы можете придать более реалистичный вид создаваемому материалу (шейдеру). В реальном мире, существует множество самых разнообразных материалов, обладающих различными свойствами отражения и преломления. Большинство из этих материалов, обладают отражениями Френеля (Fresnel Reflections), за формирование которых отвечают атрибуты, расположенные в свитке BRDF.

Свиток BRDF
Как объяснялось в первой части восьмой главы в разделе «BRDF — Как отражения зависят от угла обзора», отражения, в конечном счете, формируются в зависимости от угла обзора.
Углы обзора 0 градусов (зеленые стрелки) и 90 градусов (красные стрелки).

В шейдере mia_material_X, предусмотрено два режима определения кривой функции BRDF.
Первый режим, зависимый от индекса преломления (IOR), активируется с помощью атрибута ”brdf_freshnel” (Use Fresnel Reflection). Отражения зависят от угла обзора, руководствуясь IOR материала. Это известно как отражения Френеля.
Пример визуализации шейдера mia_material_X с режимом ”brdf_freshnel” (Use Fresnel Reflection) и различными значениями ”refr_ior” (index of Refraction).

Второй режим, предоставляет возможность ручного контроля кривой BRDF, когда атрибут ”brdf_freshnel” (Use Fresnel Reflection) отключен (по умолчанию). В этом режиме, атрибут ”brdf_0_degree_refl” (0 degree Refelction) определяет отражение для граней поверхностей направленных по отношению к наблюдателю. Атрибут ”brdf_90_degree_refl” (90 degree Refelction) определяет отражение граней поверхности перпендикулярных по отношению к наблюдателю. Атрибут ”brdf_curve” (BRDF Curve) позволяет задать спад кривой.
Примеры различных кривых BRDF и результат визуализации шейдера. Форма кривой взята из шейдера mia_material_X в Autodesk 3ds Max.

Этот режим, используется для создания гибридных материалов или металлов. Большинство материалов формируют сильные отражения при небольших (скользящих) углах обзора и, следовательно, атрибут ”brdf_90_degree_refl” (90 degree Reflection) может вообще быть на уровне 1.0 (и вместо этого, использует атрибут ”reflectivity” (Reflectivity) для управления общими отражениями).

Свиток Translucency
Полупрозрачность обрабатывается как особый тип прозрачности, т.е. при использовании полупрозрачности сначала определяется некоторый уровень прозрачности и с помощью атрибута "refr_trans_weight" (Weight) определяется, сколько из этого уровня используется для формирования чистой прозрачности и сколько для полупрозрачности.
Пример визуализации шейдера с различными значениями атрибута “refr_trans_w” (Weight)

  • Если "refr_trans_weight" (Weight) составляет 0.0, то ”transparency” (Transparency) используется для формирования полноценной прозрачности материала.
  • Если "refr_trans_weight" (Weight) составляет 0.5, половина ”transparency” (Transparency) используется для прозрачности и половина используется для полупрозрачности.
  • Если "refr_trans_weight" (Weight) равен 1.0, то ”transparency” (Transparency) используется для формирования полупрозрачности и не формирует полноценную прозрачность материала.

Полупрозрачность в первую очередь предназначена для использования в режиме "thin_walled" (Thin Walled) (как на иллюстрации выше), чтобы имитировать такие материалы как ткань штор, рисовая бумага, и другие с аналогичными свойствами. В режиме "thin_walled" (Thin Walled) он просто позволяет выполнять затенение с обратной стороны объекта и проступать тени формируемой объектами расположенными за ним.
Пример визуализации шейдера mia_material_X с полупрозрачностью в режиме “solid”.

Шейдер также работает в режиме “solid” (Solid), но реализация полупрозрачности в mia_material_X максимально упрощена и вычисляет только перенос света от задней стороны объекта к передней, и это не "полноценное" решение для реализации эффекта SSS (подповерхностного рассеивания). Подповерхностное рассеивание, как эффект, может быть сгенерировано с использованием глянцевой прозрачности в сочетании с полупрозрачностью. Но это не является быстрым решением, по сравнению с мощными шейдерами библиотеки “subsurface.so”.
Активация полупрозрачности, выполняется включением атрибута "refr_translucency" (Use Translucency), а цвет полупрозрачного материала, определяется атрибутом "refr_trans_color" (Color). Атрибут "refr_trans_color" (Color), позволяет определить как цвет RGB так и подключить растровую или процедурную текстурную карту.

Свиток Indirect Illumination Options
Как было описано ранее, шейдер mia_material_X использует закон сохранения энергии и тесно взаимосвязан с возможностями mental ray для расчета GI. В интерфейсе шейдера mia_material_X, есть специальный свиток, отвечающий за контроль участия шейдера при вычислениях Final Gathering или Global Illumination.
Атрибут "indirect_multiplier" (FG/GI Multiplayer) контролирует вклад глобального освещения в материал. По умолчанию равен 1.0, значения меньше 1.0 уменьшают вклад GI в материале, значения выше 1.0, будут увеличивать вклад GI, делая материал более ярким.
Пример влияния атрибута "indirect_multiplier" (FG/GI Multiplayer) на вклад глобального освещения в материал.

“fg_quality” (Final Gather Quality) является локальным множителем для выпущенных лучей Final Gather и собранных (абсорбированных) материалом.
Пример влияния атрибута "fg_quality" (Final Gather Quality) на проявление глобального освещения в материале.

Для помощи в отображении текстуры "fg_quality" (Final Gather Quality) существует дополнительный параметр “fg_quality_w” (Final Gather Quality Weight). Когда "fg_quality" (Final Gather Quality) равен 0.0, он находится в режиме формирования исходного (RAW) качества, но при ненулевом значении “fg_quality_w” (Final Gather Quality Weight) является фактическим качеством, получаемым из двух значений, с минимумом 1.0.

Одной из особенностей комплексных шейдеров, является возможность вычисления множества эффектов затенения. Шейдеры mia_material (mia_material_X и mia_material_X_passes), реализуют не только диффузное затенение, зеркальные и глянцевые отражения/прозрачность, но и ряд других эффектов, таких как полупрозрачность и ambient occlusion. Эффект ambient occlusion, реализован в шейдере mia_material (*_X, *_X_passes) в отдельном свитке.

Свиток Ambient Occlusion
В отличие от классического метода визуализации эффекта Ambient Occlusion за счет применения шейдеров mib_amb_occlusion и mib_fast_occlusion, в шейдере mia_material_X реализована возможность визуализации данного эффекта без применения дополнительных шейдеров. Настройки Ambient Occlusion в шейдере представлены рядом простых атрибутов, которые мы и рассмотрим в данном разделе.
Пример визуализации сцены, без эффекта Ambient Occlusion и с таковым, активированным во всех шейдерах mia_material_X.

Стоит отметить, что для выполнения визуализации эффекта Ambient Occlusion, необходимо также включить визуализацию данного эффекта в глобальных параметрах визуализатора. Для этого, откройте диалоговое окно Render Settings и во вкладке Indirect Illumination перейдите к свитку Ambient Occlusion. Установите флажок Ambient Occlusion. При желании, можете задать определённое количество лучей (Rays). Небольшие значения, позволяют выполнять визуализацию быстро, но на выходе получать более шумный эффект AO. Большие значения, позволяют добиться более качественного результата, но при этом, увеличивается время визуализации.
Включение вычисления Ambient Occlusion в диалоговом окне Render Settings.

Если вам необходимо выполнить визуализацию по элементам (проходам), для этого применяйте шейдер mia_material_X (*_X_passes) и в диалоговом окне Render Settings, на вкладке Passes, добавьте элемент Ambient Occlusion. Как это показано на иллюстрации ниже.
Применение прохода Ambient Occlusion для визуализации эффекта AO в отдельный файл.

Атрибуты для настройки эффекта Ambient Occlusion:
“ao_on” (Use Ambient Occlusion) – активизация данного атрибута, включает вычисление Ambient Occlusion с помощью шейдера mia_material_X.
“ao_samples” (Samples) – определяет число лучей (сэмплов) излучаемых для формирования эффекта Ambient Occlusion. Большие значения позволяют получить гладкий результат, жертвуя при этом временем визуализации. Низкие значения позволяют ускорить процесс визуализации, но при этом ухудшается финальный результат (проявляется больше шума). По умолчанию задано значение в 16 лучей (сэмплов), для получения высокого качества, может быть выставлено значение 64 и выше.
“ao_distance” (Distance) – задает радиус, при котором будет вычисляться пересечение лучей с объектами, находящимися в пределах данного радиуса. Небольшие значения реализуют эффект AO только в небольших щелках и деталях, но гораздо быстрее проходит процесс визуализации. Большие значения охватывают больше площади, но визуализация выполняется медленнее.
"ao_dark" (Ambient Shadow Color) – позволяет определить интенсивность цвета теней, формируемых с помощью AO. Он используется в качестве значения множителя для поверхностей участвующих в формировании затенения для AO. На практике это означает: черный цвет сделает АО эффект очень темным, средний серый цвет делает эффект менее заметным (светлее) и т.д. При использовании нового режима "ao_do_details" (Use Detail Distance) = 2, вместо этого он устанавливает "смешивание" между цветом, взятым из материалов с близлежащих объектов и «затемнение». Смешивание вычисляется по следующей формуле:

(1-ao_dark) * (object colors) + black * ao_dark

“ao_ambient” (Ambient Light Color) – позволяет использовать в шейдере «традиционный» AO, т.е. имитирует воображаемый "всегда присутствующий свет от окружения", который после чего он ослабляется эффектом АО для создания теней. В то время как "традиционный эффект АО" обычно используется при визуализации без другого непрямого освещения, он также может быть объединен с существующим отраженным светом. Нужно иметь в виду, что при этом методе "всегда присутствует свет окружения" и по своей сути он нефизический, но, может быть, поможет облегчить визуализацию некоторых сильно затемненных углов.
"ao_do_details" (Use Detail Distance) - как уже упоминалось в первой части, в разделе «Встроенная поддержка Ambient Occlusion». Эффект АО может быть использован для "увеличения детализации" непрямого освещения. Этот режим включается установкой "ao_do_details" (Use Detail Distance) = 1 (в Maya, в раскрывающемся списке, именуется как On). Этот режим используется, для применения коротких расстояний АО преумножая его с вычисленным непрямым освещением (методы Final Gathering или GI/Photons), в результате чего проявляются мелкие детали. Можно также установить "ao_do_details" (Use Detail Distance) = 2 (в Maya, в раскрывающемся списке, именуется как With Color Bleed), что позволяет использовать более сложный режим АО, введенный в mental ray 3.6. Вместо того чтобы вычислять простые пересечения, которые добавляют только «затемнение» с различной степенью, шейдер будет на самом деле учитывать цвет окружающих предметов, и использовать это цвет, а не «затемнение». Поскольку это связано с затенением пересечения каждой из точек, это не так быстро, как режим чистого АО, но оно имеет дополнительный эффект решения с яркими и темными деталями.

Внимание! В шейдере mia_material (*_X, *_X_passes) к сожалению, отсутствует поддержка визуализации Ambient Occlusion c учетом Cutout прозрачности. Выход можно найти за счет применения шейдеров от сторонних разработчиков, я рекомендую воспользоваться обновленными шейдерами Shaders_p (версии 3.3.3 и выше) от нашего соотечественника Павла Ледина. В данную библиотеку, входит шейдер p_MegaTK поддерживающий визуализацию Ambient Occlusion с учетом прозрачности. Непосредственно сам элемент (пасс (Pass)) AO может быть выведен с помощью данного шейдера и использован в дальнейшем при пост-обработке и композитинге.
Еще одна досадная недоработка последнего релиза Maya 2014 – некорректная реализация визуализации Ambient Occlusion с различными значениями атриубта “distance” (Distance), к сожалению, в ряде случаев изменение данного атриубта не приводит к заметным результатам на выводимом элементе (пассе (Pass)). Конечно, как было написано чуть выше, данные проблемы можно решить с помощью шейдера p_MegaTK.

Как видите, шейдер mia_material (*_X, *_X_passes), позволяет визуализировать многие из эффектов затенения, что ранее приходилось реализовывать за счет создания более сложных графов из множества разнообразных шейдеров, в частности, рассмотренных в первых главах гида, шейдеров библиотеки “base.so”.
Мы уже подошли к середине знакомства с шейдером mia_material (*_X, *_X_passes), и нам предстоит уделить внимание техническим параметрам, позволяющим более тонко выполнить настройку шейдера.

Свиток Interpolation
Глянцевые отражения и преломления могут быть интерполированы. Это позволяет увеличить скорость визуализации и получить более гладкий результат.
Интерполяция работает как предварительное вычисление глянцевых отражений в сетке изображения. Количество образцов (сэмплов/лучей), взятых в каждой точке определяется по атрибутам “refl_samples” (Glossiness (Reflection)) или “refr_samples” (Glossiness (Refraction)) как и в случае без интерполяции. Разрешение (размер) сетки устанавливается с помощью атрибута “intr_grid_density” (Grid Density).
Пример визуализации интерполированных отражений с различными значениями “intr_grid_density” (Grid Density).

Тем не менее, интерполяция может привести к появлению артефактов. Так как интерполяция выполняется с использованием сетки небольшого размера (разрешения), детали могут быть утрачены. Так как производится смешивание соседних пикселей, из-за низкого разрешения сетки это может привести к большому сглаживанию. По этой причине интерполяция полезна, в основном на плоских поверхностях. Волнистые, очень детализированные поверхности или поверхности использующие карты рельефности (bump maps) не будут хорошо работать с интерполяцией. Кроме того, поскольку сетка спроецирована в пространстве экрана, не рекомендуется создавать анимацию с движением камеры, так как это может привести к заметной видимости этой сетки.
Допустимые значения для параметра “intr_grid_density” (Grid Density):
  • 0 (2 (double)) - разрешение сетки в два раза больше чем разрешение визуализируемого изображения
  • 1 (1 (same as rendering)) - разрешение сетки аналогично визуализируемому изображению
  • 2 (1/2 (half resolution)) - разрешение сетки в половину разрешения визуализируемого изображения
  • 3 (1/3 (third resolution)) - разрешение сетки в треть разрешения визуализируемого изображения
  • 4 (1/4 (quarter resolution)) - разрешение сетки в четверть разрешения визуализируемого изображения
  • 5 (1/5 (fifth resolution)) - разрешение сетки в 1/5 разрешения визуализируемого изображения
В пределах сетки хранятся и общие для всех точек данные. Низкое разрешение сетки обрабатывается быстрее, но теряется большинство деталей. Отражения и преломления имеют атрибуты “intr_refl_samples” (Reflection Samples) и "intr_refr_samples" (Refraction Samples), которые определяют, сколько хранится в сетке точек (в группе N на N вокруг визуализируемой в настоящий момент точки) ищется для сглаживания глянцевого эффекта. По умолчанию, значение “intr_refl_samples” (Reflection Samples) и "intr_refr_samples" (Refraction Samples) равно 2, а более высокие значения будут "размазывать" глянцевые отражения/преломления, но они будут склонны к появлению чрезмерно размытых артефактов.
Пример визуализации сцены, где степень размытия определяется атрибутом “intr_refl_samples” (Reflection Samples).

Атрибут “intr_refl_ddist” (High Detail Distance) позволяет проследить за лучами для создания более чистых отражений в пределах заданного радиуса. Применение данной возможности становится доступным при включении атрибута "intr_refl_ddist_on" (Use High Detail Distance).
Пример визуализации сцены с применением атрибута “intr_refl_ddist” (High Detail Distance).

На иллюстрации выше, показано как используется интерполяция с различными значениями “intr_refl_ddist” (High Detail Distance). Обратите внимание, что с увеличением значения, детали в отражениях от объектов проявляются все больше и больше.
Разработчики mental ray, предлагают так же использовать небольшой трюк: Установите “refl_samples” (Glossiness) до 0, что делает отражения как будто полностью зеркальными, но использует интерполяцию для ввода размытия в эти "идеальные" отражения (и также возможно использовать “intr_refl_ddist” (High Detail Distance) чтобы соседние участки были менее размытыми). Это очень быстрый способ получения глянцевого отражения.
Атрибут "single_env_sample" (Single Sample from Environment) вычисляет только один образец окружения, даже если прослеживаются несколько лучей в отражениях.
Используется совместно с шейдером mia_envblur, данный шейдер мы рассмотрим в последующих главах гида.
Качество интерполяции преломлений выполняется с помощью “intr_refr_samples” (Refraction Samples), активация интерполяции преломлений выполняется с помощью атрибута “refr_interpolate” (Interpolate Refraction).
Как и любой другой современный шейдер, mia_material (*_X, *_X_passes) позволяет визуализировать эффект рельефности. За это отвечают атрибуты, расположенные в свитках Bump и Advanced.

Свиток Bump
В свитке Bump, находятся атрибуты, отвечающие за формирование рельефности за счет карт текстур и карт нормалей.
Атрибут “bump” позволяют контролировать направление нормалей для создания эффекта рельефности поверхности. Данный атрибут используется, только если новый атрибут “bump_mode” равен нулю (0).
Пример визуализации модели без рельефности и с рельефностью.

Когда атрибут “no_diffuse_bump” (No Diffuse Bump) отключен (off), рельефность применяется ко всем компонентам затенения (diffuse, highlights, reflections, refractions…). Если данный атрибут включен (on), рельефность будет применена ко всем компонентам, кроме диффузного затенения. Это означает, рельефность будет видна в отражениях, бликах, и т.д., но диффузное затенение не будет отображать никакую рельефность. Это как если бы материал поверхности обладал гладким диффузным слоем, но сверху его покрывал неровный слой лака.
В mia_material_X также есть три атрибута, связанных с отображением рельефности: два канала ввода для векторов рельефности, “overall_bump” (Overall Bump) и “standard_bump” (Standard Bump), и атрибут “bump_mode” (Bump Mode) определяющий пространство координат для данных векторов. Шейдеры помещаются в канал “overall_bump” (Overall Bump) или “standard_bump” (Standard Bump) из которых возвращается вектор нормалей, а также для доступных шейдеров изменяющих вектор нормалей и возвращающих (0, 0, 0).
Атрибут “overall_bump” (Overall Bump) определяет общую рельефность, которая всегда применяется к диффузной и зеркальной составляющим, независимо от установки “no_diffuse_bump” (No Diffuse Bump). Атрибут “standard_bump” (Standard Bump) является эквивалентом старого атрибута “bump”, где он применяется глобально, когда “no_diffuse_bump” (No Diffuse Bump) выключен, и только к слоям Specular / Reflection, когда “no_diffuse_bump” (No Diffuse Bump) включен. Тем не менее, “standard_bump” (Standard Bump) добавляется поверх результата получаемого с помощью “overall_bump” (Overall Bump).
Если предполагается использовать шейдер mia_roundcorners, рекомендуется его поместить в “overall_bump” (Overall Bump) остальные шейдеры устанавливаются в “standard_bump” (Standard Bump). Так, эффект закругленных углов будет применяться к диффузной и зеркальной компонентам, независимо от состояния атрибута “no_diffuse_bump” (No Diffuse Bump).
Атрибут “bump_mode” (Bump Mode) определяет пространство координат для векторов, и являются ли они аддитивными или нет. Следующие значения основные:
  • 0 - режим совместимости. Устанавливает поддержку классической рельефности (old bump) используемой при связи шейдеров с атрибутами “overall_bump” (Overall Bump) и “standard_bump” (Standard Bump).
  • 1 - режим "add" в пространстве "internal"
  • 2 - режим "add" в мировом пространстве
  • 3 - режим "add" в пространстве объекта
  • 4 - режим "add" в пространстве камеры
  • 5 - режим "set" в пространстве "internal"
  • 6 - режим "set" в мировом пространстве
  • 7 - режим "set" в пространстве объекта
  • 8 - режим "set" в пространстве камеры
В Autodesk Maya, в атрибуте “bump_mode” (Bump Mode) по умолчанию, выставлено значение 5.
Режим “add” означает, что вектор должен содержать изменения нормалей, то есть изменение, которое "добавляется" к текущим нормалям. В то время как режим "set" означает, что фактические нормали заменяются входящим вектором, интерпретируемым в вышеупомянутом пространстве координат.
Эта новая схема делает реализацию рельефности (bump mapping) в mia_material_X совместимой и лучше интегрированными в mental ray, а также позволяет реализовывать закругленные углы, которые должны применяться, даже если активен “no_diffuse_bump” (No Diffuse Bump).
Итак, мы подобрались к финальным двум свиткам с основными атрибутами шейдера mia_material_X. В заключение восьмой главы, мы рассмотрим атрибуты свитков Advanced и Upgrade Shader.

Свиток Advanced
Свиток Advanced, содержит атрибуты, позволяющие выполнять контроль таких свойств, как баланс зеркальных подсветок (Specular), прозрачность без учета преломлений, основанная на картах текстур (Cutout Opacity) и атрибут дополнительного цвета (Additional Color).
Помимо этого, данный свиток предлагает два атрибута отвечающие за эффект рельефности, такие как “bump_mode” (Bump Mode) и “bump” (mental ray Bump), рассмотренные в предыдущем подразделе, свитка Bump.
Атрибут “hl_vs_refl_balance” (Specular Balance) определяет относительную интенсивность «бликов» к отражениям. По умолчанию 1.0.
Пример визуализации шейдера, с различными значениями атрибута “hl_vs_refl_balance” (Specular Balance).

В первой части говорилось, что для формирования прозрачности, в шейдере mia_material_X, предусмотрено два режима. Первый физически корректный, использующий свойства преломления материала. Второй режим, не является физически корректным, и формирует прозрачность без учета преломления материала. Данный режим именуется как Cutout Opacity. В шейдере за этот режим отвечает атрибут “cutout_opacity” (Cutout Opacity).
Пример визуализации шейдера со стандартной прозрачностью и с прозрачностью, формируемой с помощью “cutout_opacity” (Cutout Opacity).

Еще один дополнительный атрибут – “additional_color” (Additional Color). Данный атрибут позволяет добавить дополнительный цвет к общему затенению. В качестве дополнительного цвета, может выступать как обычный RGB цвет, так и растровая или процедурная текстура.
Пример визуализации шейдера с активным “additional_color” (Additional Color)

Контролируя атрибуты в свитке Advanced, вы можете придать создаваемому материалу необходимые свойства. Однако остается еще несколько полезных и в ряде случаев важных атрибутов – преобразование шейдеров mia_material_* в версии mia_material_X и mia_material_X_passes.

Свиток Upgrade Shader
Свиток Upgrade Shader, доступен только в шейдерах mia_material и mia_material_X, с помощью данного свитка, вы можете выполнить преобразование шейдера mia_material в одну из вариаций, разработанных специально для многопроходной визуализации. После преобразования шейдера mia_material в шейдеры версий *_X и *_X_passes, вы сможете полноценно задействовать их при визуализации изображений по отдельным элементам – Multiple Outputs.
Свиток Upgrade Shader в шейдерах mia_material и mia_material_X.

На заметку. Пользователи Autodesk 3ds Max, знакомы с шейдерами mia_material благодаря реализации их в виде так называемого Arch & Design материала. Однако, внутри данного материала, заложен шейдер mia_material_X, это связано с тем, что необходимо выполнять вывод данных для множества отдельных элементов (Render Elements) и в отличие от Autodesk Maya, нет отдельного параметра (атрибута) именуемого Multiple Outputs.

Стоит отметить одну особенность шейдера mia_material_X. В свитке Extra Attributes, есть несколько дополнительных атрибутов, которые не описаны в документации как по Autodesk Maya, так и по самому mental ray. На просторах сети, информации по данным атрибутам очень мало. Я постараюсь дать свое собственное описание данным атрибутам.

Свиток Extra Attributes в шейдере mia_material_X
Атрибуты в свитке Extra Attributes, позволяют реализовать дополнительный слой отражений, именуемый Coating Layer (аналогично VRayCarPaintMtl). В отличие от отражений, лежащих в основе шейдера mia_material (*_X и *_X_passes), данный слой накладывается поверх общего затенения и работает независимо от слоев Diffuse, Reflection, Refraction и т.п.
Интерфейс свитка Extra Attributes в шейдере mia_material_X.

Рассмотрим данные атрибуты по порядку.
“refl_base" (Refl Base) – определяет силу проявления Coating Layer (по умолчанию 0.0).
Пример влияния “refl_base" (Refl Base) на силу проявления Coating Layer.

“refl_base_color” (Refl Base Color) – с помощью данного атрибута, вы можете задать определённый цвет или текстурную карту для Coating Layer.
“refl_base_gloss” (Refl Base Gloss) – определяет силу глянцевитости слоя. При значениях меньше 1.0, слой будет формировать глянцевые отражения.
Пример визуализации шейдера с различными значениями “refl_base_gloss” (Refl Base Gloss).

“refl_base_gloss_samples” (Refl Base Gloss Samples) – позволяет задать количество лучей для формирования гладкого глянцевого эффекта. Как и в случае со стандартными глянцевыми отражениями, чем выше значение, тем чище будет результат.
Пример визуализации шейдера с различными значениями “refl_base_gloss_samples” (Refl Base Gloss Samples).

Атрибут “refl_base_bumpX” (Refl Base Bump) отвечает за формирование эффекта рельефности в Coating Layer. К данному атрибуту, можно подключить как стандартные шейдеры mental ray, так и шейдеры растровых или процедурных текстур.
Мы рассмотрели все основные атрибуты шйдера mia_material_X, представленные в реализации для Autodesk Maya. Остается только один раздел, посвященный выводу отдельных элементов (проходов (passes)) для последующего композитинга.

Многопроходная визуализация (Multiple Output)
Шейдер mia_material_X (*_X_passes), рассматриваемый в этой главе, подразумевает применение его не только для финального вывода изображений, но и вывода отдельных элементов (проходов (passes)) для последующего композитинга в стороннем приложении, таком как Autodesk Composite, Autodesk Smoke, The Foundry NUKE, Eyeon Fusion, Adobe After Effects или Adobe Photoshop.
Рассмотрим реализацию вывода отдельных элементов с помощью mia_material_X в Autodesk Maya.
Большинство выводимых элементов следуют примеру xxx_result, xxx_raw и xxx_level. «result» является заключительным вкладом, «raw» является не отмасштабированным вкладом, и "level" является масштабом вклада в финальное изображение. "level" зачастую связан с входным параметром (или их комбинацией), и модифицируется для выполнения функции энергосбережения материала.
Пример элементов reflection_raw и reflection_level, объединенных для получения reflection_result.

Формирование элемента “result” может быть представлено следующей формулой:

xxx_result = xxx_raw * xxx_level

Поэтому выводимые данные содержат некоторую избыточность, если необходимо получить “текущие отражения” (“current reflections”) в отдельном канале, используйте refl_result. Но если необходимо получить больше контроля над силой отражений в процессе пост-продакшн, можно вместо этого использовать refl_raw и refl_level, выполняя умножение их в решении для композитинга перед добавлением их к окончательному результату.
Однако стоит помнить, что mia_material_X намеренно сэмплирует отражения, которые имеют очень низкий уровень на конкретном этапе визуализации с низким качеством (для производительности), тем самым следует избегать больших изменений в интенсивности отражений в процессе композитинга.
При создании элементов, необходимо учитывать то, какие данные могут быть выведены с помощью шейдера mia_material_X.

Список поддерживаемых элементов вывода
result это основной проход, получаемый за счет смешивания всех элементов изображения, так называемый “beauty” pass. Он идентичен единичному выводу из mia_material. Если параметр "safety" в multiple_outputs выключен, никакие другие элементы, кроме этого не будут выводиться и наоборот, если “safety” включен, все элементы кроме result будут выводиться.
  • diffuse_result – результирующий элемент диффузного цвета, включающий в себя освещение и текстуры.
  • diffuse_raw – только диффузное освещение, без текстур.
  • diffuse_level – диффузный цвет текстур, скорректированный за счет сохранения энергии.
  • spec_result – результирующий элемент зеркальных подсветок (specular).
  • spec_raw – полноценный элемент зеркальных подсветок, без спада.
  • spec_level – уровень зеркальных подсветок, аналогичен refl_level если на входе, параметр hl_vs_refl_balance равен 1.0.
  • refl_result – результирующий элемент отражений.
  • refl_raw – элемент отражений с полной интенсивностью.
  • refl_level – актуальные отражения, включающие цвет отражений и спад по кривой BRDF (или эффект Френеля).
  • refr_result – результирующие элемент преломлений (прозрачности).
  • refr_raw – элемент прозрачности с полной интенсивностью.
  • refr_level – элемент актуальной прозрачности, который был скорректирован за счет сохранения энергии.
  • tran_result – результирующий элемент полупрозрачности.
  • tran_raw – элемент полупрозрачности с полной интенсивностью.
  • tran_level – актуальный уровень полупрозрачности, который скорректирован за счет сохранения энергии.
  • indirect_result – это результирующий элемент непрямого освещения, включающий эффект ambient occlusion и преумноженный диффузный цвет.
  • indirect_raw – элемент непрямого освещения с полной интенсивностью.
  • add_result – прямой проход для параметра add_color
  • opacity_result – содержит окончательный вклад любого фона за объектом как входной результат cutout_opacity составляющего менее 1.0.
  • opacity_raw – содержит фон без масштабирования непрозрачности. Данные элементы, будут черными если cutout_opacity равен 1.0, поскольку никакие фактические лучи не прослеживаются в процессе формирования прозрачности.
  • opacity – элемент содержащий информацию о непрозрачности в текущий момент.
Необходимо соблюдать осторожность, если непрозрачность равна нулю, это означает, что материал сформирован вообще без затенения и ни один из других элементов не будет содержать любые значения на всех элементах!
Пример различных элементов выведенных в элементы level, raw и result.

В Autodesk Maya, по умолчанию реализован вывод проходов типа xxx_result, что на самом деле далеко не всегда может привести к корректному результату. Это можно объяснить тем, что при смешивании нескольких материалов используется метод преумножения, а это значительно увеличивает яркость выводимого прохода. Для решения данной проблемы, можно воспользоваться распределением выводимых элементов по типу xxx_raw и xxx_level. Также может быть полезным разделение каждого из созданных шейдеров по отдельным пассам. Благодаря такому подходу, можно получить значительно больший контроль над всеми элементами изображения на стадии композитинга.
Граф шейдеров mia_material_X (*_X_passes) и шейдеров вывода WriteToColorBuffer подключенных к отдельному элементу Custom Color.

Рассмотрим небольшой пример вывода элемента xxx_result на основе шейдеров mental ray и системы вывода элементов в mental ray for Maya. На иллюстрации выше, показан граф, который сформирован из узлов mia_material_X (*_X_passes) (A), шейдера WriteToColorBuffer (B) и отдельного элемента Custom Color (D).
Отдельно была создана общая группа шейдеров (Assembly) (C) для более комфортной работы.
Для формирования прохода diffuse_result, шейдер mia_material_X (A) подключён к узлу WriteToColorBuffer (B) с помощью трех атрибутов:
  • diffuse_result_R -> Color R
  • diffuse_result_G -> Color G
  • diffuse_result_B -> Color B
Данные о диффузном цвете поступают за счет связи данных шейдеров. Непосредственно сам шейдер WriteToColorBuffer (B) связан с узлом отдельного прохода – Custom Color (D).
Связь шейдера WriteToColorBuffer с отдельным пассом Custom Color, отвечающим за вывод прохода diffuse_raw.

Обратите внимание на атрибуты Custom Color Pass и Write Operation. Данные атрибуты определяют то, с каким элементом будет связан шейдер WriteToColorBuffer (обычно, для этого создается элемент Custom Color) и как будет выполнено смешивание данных полученных от нескольких шейдеров. Обычно, по умолчанию используется режим Add в атрибуте Write Operation. Это и приводит к чрезмерной яркости выводимого элемента.
Атрибуты элемента Custom Color, отвечающего за вывод элемента diffuse_result.

Вывод элементов, также требует настройки ряда атрибутов. Разработчики mental ray, рекомендуют выполнять вывод элементов в форматы со следующей глубиной цвета и типом данных.

Тип элемента  | Глубина цвета \ Тип данных буфера  | Формат файла
xxx_result Pass  |  8-bit or 16-bit \ Integer or Float             | TIF, TGA, PSD, OpenEXR
xxx_raw Pass    |  32-bit \ Float                                          | TIF, OpenEXR, HDR
xxx_level Pass   |  8-bit or 16-bit \ Integer or Float              | TIF, TGA, PSD, OpenEXR

Согласно представленной выше таблице, вывод данных raw требует сохранения в формат с плавающей запятой или в формат с высоким динамическим диапазоном. Вывод данных level, выполняется в диапазоне от 0.0 – 1.0, что не требует применения форматов с плавающей запятой.
Рассмотрим ряд формул для смешивания нескольких элементов на этапе композитинга. Учитывая вывод большого количества разнообразных данных об изображении, существует несколько путей получения финального изображения на этапе композитинга.
Если вы планируете использовать элементы типа result, следует учесть, что на этапе композитинга вы сможете выполнять только незначительные правки в финальном результате.
Однако, учитывая то, что данный тип элементов не создает много файлов, и легче в применении, он отлично подходит при композитинге без применения данных с плавающей запятой.

Beauty = diffuse_result + indirect_result + spec_result + refl_result + refr_result + tran_result + add_result

В то же время, вы имеете возможность комплексного применения элементов типы raw и level, которые предоставляют гораздо больше контроля на этапе композитинга.
Следует помнить, что raw данные выводятся в формат с плавающей запятой (floating point), а данные level, выводятся в стандартный формат изображений (без плавающей запятой).
Пример «формулы» смешивания различных элементов raw и level:

Beauty = diffuse_level * (diffuse_raw + (indirect_raw * ao_raw)) + 
                spec_level * spec_raw +
                refl_level * refl_raw +
                refr_level * refr_raw +
                tran_level * tran_raw +
                add_result

Стоит помнить, что данное уравнение содержит перемножение и отложенное перемножение на этапе процесса визуализации, что является ложным после получения фильтрации индивидуальными сэмплами. Это объясняется фундаментальными математическими ограничениями, которые могут быть видимы как артефакты на границах объектов, или в различных частях изображения со значениями альфа канала меньше 1.0.
Ни одна из этих проблем не будет проявляться, если математика применяется на уровне основных выборок (сэмплов) (путем направления вывода в другие части дерева затенения и выполнения математических операций на них).
Рассмотрим небольшой пример визуализации отдельных пассов изображения и последующий композитинг с помощью Adobe After Effects. В данном примере, я сделал вывод шейдеров mia_material_X_passes в несколько отдельных пассов. Но учитывая ряд особенностей вывода пасса xxx_result, я сделал вывод данных пассов для каждого из материалов.

Пример графа шейдеров записи данных в буфер кадров и отдельных проходов для каждого из шейдеров mia_material_X_passes.

На приведенной выше иллюстрации показан граф для двух шейдеров mia_material_X_passes (A). Каждый шейдер связан с шейдерами WriteToColorBuffer (B), отвечающими за запись цвета в буфер кадров. Соответственно, каждый из шейдеров WriteToColorBuffer, связан с отдельным проходом (C) для определенного элемента изображения (diffuse, reflection, specular, ambient occlusion и др.).
После визуализации, все элементы были сохранены в отдельные файлы формата OpenEXR (16 и 32-bit).
В Adobe After Effects, согласно формуле, приведенной выше, была создана композиция из полученных элементов. Следует отметить, что для формулы использующей умножение, лучше воспользоваться вложенными композициями и далее их смешивать с помощью режимов смешивания add, screen, lighten, multiply и других.
Пример созданной из различных элементов композиции в Adobe After Effects.

На иллюстрации выше показан граф композиции, порядок слоев с вложенными композициями и результат. Отмечу, что благодаря возможности полного контроля каждого из элементов, вы можете контролировать их вклад в общую композицию с помощью параметра Opacity. В Adobe After Effects, его можно вызвать простым нажатием клавиши “t” на панели Timeline.
Помимо этого, аналогичный метод может быть спокойно использован и в Adobe Photoshop, только вместо вложенных композиций, можно использовать папки со слоями, предусмотренные в панели Layers.
Как видите, вывод в отдельные элементы (пассы (Passes)), позволяет реализовать полноценный контроль над изображением, внедряя различные эффекты и фильтры, вы получаете возможность независимо менять цвет не только диффузного затенения, но и зеркальных подсветок независимо для каждого из источников света. А в процессе создания анимации, удастся лучше выполнить совмещение с отснятым в реальном мире материалом.

Заключение
Начиная с Autodesk Maya 2009, разработчики программы решили упростить пользователю работу с различными шейдерами, оставив доступными классические шейдеры (библиотека base.so), и интегрировав шейдеры библиотеки architectural.so. С того момента, прошло около четырех лет, и начиная с версии 2014, шейдеры mia_material (*_X, *_X_passes) являются основополагающими в работе над материалами и освещением. Заодно, благодаря этому, пользователям стало значительно легче переходить с 3ds Max на Maya и наоборот, так как шейдеры библиотеки architectural являются универсальными для обоих пакетов. Также можно сказать о mental ray для Softimage, где реализованы аналогичные шейдеры.

На заметку! Если вы являетесь пользователем Autodesk 3ds Max / Autodesk 3ds Max Design, я настоятельно рекомендую приобрести и использовать как настольный справочник книгу «mental ray / iray. Мастерство визуализации в Autodesk 3ds Max» (http://mentalraybook.pro/), написанную моими коллегами из Сообщества пользователей AutodeskАндреем Плаксиным  и Алексеем Лобановым. В книге максимально подробно рассмотрены возможности шейдера mia_material_X, реализованного в интерфейсе Autodesk 3ds Max под названием Arch & Design Material. И да, книга есть как в Ч/Б варианте, так и в полноцветном и твердой обложке.

Помимо этого, совместно с шейдерами mia_material (*_X, *_X_passes) рекомендуется использовать новый метод выборки (сэмплинга) – Unified Sampling, появившийся в Autodesk Maya 2014. Благодаря данному методу выборки (сэмплинга) удастся увеличить скорость визуализации сцен, в которых используется шейдер mia_material (*_X, *_X_passes).
На этом, пожалуй, все, глава, посвященная шейдерам mia_material (*_X, *_X_passes), является самой большой из всех глав данного гида. Следующая глава, будет посвящена шейдерам библиотеки “subsurface.so”, отвечающей за визуализацию эффектов подповерхностного рассеивания. К данной библиотеке относятся шейдеры с префиксом misss_*.

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

Благодарности
Отдельно хочется поблагодарить компанию FORSITE, за представленное для подготовки иллюстраций и визуализации оборудование. Высокопроизводительную рабочую станцию на базе процессора Intel Xeon и GPU NVIDIA Quadro на архитектуре NVIDIA Kepler.
По сути, для современного CG художника-визуализатора необходима высокопроизводительная система, с производительными CPU, большими объемами памяти и высокопроизводительными GPU. Любой современный движок визуализации, такой как mental ray от компании NVIDIA ARC (ex. mental images) поддерживает многоядерные процессоры и способен задействовать их возможности на 100%. Лично я рекомендую для данных целей приобретать рабочие станции с двумя процессорами. Благодаря этому, можно корректно распределить вычисления между доступными ядрами и обеспечить высокую производительность в двух и более одновременно исполняемых приложениях.

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

mental ray Standalone Global Review


mental ray 4 Maya | Shaders Guide

1 комментарий:

  1. Спасибо за столь подробное описание данного шейдера.

    ОтветитьУдалить