Читайте также: |
|
Рассмотрев математическую модель, лежащую в основе шейдера miss_physical, перейдем теперь к изучению настроечных параметров шейдера, реализующих эту модель в рамках mental ray.
Спецификация шейдера в mental ray выглядит следующим образом:
declare shader
"misss_physical" (
color "material",
color "transmission",
scalar "ior",
vector "absorption_coeff",
vector "scattering_coeff",
scalar "scale_conversion",
scalar "scattering_anisotropy",
scalar "depth",
integer "max_samples",
integer "max_photons",
scalar "max_radius",
boolean "approx_diffusion",
boolean "approx_single_scatter",
boolean "approx_multiple_scatter",
array light "lights"
)
version 3
apply material, photon
end declare
а интерфейс шейдера в 3ds max выглядит вот так:
Описание и назначение параметров.
1. Параметр material позволяет определять дополнительные свойства поверхности рассеивающего объекта - цвет, текстуру, шейдер или материал. При этом в каждой точке заданный поверхности цвет, цвет текстуры или цвет возвращаемый назначенным поверхности шейдером или материалом "модулируется" законом Фреснеля - интенсивностью отраженного света, вычисленной в этой же точке по закону Фреснеля с учетом интенсивности и направления светового потока от источников, нормали поверхности в точке и коэффициентов преломления окружения и материала.
Нейтральный серый цвет поверхности выступает как "чистый усилитель" и может служить регулятором силы отражения поверхности. Черный цвет полностью выключает отражение. Белый цвет делает интенсивность отражения максимальной.
Наличие параметра material обусловлено тем, чтобы, сохранив в целом Фреснеловский характер зависимости отражения и преломления для падающего от источников света, позволить поверхности иметь еще некоторые дополнительные свойства - текстуру, отражения, подсветки и т. д.
Таким образом, энергетический баланс между отраженным и прошедшим под поверхность светом соблюдается и строго подчиняется закону Фреснеля, а некоторые дополнительные свойства поверхности задаются параметром material.
2. Параметр transmission позволяет "фильтровать" проходящее под поверхность освещение. Величина проходящего освещения опять же определяется законом Фреснеля и зависит от источников света, нормали поверхности в данной точке и коэффициентов преломления окружения и материала (если окружение - воздух, то только материала).
Параметру transmission можно задавать цвет, текстуру, шейдер или материал. Назначенный чистый цвет, цвет текстуры или цвет, возвращаемый в данной точке поверхности назначенным шейдером/материалом модулирует интенсивность пропущенного под поверхность света, которая определяется законом Фреснеля из интенсивности и направления падающего света, нормали поверхности в данной точке и коэффициентами преломления.
Нейтральный серый цвет вновь выступает в качестве "чистого усилителя" и может служить регулятором силы проявления подповерхностного рассеяния, черный цвет полностью "гасит" рассеяние, белый цвет максимально усиливает величину подповерхностного рассеяния.
3. параметр ior - индекс рефракции (преломления) света в рассеивающем материале. Используется в вычислениях количества пропущенного под поверхность и количества отраженного на поверхности света от источников по закону Фреснеля.
4. параметр absorption_coeff характеризует ослабление светового потока в результате поглощения при его прохождении через среду. Измеряется в обратных единицах длины, 1/мм. Произведение коэффициента и длины пути луча света (фотона) х - величина безразмерная и характеризует вероятность прохождения фотоном без поглощения пути длиной х по закону 1/exp {uax}. Этот параметр имеет тот же смысл, что и коэффициент поглощения в математической модели.
При использовании коэффициента поглощения важно учитывать соотношение между единицами измерения коэффициента (это всегда миллиметры) и единицами измерения в сцене и правильно указывать scale_conversion.
Значение absorption_coeff задается по отдельности для разных длин волн (для трех основных цветов модели RGB) и может иметь цифровые значения, или определяться из растровых карт, или из 3d процедурных карт.
5. параметр scattering_coeff - коэффициент рассеяния, характеризует рассеяние света при прохождении через среду, измеряется в обратных единицах длины. Произведение коэффициента рассеяния на длину пути луча света (фотона) - величина безразмерная и характеризует вероятность прохождения фотоном пути длиной x без рассеяния (изменения первоначального направления траектории) по закону 1/exp {usx}, аналогичен коэффициенту рассеяния математической модели. Также важно учитывать соотношение единиц измерения коэффициента (мм) и сцены.
Значение scattering_coeff задается по отдельности для разных длин волн и может иметь не только цифровые значения, но определяться из карты, как 2d, так и 3d процедурных карт.
6. параметр scale_conversion управляет преобразованием при согласовании единиц измерения коэффициентов и единиц измерения сцены, если они разные. Для шейдера miss_physical единицы измерения фиксированы - это всегда миллиметры. Если, например, единицы измерения сцены - см, то тогда scale_conversion = 10, поскольку 1см = 10 мм.
7. параметр scattering_anisotropy определяет преимущественный тип рассеяния и по смыслу идентичен определению типа универсальной фазовой функции рассеяния Henyey-Greenstein математической модели. Фактически scattering_anisotropy определяет значение переменной g фазовой функции. Диапазон возможных значений параметра лежит в пределах от -1 до 1. Значение -1 соответствует типу анизотропного рассеяния преимущественно "назад", 0 - изотропное рассеяние во всех направлениях, 1 - анизотропное рассеяние "вперед".
8. параметр depth определяет толщину слоя, в пределах которого отслеживаются фотоны. Указывая значение depth, мы определяем глубину слоя, или shallow layer, в пределах которого расчет рассеяний и поглощений фотонов выполняется точно. Глубина слоя вычисляется как произведение depth на усредненную длину свободного пробега фотона.
Часть объема, лежащая глубже shallow layer, обсчитывается менее точным и более быстрым методом дипольной диффузной аппроксимации, а слой называют diffuse layer.
9. Параметр max_samples определяет количество промежуточных точек (или сэмплов), в которых выполняется расчет освещенности от рассеяния, для каждого луча, испускаемого от камеры (наблюдателя). Промежуточные точки формируют значение общей освещенности для луча при помощи техники ray marching. Параметр используется при расчете однократных рассеяний и многократных рассеяний трассировкой фотонов. Неприменим (не используется) для метода диффузной дипольной аппроксимации. Типичные значения лежат в пределах 10 - 30 сэмплов на один луч.
10. Параметр max_photons задает максимальное число собираемых фотонов из карты рассеяний фотонов для оценки освещенности каждого сэмпла (см. max_samples) в расчетах многократных рассеяний трассировкой фотонов. "Рабочие" значения этого параметра могут составлять несколько тысяч фотонов для одного сэмпла.
11. Параметр max_radius определяет максимальный радиус сферического объема с центром в сэмпле, в пределах которого выполняется поиск и сбор фотонов. Единицы измерения радиуса - миллиметры, вне зависимости от единиц измерения сцены. Лог mental ray обеспечивает статистику по количеству фактически собираемых фотонов при данных настройках. Из лога всегда можно точно узнать сколько фотонов действительно собирается в пределах заданного радиуса, что очень удобно для коррекции настроек.
PHEN 0.2 info: "misss_physical_phen::physshader" multi-scatter photons per sample:
PHEN 0.2 info: samples: 33172
PHEN 0.2 info: minimum: 550.0000
PHEN 0.2 info: maximum: 4000.0000
PHEN 0.2 info: mean: 2338.3762
PHEN 0.2 info: variance: 2083465.8375
Приведенная выдержка из лога содержит информацию о сборе 4000 фотонов в пределах некоторого радиуса:
minimum - минимальное число собираемых фотонов;
maximum - максимальное число собираемых фотонов;
mean - среднее число собираемых фотонов на один сэмпл.
Вывод, который можно сделать из приведенной статистики сбора, - необходимость увеличить радиус сбора и/или количество испускаемых источником фотонов, чтобы обеспечить требуемые 4000 на сэмпл, поскольку среднее число собираемых фотонов при текущих настройках составляет 2338, то есть около половины требуемого количества.
12. Группа параметров
каждый может принимать два значения - true и false, что приводит к отключению или включению того или иного метода расчета подповерхностного рассеяния: метода дипольной диффузной аппроксимации, расчета однократного рассеяния и расчета многократных рассеяний методом трассировки фотонов соответственно. Можно включать и отключать использование этих методов в произвольной комбинации, правда, не все комбинации имеют смысл, см. математическую модель рассеяния.
Эти параметры скрыты в интерфейсе шейдера 3ds max со значением по умолчанию "on" для всех трех методов, то есть все три типа расчетов выполняются по умолчанию. Сделать эти параметры доступными в интерфейсе настроек шейдера можно отредактировав файл subsurface.mi (находится в папке: корневая директория 3ds max/mentalray/shaders_standard/include). Нужно открыть файл в текстовом редакторе, найти SSS physical shader и SSS physical material (достаточно выполнить поиск по "SSS physical") и удалить ", hidden" в разделе gui:
control "approx_diffusion" "boolean" (
"uiName" "Approx. diffusion",
"value" 1,
"hidden"
)
control "approx_single_scatter" "boolean" (
"uiName" "Approx. single scattering",
"value" 1,
"hidden"
)
control "approx_multiple_scatter" "boolean" (
"uiName" "Approx. multiple scattering",
"value" 1,
"hidden"
)
Удалять нужно ", hidden".
15. Параметр lights позволяет указать источник света, от которого рассчитывается подповерхностное рассеяние, делать это нужно обязательно.
Для расчета освещения материала с подповерхностным рассеянием можно использовать два способа. Первый предполагает назначение шейдера miss_physical (SSS Physical shader в редакторе материалов 3ds max) с одинаково настроенными параметрами одновременно и в слот материала поверхности и в слот фотонных свойств поверхности через mental ray Connection.
Второй способ проще - в списке материалов 3ds max 7 есть SSS Physical Material (mi), с которым можно работать как с любым другим материалом.
Оба способа равноценны, но второй удобнее.
Для успешного расчета подповерхностного рассеяния должен быть выполнен ряд следующих требований:
Для расчета SSS сильно рассеивающих материалов (альбедо > 0.7) лучше всего подходит метод расчета многократных рассеяний трассировкой фотонов в сочетании с дипольной диффузной аппроксимацией. Если диффузная аппроксимация порождает артефакты, при помощи параметра depth можно попробовать увеличить глубину диффузного слоя, уменьшив depth.
Если на рендере с использованием фотонов появляются черные пятна, это говорит о том, что для некоторых лучей не нашлось фотонов в карте для оценки освещенности. Выхода три - увеличить общее число фотонов, увеличить радиус сбора или увеличить количество сэмплов для одного луча.
Теперь перейдем к практике и рассмотрим несколько простых примеров, позволяющих "почувствовать" расчет подповерхностного рассеяния.
Для этой цели я использовал простую сцену с моделью-образцом в виде куба 1х1х1 см, которому назначен рассеивающий материал (молоко). Образец находится внутри замкнутого объема и освещается одним узконаправленным источником типа direct с минимально возможным угловым значением створа лучей. В сцене имеется 5 камер, расположенных с шагом 45 градусов относительно друг друга, три из них перпендикулярны разным граням куба-образца (верх-бок-низ).
Скриншот тестовой сцены
Ниже приведены результаты расчетов подповерхностного рассеяния для различных случаев.
Дата добавления: 2015-10-28; просмотров: 85 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Физическая модель подповерхностного рассеяния в mental ray – SSS Physical Material | | | Тест 1. Расчет подповерхностного освещения методом однократного рассеяния |