Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Mental ray 3.3 для 3ds max.docx
Скачиваний:
5
Добавлен:
01.09.2019
Размер:
9.59 Mб
Скачать

Диаграмма построения материала

Материал, представленный на диаграмме, имеет 4 SSS — слоя, 2 зеркальных слоя, один слой диффузного не рассеянного освещения, расчет lightmap и не рассеянного диффузного освещения выполняется при помощи двух независимых шейдеров miss_lambert_gamma. Каскадируя бОльшее число шейдеров, можно получить и более сложный материал. Каскадирование возможно потому, что рассеяние рассчитывается на основе lightmap, а не на основе цвета, возвращаемого diffuse_illum и поэтому через него можно подключать то, что нам нужно.

В 3ds max создание подобного материала может быть выполнено через mental ray Connection в свойствах стандартных материалов. Шейдер misss_fast_shader должен быть назначен свойствам поверхности и каскадирован с другими шейдерами в соответствии с диаграммой.

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

Хочу особо отметить два момента. Первый — каскадирование miss_fast_shader нужно выполнять только через diffuse_illum. В принципе, не исключен и другой способ построения материала, например, при помощи Mix, Blend или Composite. Но в этом случае слои будут перемешиваться в несколько ином порядке — зеркальные отражения могут оказаться под диффузными, что нежелательно. Каскадирование шейдеров через diffuse_illum избавлено от этого недостатка.

Второе — сколько бы дополнительных рассеивающих слоев мы не создавали, все они будут работать с одной и той же парой передняя /задняя поверхность объекта и с одной и тоже парой lightmap/depthmap, если положение камеры неизменно.

Шейдер misss_lambert_gamma (SSS Lambert Gamma)

Спецификация misss_lambert_gamma (SSS Lambert Gamma): color "misss_lambert_gamma" ( color "ambient", color "ambience", color "diffuse", boolean "indirect", scalar "diffuse_curve", integer "flip", integer "mode", array light "lights" ) version 4 apply texture

В основе этого шейдера лежит mib _ illum _ lambert : diffuse — диффузный цвет, рассчитываемой рассчитываемый по закону Ламберта, ambient и ambience умножаются друг с другом для получения результирующего фонового цвета. Одним из недостатков освещения по Ламберту является высокая контрастность освещения. Это следствие того, что в расчете освещения используется косинус угла между направлением нормали и направлением на источник — освещение изменяется от максимума до нуля в пределах 90 градусов, то есть быстрее, чем это происходит в реальной жизни. В качестве альтернативы misss_lambert_gamma можно использовать так называемый "оборачивающий" шейдер, рассчитывающий освещение в пределах углов, больших 90 градусов. Для mental ray (Maya и Max) такой шейдер написан, получить его можно по адресу: http://www.sandstrom.on.to, в разделе Downloads: JS_wrapmaterial.

Параметр flip может принимать значения: 0, lightmap рассчитывается для поверхности, у которой нормали "смотрят" на камеру; 1 — нормали от камеры; 2 — lightmap будет рассчитана для обеих сторон поверхности. Использование flip может быть полезным при расчетах рассеяния в тонких объектах, таких как листья деревьев.

Остальные параметры мы уже рассмотрели на примере SSS Fast Material.

Misss_skin_specular (SSS Specular Reflection for Skin) и материал miss_fast_skin_phen (SSS Fast Skin Material)

Шейдер misss_skin_specular (SSS Specular Reflection for Skin) рассмотрим в составе материала miss_fast_skin_phen (SSS Fast Skin Material):

