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

Материал miss_fast_simple_phen

Читайте также:
  1. II. Материалистическая философия К. Маркса.
  2. POS материалы
  3. S6.14 Сопроводительные материалы
  4. АЗ в Материальном Мире
  5. Активный раздаточный материал
  6. Активный раздаточный материал
  7. Активный раздаточный материал

Начнем с miss_fast_simple_phen (SSS Fast Material), как одного из базовых материалов.

Этот материал является составным, то есть, построен из нескольких базовых модульных шейдеров — misss_fast_shader, misss_skin_specular, misss_lambert_gamma и bump. Он автоматически генерирует lightmap и depthmap, наполняет их данными и рассчитывает окончательный цвет с учетом упрощенной модели подповерхностного рассеяния. Содержит два рассеивающих слоя, соответствующих передней и задней поверхности объекта, слой с простыми свойствами зеркального отражения и слой не рассеянного диффузного отражения.

 


Вверху — объект со стандартным материалом (Blinn),
внизу — с материалом SSS Fast Material

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

Спецификация шейдера:

material "misss_fast_simple_phen" (
color texture "lightmap", скрыт в интерфейсе материала 3ds max
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 "back_sss_color",
scalar "back_sss_weight",
scalar "back_sss_radius",
scalar "back_sss_depth"
},
struct "s" {
color "specular",
scalar "exponent"
},
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", скрыт
)

 


Вид интерфейса SSS Fast Material по умолчанию в 3ds max

 


Вид интерфейса SSS Fast Material
со всеми открытыми слотами свойств

Группа параметров SSS Fast Material (mi) Parameters:

lightmap и depthmap — по умолчанию, скрыты. Предназначены для указания имен карт lightmap и depthmap. В обычных обстоятельствах предполагается, что эти имена назначаются картам автоматически по некоторым внутренним правилам и определения не требуют.
При явном указании файла, его имя и параметры нужно задавать только в слоте "lightmap", слот "depthmap" определять не нужно. Размер lightmap по ширине должен быть вдвое больше размера рендера по ширине, а по высоте соответствовать высоте рендера. Например, если размер рендера 500х500, ширина lightmap должна составлять 1000, высота — 500. И обязательно нужно указывать использование 32 бит на канал.
Если имена файлов не указываются явно (слот "lightmap" остается пустым), карты резидентно хранятся в оперативной памяти.

 

 


Карта lightmap с данными освещенности передней и задней поверхности. "Полосатость" изображения обусловлена совмещением в соседних пикселях данных
о передней и задней поверхности.

 


Карта с данными глубины. Пусть вас не вводит в заблуждение белый цвет — это издержки 8-битного отображения монитором 32-битного изображения. Реальные значения пикселей можно измерить "пипеткой" в HDRShop

Когда файл карт указывается явно, при самом первом рендере появляется сообщение об отсутствии указанной карты. Игнорируйте, его появление вызвано некоторыми особенностями создания и передачи карт освещенности между шейдерами материала. Расчет будет выполнен правильно и при следующих рендерах, если имя файла не менялось, этого сообщения не будет.
В качестве альтернативы можно создать пустой файл (например, при помощи notepad) с тем же именем и расширением и сохранить его в том месте, которое было указано для карт.

lightmap_group (Scatter group) — имя группы. Паре карт lightmap/depthmap будет присвоено групповое имя, указанное в lightmap_group. Этот параметр предназначен для автоматического генерирования резидентных карт и передачи их для расчетов всем шейдерам.
Все объекты, имеющее одно и то же имя в lightmap_group, будут взаимодействовать при расчете рассеяния, объекты с разными именами в lightmap_group взаимодействовать не будут. Использование различных групп увеличивает объем необходимой для расчетов памяти, поэтому использовать разные группы для материалов следует только в том случае, если это приводит к появлению артефактов. Например, при рендере рукопожатия двух людей для рук следует использовать материалы с разными именами в lightmap_group.

Другой пример — если один объект полностью содержится в другом объекте (стенки объектов не должны соприкасаться), то для блокирования подсветки от задней рассеивающей поверхности содержащего объекта внутреннему объекту можно назначить другой материал, но с тем же именем в lightmap_group. Имена чувствительны к регистру, то есть "А" и "а" — это разные имена.

 


