Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Шейдеры группы miss_fast

Читайте также:
  1. A. [мах. 2,5 балла] Соотнесите систематические группы растений (А–Б) с их признаками (1–5).
  2. Unit 18. РИТМИЧЕСКИЕ ГРУППЫ. ИНТОНАЦИЯ
  3. Абсолютизация положительных качеств своей этнической группы, некритическое отношение к ней называется
  4. АВТОМОБИЛИ, ЗАЧЕТНЫЕ ГРУППЫ.
  5. Взаимосвязь личности и группы.
  6. Витамины группы D
  7. Витамины группы А

Основными "строительными" модулями для SSS — материалов являются шейдеры misss_fast_shader (SSS Fast Render Shader), misss_skin_specular (SSS Specular Reflection for Skin) и misss_lambert_gamma (SSS Lambert Gamma). Они специально разработаны для того, чтобы с их помощью можно было создавать новые материалы со свойствами подповерхностного рассеяния.

Misss_fast_shader (SSS Fast Render Shader)

Misss_fast_shader имеет модульную структуру, которая позволяет "каскадировать" любое (разумное:) число основных SSS - шейдеров друг с другом.

Спецификация misss_fast_shader:

color "misss_fast_shader" (
color texture "lightmap",
color texture "depthmap",
shader "bump",
shader "diffuse_illum",
color "diffuse_color",
shader "specular_illum",
scalar "diffuse_weight",
color "front_sss_color",
scalar "front_sss_weight",
scalar "front_sss_radius",
color "back_sss_color",
scalar "back_sss_weight",
scalar "back_sss_radius",
scalar "back_sss_depth",
scalar "scale_conversion",
boolean "screen_composit",
boolean "output_sss_only",
scalar "falloff",
integer "samples",
)
apply material
version 4

Назначение параметров шейдера соответствует аналогичным, которые мы уже рассмотрели на примере материала SSS Fast Material.

Рассмотрим подробнее его "строительные" свойства.

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

Shader "bump" — параметр должен определяться шейдером или материалом. Здесь недостаточно использовать просто растровую или процедурную карту. Обусловлено это тем, что misss_fast_shader должен знать оригинальное направление нормалей и направление нормалей после применения bump, поскольку расчет подповерхностного рассеяния может выполняться только с не искривленными нормалями. Другими словами, использование шейдера или материала для bump гарантирует учет bump на этапе расчета lightmap и его сохранение в карте. В интерфейсе 3ds max bump уже реализован как материал, остается только войти в его свойства и назначить карту.

Shader "diffuse_illum" — предназначен для определения алгоритма расчета освещения поверхности от источников света. Обычно, для этого должен быть использован шейдер misss_lambert_gamma (SSS Lambert Gamma), если оставить этот параметр неопределенным, то, по умолчанию, он и будет использован. Однако здесь можно задавать любой шейдер, рассчитывающий освещение — не только Lambert, но и, например, Phong, Ward, Cook-Torrance, Blinn и другие (напоминаю, эти шейдеры по умолчанию скрыты и не появляются в списке шейдеров редактора материалов, но их можно открыть, отредактировав файл base.mi).
Именно здесь нужно подключать (каскадировать) еще один misss_fast_shader, если требуется создание материала с дополнительными рассеивающими слоями.

Shader "specular_illum" — предназначен для встраивания шейдера, который будет рассчитывать зеркальные отражения и подсветки поверхности. Как правило, для этой цели лучше использовать misss_skin_specular (SSS Specular Reflection for Skin), поскольку он оптимизирован для расчетов с органическими материалами (учитывает закон Фреснеля). Но ничто не мешает использовать для этой цели любой другой подходящий шейдер. Если шейдер не указать явно, зеркальные свойства рассчитываться не будут.

Таким образом, построение собственного SSS - материала должно выполняться в соответствии со следующей диаграммой:

 


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

Материал, представленный на диаграмме, имеет 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 сантиметров. Вот так выглядит сцена со стандартными материалами.

 


Стандартный материал (phong)
с картами для цвета, отражений и рельефа

Теперь назначим модели материал кожи со значениями параметров по умолчанию.

 


Материал кожи со значениями по умолчанию

Выглядит не очень. Посмотрим, что можно с этим сделать.
Сначала займемся настройкой рассеяния от первого слоя. Первый слой должен передавать "восковые" свойства кожи. Лучше всего настраивать его, назначив карту bump и балансируя вклад первого слоя с вкладом слоя диффузных не рассеянных отражений. Я назначил карту цвета слою Unscattered diffuse color, эту же карту слою Epidermal (top) layer scatter color и карту рельефа шейдеру bump. Для упрощения настройки отключены вклады от среднего и заднего слоев — их вес а установлен ы в 0. Зеркальные подсветки пока оставляют желать лучшего, но не отключались, поскольку так легче видеть bump.

 

