среда, 22 августа 2012 г.

mental ray 4 Maya | Shaders Guide | mib_glossy_refraction


Шейдер mib_glossy_refraction

Этот шейдер очень похож на mib_glossy_reflection, но имеет несколько отличий. Поскольку речь идет о преломлении, он моделирует "глубину материала", а не отражение окружающей среды.
Шейдер mib_glossy_refraction расположен рядом с шейдером mib_glossy_reflection в группе шейдеров Material диалогового окна Hypershade.
В отличие от современных сложных шейдеров, этот шейдер нацелен на реализацию преломляющих свойств поверхности и управление ими. Он работает в связке с шейдерами затенения поверхности, такими как mib_illum_phong и др. а также шейдерами фотонов и теней.

Описание шейдера в формате .mi:
color "mib_glossy_refraction" (
    shader          "top_material",
    shader          "deep_material",
    shader          "back_material",
    boolean         "render_reverse_of_back_material",
    color           "refraction_color",
    scalar          "max_distance",
    scalar          "falloff"                default 2.0,
    scalar          "refraction_base_weight" default 1.0,
    scalar          "refraction_edge_weight" default 0.2,
    scalar          "edge_factor"            default 5.0,
    scalar          "ior"                    default 1.0,
    integer         "samples"                default 16,
    scalar          "u_spread"               default 0.5,
    scalar          "v_spread"               default 0.5,
    vector          "u_axis",
    vector          "v_axis",
    scalar          "dispersion"             default 0.0,
    array color     "spectrum"
)
apply material, texture
version 2

Шейдер mib_glossy_refraction очень просто декларируется в файле, экспортируемом в формат .mi. В Autodesk Maya, этот шейдер представлен полностью, и все параметры его реализованы в интерфейсе программы.
Реализация шейдера mib_glossy_refraction в интерфейсе Attribute Editor.
Шейдер подключается к Shading Group через атрибут Material Shader.