Два объекта — куб и помещенная в него сфера. Материалы объектов разные, но имеют одинаковое имя в lightmap_group и потому взаимодействуют при расчете рассеяния — сфера блокирует свет

 


Та же сцена и те же материалы, но теперь с разным значением lightmap_group. Сфера просто исчезла (хотя она находится на прежнем месте) — объекты перестали взаимодействовать при расчете рассеянного освещения

lightmap_size — размер карты lightmap, выраженный в процентах от размера рендера. Обычно, 50% размера вполне достаточно, но при возникновении артефактов на краях объектов, размер lightmap нужно увеличивать.

samples (Number of samples) — количество близлежащих точек (сэмплов) lightmap, собираемых для расчета освещенности точки. Samples — один из регуляторов уровня шума в рендере. Минимальное значение, установленное по умолчанию, — 32 сэмпла на луч.

 


Верхнее изображение — samples = 16,
нижнее — samples = 256

Реальное количество собираемых сэмплов будет определяться тремя параметрами: значением samples, величиной радиуса рассеяния и размером lightmap.

bump (Bump shader) — шейдер, позволяющий определить расчет псевдорельефа (bump — искажение нормалей точек поверхности) при помощи процедурной или растровой карты. По умолчанию назначен шейдер mental ray Bump (3ds max), при необходимости его можно заменить на другой.

 


Для шейдера bump использована растровая карта

Mode (скрыт) — определяет режим работы с источниками света: 0 — учитывается освещение от всех источников в сцене, 1 — учитывается освещение только от указанных в списке Lights источников, 2 — не учитывается освещение от источников, представленных в списке Lights.

Lights (скрыт) — позволяет установить/отключить режим работы со списком источников света и создать такой список.

Параметры Mode и Lights представляют альтернативный стандартному для 3ds max методу включения/исключения объектов из освещения.
Рекомендую открыть их и использовать, поскольку при работе с материалами группы Fast SSS стандартное исключение из освещения средствами 3ds max не работает.

Группа параметров, определяющих диффузные свойства рассеивающего материала Diffuse Sub Surface Scattering:

ambient (Ambient/Extra light) — определяет фоновое освещение. Ambient - освещение добавляется в lightmap и учитывается при расчете рассеяния, наряду с освещением от источников. Поэтому, его можно использовать для определения реального рассеянного фонового освещения от HDRI карт или ambient occlusion.

 


Рассеяние без и с использованием ambient occlusion
(нижнее изображение)

Использование ambient occlusion позволяет достичь более плавных переходов на границе освещенных областей и тени. Эффект достаточно тонкий, но вполне различимый.

overall_color (Overall diffuse coloration) — множитель для суммарного диффузного освещения всего материала: unscattered disffuse color + Front surface color + Buck Surface scatter color, не воздействует на зеркальные свойства материала. Может изменять интенсивность и оттенок цвета умножением заданного в overall diffuse coloration цвета (или карты) на суммарный диффузный цвет материала. Этот слот полезен в качестве блокирующей маски для помещения растровой карты, имитирующей родинки на коже, грязь, текстурные брови и тому подобного. Не рекомендуется для помещения растровой карты цвета поверхности, ее лучше положить в слот diffuse_color.

diffuse_color (Unscattered diffuse color) — обычный, не рассеянный диффузный цвет материала, рассчитываемый по закону Ламберта. Этот цвет накладывается поверх рассеянного освещения. Здесь уместна аналогия со слоями в Adobe Photoshop — на самом верхнем слое лежит overall_color, на слое под ним — unscattered diffuse color, рассеянный свет располагается на нижних слоях. SSS Fast material использует для расчета диффузного не рассеянного освещения шейдер misss_lambert_gamma (SSS Lambert Gamma).

diffuse_weight (Unscattered diffuse weight) — множитель, определяющий степень проявления не рассеянного диффузного цвета. Чем больше множитель, тем больше величина соответствующего диффузного компонента и тем сильнее он проявится при рендере. Можно вновь воспользоваться аналогией с Photoshop — изменение weight идентично изменению прозрачности слоя. Вообще же вес всех слоев имеет простую цель — балансировать их вклады при формировании общего цвета материала.