material "misss_fast_skin_phen" ( color texture "lightmap", color texture "depthmap", string "lightmap_group", scalar "lightmap_size", integer "samples", shader "bump", struct "d" { color "ambient", color "overall_color", color "diffuse_color", scalar "diffuse_weight", color "front_sss_color", scalar "front_sss_weight", scalar "front_sss_radius", color "mid_sss_color", scalar "mid_sss_weight", scalar "mid_sss_radius", color "back_sss_color", scalar "back_sss_weight", scalar "back_sss_radius", scalar "back_sss_depth" }, struct "s" { scalar "overall_weight", scalar "edge_factor", color "primary_spec_color", scalar "primary_weight", scalar "primary_edge_weight", scalar "primary_shinyness", color "secondary_spec_color", scalar "secondary_weight", scalar "secondary_edge_weight", scalar "secondary_shinyness", scalar "reflect_weight", scalar "reflect_edge_weight", scalar "reflect_shinyness", boolean "reflect_environment_only", shader "environment" }, struct "a" { scalar "lightmap_gamma", boolean "indirect", scalar "scale_conversion", scalar "scatter_bias", scalar "falloff", boolean "screen_composit" }, integer "mode", # light selection mode 0..2 array light "lights" )

Создание реалистичного материала кожи является одной из трудных задач компьютерной графики. Исследования в этой области ведутся уже довольно давно, и к настоящему времени основные требования к модели материала уже определены. Такая модель должна учитывать подповерхностное рассеяние, минимум, от трех слоев — верхнего (dermal), имитирующего рассеяние света кожей, подкожного (epidermal), имитирующего рассеяние в мускульных тканях, и рассеяние от задней поверхности для тонких частей тела (например, — ушей, кистей рук) при освещении сзади. Кроме того, кожа должна обладать зеркальными отражениями, имитирующими отражения от жирового слоя кожи и отражения от "мокрой" кожи. Это приводит к необходимости иметь два слоя зеркального отражения: один для широких и размытых отражений и второй — для тонких, но достаточно резких сильных подсветок. Также необходимо учитывать и тот факт, что отражение должно быть сильнее для света, падающего под малыми углами к поверхности кожи и меньше, если свет падает на поверхность под углами, близкими к перпендикулярным (закон Фреснеля).

Материал miss_fast_skin_phen (SSS Fast Skin Material) в полной мере позволяет реализовать все эти ключевые свойства кожи. Он содержит три рассеивающих слоя, два слоя зеркальных отражений, позволяет делать отражения размытыми, учитывать непрямое освещение и т.д.

Назначение параметров miss_fast_skin_phen таких, как lightmap, depthmap, lightmap_group, lightmap_size, samples, bump, ambient, lightmap_gamma, indirect, scale_conversion, scatter_bias, falloff и screen_composit соответствует аналогичным параметрам материала miss_fast_simple_phen.

Остальное рассмотрим подробнее.

Нас, прежде всего всего, интересует группа параметров struct "s". Именно она отвечает за свойства зеркальных отражений, а ее параметры соответствуют параметрам шейдера misss_skin_specular.

Оverall_weight — общий весовой коэффициент для всех типов зеркальных отражений. Универсальный регулятор, позволяющий быстро изменять силу всех типов specular - отражений материала. Хорошее место, чтобы поместить растровую карту зеркальных отражений.

Edge_factor — параметр устанавливает размер (ширину) зеркальных отражений на краях объекта, где угол между направлением падающего света и нормалью к поверхности велики (почти перпендикулярны) и таким образом, влияет на силу проявления Фреснелевских отражений. Чем больше значение edge_factor, тем меньше размер и интенсивность отражений на краях. Величина edge_factor учитывается для краевых отражений всех "зеркальных" слоев.

Primary_spec_color и primary_weight — цвет и весовой коэффициент подсветок первого зеркального слоя.

Primary_edge_weight — дополнительный множитель для отражений на краях объекта (Фреснелевские отражения) для первого слоя. Окончательное значение отражений вблизи краев для первого слоя будет определяться суммой значений edge_factor и primary_edge_weight.

Primary_shinyness — значение показателя экспоненты для расчета подсветок. Чем больше его значение, тем меньше и резче световой блик на поверхности и наоборот. По умолчанию, первый слой имитирует широкие подсветки небольшой интенсивности со значением primary_shinyness = 5.

Secondary_spec_color, secondary_weight, secondary_edge_weight, secondary_shinyness — параметры второго зеркального слоя, аналогичны по назначению соответствующим параметрам первого слоя. Второй слой предназначен для воспроизведения относительно сильных небольших по размеру подсветок. Значение secondary_shinyness по умолчанию равно 33.

Reflect_weight и reflect_edge_weight — параметры, определяющие размытость отражений, если они не равны нулю, то будут рассчитываться glossy отражения для обоих слоев. Эти параметры требуют включения рейтресинга, поскольку для построения отражений сэмплируется окружение материала. Параметры позволяют "привязать" материал к окружению, что очень важно для реализма материала кожи. Может быть, не менее важно, чем подповерхностное рассеяние. Трассирование окружения лучше и быстрее выполнять, определив шейдер локального окружения environment при помощи карты типа Gradient Ramp или HDRI и включив Reflect_environment_only = on. Значения Reflect_weight и reflect_edge_weight не должны быть большими — кожа все-таки не зеркало, но достаточными, чтобы передать оттенок цвета окружения.

Reflect_shinyness — размер и степень размытости отражений окружения, значение 0 соответствует чистым зеркальным отражениям (без размытия. Если параметр не равен нулю, рассчитываются размытые отражения).

Reflect_environment_only — если включен, позволяет сэмплировать лучами только карту environment, если нет — трассируется настоящее окружение объекта в сцене.

shader "environment" — позволяет задавать локально для объекта карту окружения.

Как уже отмечалось выше, особенностью этого материала является наличие трех рассеивающих слоев:

Первый слой — front sss layer имитирует рассеяние света в верхнем кожном покрове (Epidermal skin layer). Параметры front_sss_color, front_sss_weight и front_sss_radius описывают цвет, вес и радиус рассеяния в эпидермисе. По умолчанию значения этих параметров соответствуют характерным признакам кавказской ("белой") расы: желтоватый цвет с весом 0.5 и радиусом рассеяния от 5 до 10 мм.

Второй слой — mid sss layer воспроизводит рассеяние от подкожного "мясного" слоя (subdermal skin layer). По умолчанию, параметры mid_sss_color, mid_sss_weight и mid_sss_radius описывают цвет, вес и радиус рассеяния, характерные для кавказской расы — красный/оранжевый цвет слоя, вес = 0.5 и радиус рассеяния от 10 до 25mm.

Третий слой — уже знакомый нам задний слой. Особенность материала кожи проявляется здесь в том, что следует соблюдать приблизительное равенство радиусов рассеяния второго и третьего слоя, а глубина может быть произвольной.

Библиотека материалов 3ds max содержит еще одну разновидность рассеивающего материала — miss_fast_skin_phen_d (SSS Fast Skin Material+Displace). Он полностью идентичен miss_fast_skin_phen, но поддерживает использование карт displacement.

Рассмотрим использование материала кожи на примере. Сцена содержит модель женской головы с тремя текстурными картами для цвета, зеркальных отражений и рельефа (bump), освещенную по стандартной схеме из трех источников света — ключевого, заднего и заполняющего. Единицы измерения сцены — миллиметры, размер модели головы по высоте около 30 сантиметров. Вот так выглядит сцена со стандартными материалами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]