Величина bump слишком велика, ее нужно уменьшить. Что касается растровых карт для не рассеянного цвета и первого рассеивающего слоя, то лучше использовать не цветные, а серые карты или слабо насыщенные по цвету карты, поскольку сама по себе кожа имеет бледно-серый цвет. Почти весь цвет создает рассеяние от нижележащего подкожного ("мясного") слоя.
Главная задача этого этапа — как можно лучше передать игру света на bump, регулируя радиус рассеяния первого слоя и относительные вклады (веса) слоя не рассеянного освещения и первого рассеивающего слоя. Кожа должна иметь вид, как будто она покрыта тонким слоем воска.
Пробуя различные значения bump, радиуса рассеяния первого слоя и весов слоя не рассеянных отражений и первого рассеивающего слоя, я пришел к следующим их значениям:

 

Брови как будто нарисованы на воске. Чтобы устранить этот эффект, я создал еще одну grayscale-карту из карты цвета, оставив на ней только брови и ресницы на белом фоне и отрегулировав значение серого при помощи levels (Photoshop), немного осветлив все изображение. Эту карту я использовал для Overall diffuse coloration.

 

Смысл этих действий — создать маску, блокирующую рассеяние в требуемых областях.

Использованная схема размещения растровых карт не единственная. Другой способ состоит в том, чтобы поместить карту цвета только в Overall diffuse coloration (карта должна быть цветной) и регулировать цвет первого слоя рассеяния и диффузный цвет. Недостаток этого способа — рассеяние будет изменяться вдоль поверхности, и даже полностью блокироваться в темных областях растровой карты, если они есть.

Пора включить в игру второй слой и настроить оттенок кожи. Меняя значение веса и радиуса рассеяния, я пришел к следующим их значениям:

 

Цель этого этапа — получить нужный оттенок цвета кожи. Особое внимание следует обращать на цвет "терминатора" — границы между освещенной и темной областью. Он должен содержать достаточно цвета.
Обратите внимание внимание, как изменился цвет "терминатора" от освещения сзади (верхняя часть головы). Пожалуй, засвет великоват, я немного уменьшу интенсивность заднего освещения.
Включаем третий слой и настраиваем его вес и радиус рассеяния. Этот слой даст "подсветку" ушей и задней границы шеи. Значения, на которых я остановился:

 

Пора перейти к зеркальным отражениям. Сначала отключим все зеркальные отражения, обнулив их вес.

 

Очень сухая кожа:).

Включаем первый слой отражений и настраиваем широкие подсветки:

 

Включаем второй слой и настраиваем узкие относительно сильные подсветки, которые должны проявляться на краях выступающей геометрии (нос, скулы и т.д.)

 

Для второго слоя отражений я изменил только Specular Weight #2 = 0.2 и Shininess #2 = 50.
Можно использовать карты зеркальных отражений, поместив их в Overall Specular Weight. Хорошая мысль использовать зеркальную карту для bump и немного размытых отражений Reflection Weight = 0.1, Reflection Glossiness = 10 (последнее может серьезно замедлить расчет и потребовать больших значений AA).

 

Добавим немного ambient occlusion и отражения от окружения (синий Gradient Ramp в Local Environment), увеличим размер карты до 100%, samples = 256 и Lightmap gamma curve = 1.

 

Вместо ambient occlusion можно использовать final gathering, а вместо градиентной заливки для окружения — карту HDRI.

 

Я использовал достаточно простую модель и текстурные карты для нее.
Вот еще совершенно потрясающий пример материала кожи:

 


"The Final Battle". Автор: Max Kor

Статья автора работы:
"The Making of The Final Battle"


Дата добавления: 2015-10-28; просмотров: 85 | Нарушение авторских прав


Читайте в этой же книге: Настройка фотонных карт | Интерфейс настройки фотонных карт в mr 3.3 для 3ds max | Final Gathering | Свойства и использование Ambient/Reflective Ocllusion | Физическая модель подповерхностного рассеяния в mental ray – SSS Physical Material | Шейдер miss_physical | Тест 1. Расчет подповерхностного освещения методом однократного рассеяния | Тест 5. Текстурные трехмерные карты для коэффициента рассеяния | Часть 4. Упрощенная модель подповерхностного рассеяния SSS Fast | Запекание с mental ray |
<== предыдущая страница | следующая страница ==>
Материал miss_fast_simple_phen| Создание собственных материалов SSS Fast

mybiblioteka.su - 2015-2024 год. (0.018 сек.)