front_sss_color (Front surface scatter color) и front_sss_weight (Front surface scatter weight) — цвет и вес рассеянного освещения от front (передней) рассеивающей поверхности.

front_sss_radius (Front surface scatter radius) — радиус рассеяния освещения для передней поверхности в миллиметрах. Радиус измеряется в единицах сцены, деленных на значение Scale conversion factor. Радиус является ключевым параметром для определения рассеивающих свойств материала. Чем меньше радиус, тем меньше рассеивающие свойства материала и тем больше он походит на обычный материал без рассеяния.

back_sss_color (Back surface scatter color) и back_sss_weight (Buck surface scatter weight) — цвет и вес рассеянного света от задней поверхности.

back_sss_radius (Buck surface scatter radius) — радиус рассеяния освещения для задней поверхности.

back_sss_depth (Back surface scatter depth) — определяет максимальное расстояние от задней поверхности, на котором виден рассеянный ею свет. Если радиус достаточно велик, рассеянный свет от задней поверхности может "подсвечивать" переднюю поверхность. Глубина особенно важна для проявления эффектов подповерхностного рассеяния в тонких объектах. Например, покраснение ушей или просвечивание костей кисти руки сквозь тело при заднем освещении. Если величина Back surface scatter depth не указана, она полагается равной величине радиуса рассеяния для задней поверхности.

Группы параметров front_sss и back_sss определяют визуальное проявление подповерхностного рассеяния материала и вычисляются при помощи lightmap. Для расчета карт освещения SSS Fast Material использует второй шейдер — самплер misss_lambert_gamma (первый — для расчета не рассеянного диффузного освещения).

Группа параметров зеркальных свойств Specular reflections:

Для реализации зеркальных отражений в SSS Fast Material используется шейдер misss_skin_specular (SSS Specular Reflection for Skin). Точнее, часть параметров первого слоя зеркальных подсветок primary_spec_color и primary_shinyness, второй слой просто не используется (описание этого шейдера будет дано немного позже).

specular (Specular color) — цвет и интенсивность зеркальных подсветок.

exponent (Shininess) — размер зеркальной подсветки, этот параметр определяет степень экспоненты для расчета размера пятна подсветки — стандартной подсветки, которую можно видеть у материалов типа phong или Blinn. Чем меньше его значение, тем шире пятно, чем больше — тем меньше размер подсветки.

 


Применены растровые карты для bump,
overall diffuse coloration и specular

С зеркальными подсветками материала SSS Fast Material связана небольшая ошибка. Проявляется она в том, что если даже установить specular в нулевое значение, подсветки все равно будут присутствовать в материале. Как уже говорилось выше, зеркальные свойства материала реализованы шейдером misss_skin_specular, который имеет два слоя отражений. При определении материала SSS Fast явно задаются начальные значения только для первого слоя, значения для второго слоя остаются по умолчанию. А по умолчанию второй слой вовсе имеет ненулевое значение отражения. Поэтому, когда мы убираем зеркальные подсветки первого слоя, подсветки от второго слоя все равно остаются. Исправить ошибку просто — нужно отредактировать subsurface.mi — дописать "secondary_weight = 0" для шейдера "specular", то есть принудительно обнулить отражения от второго слоя. В конце статьи я дам ссылку на исправленный файл.
Та же ошибка имеет место и в материале для Maya (misss_fast_simple_maya) и "лечится" точно также — обнулением отражений от второго слоя.

Advanced options:

lightmap_gamma (Lightmap gamma curve) — параметр управления формой gamma-кривой для освещения, сохраняемого в lightmap. Если gamma = 1.0, в lightmap сохраняется обычное диффузное освещение, рассчитанное по закону Ламберта. Если gamma меньше 1.0, форма кривой "уплощается", что в конечном итоге приводит к осветлению lightmap. Если gamma больше 1.0, форма кривой будет заостряться, что приведет к концентрации рассеянного света вблизи точки падения луча, то есть к затемнению lightmap. На практике используются значения gamma в пределах от 0.4 до 0.8.