Давайте рассмотрим назначение параметров шейдера mib_glossy_refraction. Я буду указывать название из описания шейдера в формате .mi, а в скобках будет дано название в интерфейсе Maya.
top_material (Top Material) - это характеристики поверхности самого верхнего слоя. Аналогичны base_material в mib_glossy_reflection, просто добавляется к основному шейдеру.. Для примера используйте mib_illum_phong с настроенным параметром зеркальности и совсем крохотным значением диффузного цвета. Обычно, для диффузного цвета можно использовать темно-темно серый цвет, практически близкий к черному или же темный цвет другого оттенка.
deep_material (Deep Material) - используется, только если значение max_distance отличается от нуля. Это поверхностные характеристики «внутренней» части объекта, в которой цвет и преломления исчезают, как только они достигают значения указанного в max_distance. В то время как цвет все еще рассчитывается на поверхности, она будет "выглядеть" как будто находится внутри преломляющего объекта. Для интересного эффекта и псевдо-объемного моделирования можно предложить использовать шейдеры misss_fast_* (шейдеры подповерхностного рассеивания). Стоит отметить, что основные принципы шейдера mib_glossy_refraction, заложены в ряде современных шейдеров, таких как misss_fast_* и mia_material_* но со значительными усовершенствованиями и оптимизацией под современные алгоритмы.
Пример применения двух уровней в шейдере mib_glossy_refraction при различном значении max_distance. Слоту top_material назначен шейдер mib_illum_phong, а слоту deep_material назначен шейдер mib_illum_lambert.
back_material (Back Material) - является материалом, используемым для лучей попадающим в противоположном направлении от источника света, и которые отразились внутри объекта (т.е. любой луч, который попадает на объект сзади, как это определено нормалями геометрии). Он определяет, что находится "внутри" объекта, и задает свойства верхнего слоя поверхности с обратной стороны объекта (противоположной лучам от источника света), например, mib_illum_phong или аналогичный.
Пример применения третьего уровня - back_material в шейдере mib_glossy_refraction при различном значении max_distance.
По умолчанию mental ray переворачивает нормали к стороне входящего луча, который будет воздействовать на внутреннюю поверхность объекта. Но иногда, желательно, чтобы имитировать эффект прозрачности, позволить свету, падающему на внешний объект определить его затенение. Это достигается путем поворота нормалей с помощью render_reverse_of_back_material, что приводит к использованию в шейдере оригинального направления нормали к поверхности при оценке back_material.
Имитация прозрачности путем намеренного переворота векторов нормалей внутрь материала.
«refraction_color» (Refraction Color) — определяет степень преломления и окраску. Вычисляемые преломления просто проявляются за счет этого значения.
Пример влияния параметра refraction_color на свойства поверхности в шейдере mib_glossy_refraction.
«max_distance» (Max Distance) — ограничивает досягаемость преломленных лучей, и реализует спад при подходе к deep_material когда их длина приближается к указанному значению max_distance. Это позволяет задать внешний вид полупрозрачному материалу, в котором видимость ограничена.
Пример влияния параметра max_distance на свойства поверхности.
«falloff» (Falloff) — задает степень спада в deep_material, которое является степенной функцией. По умолчанию 2.0 означает, что спад соответствует квадрату расстояния; 3,0 означает, что расстояние возведению расстояния в куб, и так далее. Этот параметр не действует, если max_distance равен нулю.
Пример влияния параметра falloff на свойства поверхности.
«refraction_base_weight» (Refraction Base Weight) - является скалярным множителем для преломления в поверхностях перед камерой, и refraction_edge_weight на поверхностях, перпендикулярных камере (т.е. ребера) и edge_factor толщина «ребра». Вообще, еще есть преломления на ребрах (углах скольжения), а не только на основных поверхностях, известные как "эффект Френеля".
Пример влияния параметра refraction_base_weight на свойства поверхности.
«ior» (Index of Refraction) — задает индекс преломления материала. С изменением преломления, рассчитываемым на основе изменения векторов нормалей, очень важно, что эта величина определяет разумный показатель преломления, в противном случае индекс 1,0 не приводит к изменению направления луча, не создавая какую либо размытость! Как частный случай, можно установить IOR 0.0 который перейдет в "режим изменения направления", нежели "обычный режим изменения".
Пример влияния параметра ior на свойства поверхности c шейдером mib_glossy_refraction.
«samples» (Samples) - определяет количество семплов, обеспечивающих качество затенения. Если ноль, шейдеры возвращается к однократной выборке зеркальных отражений. Рекомендуется использовать значения 64 и выше для финальной визуализации, а для тестовой достаточно 16 — 32 сэмпла. Стоит заметить, что при увеличении количества сэмплов, время визуализации увеличивается.
Пример влияния параметра samples на свойства поверхности c шейдером mib_glossy_refraction.
Здесь также стоит отметить, что значение Samples зависимо от качества выборки установленного в глобальных параметрах визуализатора. Чем выше качество выборки и количество сэмплов заданное в параметрах шейдера, тем будет глаже и качественнее финальный результат. Однако если качество выборки задано низкое, то при увеличении количества сэмплов в шейдере, будет сложно добиться качественного результата.
u_spread и v_spread (U Spread и V Spread) - это количество изменения векторов нормалей в направлении осей U и V. Если эти значения совпадают, формируется изотропное глянцевое отражение. Если значения различаются, формируются анизотропные отражения.
Пример влияния параметров u_spread и v_spread на свойства поверхности c шейдером mib_glossy_refraction.
u_axis и v_axis (U Axis и V Axis) - дополнительные параметры для направления анизотропных подсветок. Они применяются только в анизотропном режиме. Если u_axis равен 0,0,0, шейдер по умолчанию пытается создать вектор на основе первого производного вектора поверхности, а если таковой отсутствует, на основе оси X в пространстве объекта. Если u_axis задается значение, оно будет использоваться в качестве направления U анизотропной подсветки. Если также заданы значения v_axis они будут использованы в качестве направления V, но если не указывать направление, V вычисляется как векторное произведение нормалей исходной поверхности и направления U.
Пример влияния параметров u_axis и v_axis на свойства поверхности c шейдером mib_glossy_refraction.
«dispersion» (Dispertion) — имитирует эффект хроматических аберраций. При значении 0.0 отсутствуют хроматические аберрации, при значении 1.0 осуществляется полная имитация хроматических аберраций.
Пример влияния параметра dispertion на свойства поверхности в шейдере mib_glossy_refraction.
«spectrum» (Spectrum) - представляет собой массив из цветов определяющий "Радугу", в котором цвета нарушены, когда параметр дисперсии не равен нулю. По умолчанию это красный, желтый, белый, голубой, синий и индиго цвета, но могут быть заданы любые цвета.
В завершение стоит также обратить ваше внимание на подход к работе с шейдерами mib_glossy_*. Так как эти шейдеры не являются физически корректными, и представляют собой затенители имитирующие только отражения и преломления, у них нет реализации для визуализации в фотонных картах и теней. Для этого, рекомендуется прибегнуть к применению шейдеров фотонных карт, такого как mib_photon_base или аналогичного фотонного шейдера, а также шейдера mib_shadow_transparensy для имитации тени от объекта с mib_glossy_* шейдером. На приведенной ниже иллюстрации, показано, как выглядит граф с шейдером mib_glossy_refraction и шейдерами mib_photon_base и mib_shadow_transparensy.
Граф шейдера в основе которого заложены mib_glossy_refraction, mib_photon_base и mib_shadow_transparency. В Attribute Editor показано, куда подключен каждый из шейдеров.
Шейдер mib_photon_base необходимо добавить в слот Photon Shader в ShadingGroup создаваемого вами шейдера, а шейдер mib_shadow_transparency необходимо добавить в слот Shadow Shader. Параметр ior в шейдере mib_photon_base должен быть идентичен заданному в mib_glossy_refraction.