Мы уже знаем, что SSS Fast Material использует два независимых шейдера - сэмплера misss_lambert_gamma, один для расчета диффузного не рассеянного освещения и второй — для расчета lightmap. Параметр lightmap_gamma является на самом деле параметром шейдера misss_lambert_gamma. Так вот, к чему я веду — при расчете диффузного освещения мы не можем изменять lightmap_gamma для диффузного не рассеянного освещения, поскольку при объявлении материала ему жестко задано значение, равное 1. Поэтому для настройки гаммы освещения нам доступен только один параметр из двух возможных — для lightmap.

 


Сверху вниз: lightmap_gamma = 0.1, 1, 5

SSS Fast Material имеет ошибку, связанную с lightmap_gamma — изменение этого параметра никак не сказывается на результате. Ошибка вызвана тем, что при определении материала в subsurface.mi неверно вызывается одна из переменных интерфейса материала. Чтобы исправить ситуацию, открываем в текстовом редакторе subsurface.mi, ищем declare phenomenon material "misss_fast_simple_phen", далее — shader "lm_sample" misss_lambert_gamma" и затем заменяем строчку "diffuse_curve" = interface "a.diffuse_curve" на строчку "diffuse_curve" = interface "a.lightmap_gamma".

В конце статьи содержится ссылка на исправленный subsurface.mi.

indirect (Scatter indirect illumination) — позволяет учесть в рассеянии непрямое освещение от фотонов и final gathering и сохранить его в lightmap. Значительно увеличивает как реализм рендера, так и время его расчета. Использование этой возможности полезно только в том случае, если непрямое освещение дает существенный вклад в общее освещение или является единственным источником освещения.

Если в сцене используется расчет GI, а indirect выключен, то глобальное освещение будет присутствовать на поверхности объекта, но не будет рассеиваться в материале.

 


Расчет освещения с final gathering,
вверху — indirect off, внизу — indirect on

scale_conversion (Scale conversion factor) — простой линейный делитель всех расстояний. Позволяет увязывать единицы измерения для различных сцен, с целью одинакового визуального проявления материала вне зависимости от масштаба объектов, к которым он применяется. Например, если материал разработан в сцене с единицами измерения миллиметр и затем используется для объекта с единицами измерения сантиметр, фактор нужно установить равным 10 (1 мм = 1/10 см).
Изменение этого параметра также позволяет быстро регулировать степень проявления подповерхностного рассеяния для всего материала сразу, что может быть удобно при настройке.
Значение scale_conversion по умолчанию равно 1, что предполагает миллиметры в качестве единиц измерения сцены. Рекомендую при работе со всеми Fast SSS материалами и шейдерами использовать именно миллиметры (и реалистичные размеры объектов, разумеется).

scatter_bias (Scatter Bias) — определяет изотропию подповерхностного рассеяния, знакомую нам по модели физического рассеяния (параметр g, определяющий распределение вероятности рассеяния по углам) и может изменяться в пределах от -1 до 1. Если scatter_bias = 0, рассеяние происходит равномерно во всех направлениях (изотропное рассеяние), при scatter_bias = 1 происходит рассеяние преимущественно вперед, при scatter_bias = -1 — рассеяние "назад".

falloff (Falloff strength) — задает форму затухания рассеянного освещения вдоль радиуса. Большие значения задают более быстрое и резкое затухание, мЕньшие значения — более плавное и гладкое затухание и создают ощущение более короткого радиуса рассеяния, чем оно есть на самом деле. Поэтому, при уменьшении falloff может потребоваться увеличение радиуса рассеяния для компенсации этого эффекта. Для значений falloff от 1.0 до 10.0 все сэмплы в пределах радиуса рассеяния имеют приблизительно одинаковый весовой коэффициент. Для величин от 0.1 до 1.0 сэмплы вблизи границы площадки рассеяния имеют меньшие весовые коэффициенты.
Уменьшение falloff приводит к затемнению рассеивающих слоев, причем передний слой гораздо более чувствителен к изменениям.

screen_composite (Screen "soft" compositing of layers) — позволяет определить способ сложения вкладов от различных типов освещения в материале. Когда галочка в чекбоксе установлена, используется Screen compositing, этот режим аналогичен режиму смешивания слоев"screen" в Photoshop. В отключенном положении все вклады просто суммируются по величине (add), что часто может привести к появлению засветок. Add - режим можно использовать, если рендер выполняется в HDRI файл для последующей нелинейной тоновой коррекции (tonemapping).


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


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

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