Структура шейдера в формате .mi представлена следующим образом:
shader "mib_illum_phong3" # шейдер затенения по методу Фонга
     "mib_illum_phong" (
          "ambience" 0. 0. 0. 1.,
          "ambient" 0. 0. 0. 1.,
          "diffuse" 0. 0. 0. 1.,
          "specular" 0.5 0.5 0.5 1.,
          "exponent" 50.,
          "mode" 4,
          "lights" []
          )

shader "mib_glossy_refraction1"
     "mib_glossy_refraction" (
          "top_material" "mib_illum_phong3", # шейдер затенения по методу Фонга задан в качестве top_material
          "render_reverse_of_back_material" on,
          "refraction_color" 1. 1. 1. 1.,
          "max_distance" 0.,
          "falloff" 2.,
          "refraction_base_weight" 1.,
          "refraction_edge_weight" 0.6,
          "edge_factor" 5.,
          "ior" 1.331,
          "samples" 32,
          "u_spread" 0.1,
          "v_spread" 0.1,
          "u_axis" 0. 0. 0.,
          "v_axis" 0. 0. 0.,
          "dispersion" 0.,
          "spectrum" []
          )

shader "mib_shadow_transparency1" # шейдер теней
     "mib_shadow_transparency" (
          "color" 0. 0. 0. 1.,
          "transp" 0. 0. 0. 1.,
          "mode" 4,
          "lights" []
          )

shader "mib_photon_basic1" # шейдер фотонов для формирования эффекта каустики
     "mib_photon_basic" (
          "diffuse" 0.502342 0.502342 0.502342 1.,
          "specular" 0.5 0.5 0.5 1.,
          "transp" 0.497658 0.497658 0.497658 1.,
          "ior_frac" 1.331
          )

material "mib_glossy_refraction1SG" # группа затенения в качестве мтериала со всеми выше описанными шейдерами
          "adskMayaShadingEngine" (
               "surfaceShader" = "mib_glossy_refraction1",
               "cutAwayOpacity" 0.,
               "customShader" on
               )
     shadow = "mib_shadow_transparency1"
     photon = "mib_photon_basic1"
end material

Пример визуализации сцены с приведенным выше графом шейдера с mib_glossy_refraction.

Шедйер mib_glossy_refraction позволяет вам контролировать все основные свойства преломлений в материале. Помимо этого, благодаря более тонкой настройке анизотропных отражений можно получить максимально реалистичный результат.

Следующие шейдеры, которые мы рассмотрим, это mib_illum_blinn, mib_illum_cooktorr, mib_illum_lambert, mib_illum_phong являющиеся основными шедйерами для затенения поверхностей и лежащие в основе большинства современных более сложных шейдеров.

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

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

mental ray Standalone Global Review

Mental ray 4 Maya | Shaders Guide
- mental ray 4 Maya | Shaders Guide | mib_glossy_refraction

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

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