Подслойное рассеивание (SSS) в mental ray
Урок по практическому использованию модели подслойного рассеивания света (SSS) в mental ray. Проводится на базе 3D Max. Желательно использовать 3D Max 2009 и выше. Будет разобран материал SSS Physical Material (mi) и возможности его применения, создание материалов с эффектом SSS и общие принципы их настройки, предложены табличные данные с коэффициентами.
Вступление
В компьютерной графике наиболее широко используется модель двунаправленной функции распределения рассеивания (BSDF), которая включает поверхностное рассеивание (BRDF) и сильно упрощенное подповерхностное (BTDF). Такая модель не совсем корректно учитывает прохождение света в толще материала, но вполне подходит для быстрой имитации эффекта.
В 2001 году Henrik Wann Jensen, представил новую модель освещения BSSRDF ( двунаправленная функция распределения поверхностного рассеивания ). Суть новой модели заключается в том, что падающий на поверхность свет может выйти из модели претерпев преломление (однократное рассеивание) и может выйти из модели со смещением претерпев ряд переотражений и отклонений.
Такая модель из-за своей ресурсоемкости пока применяется довольно редко, в основном для точной передачи оптических свойств объекта переднего плана, но производительность техники растет и актуальность использования эффекта тоже возрастает.
В mental ray (рассматриваем с точки зрения работы в 3D MAX ) функция BSSRDF реализована в группе материалов SSS ( Subsurface Scattering in Surfaces ) которые можно разделить на группу нефизических (SSS Fast…) и физического SSS Physical Material (mi).
Первые обсчитываются быстрее, но менее точны, а второй максимально физически корректен. Он и будет рассмотрен.
Наглядно продемонстрирую эффект, который мы будем добиваться в нашем уроке:
Посмотрите на место падения луча на гранит:
Кроме ярко-освещенной точки никаких других световых эффектов не наблюдаем, про такой материал можно сказать что у него нет подслойного рассеивания в том виде, который бы нас интересовал и создать такой материал труда не составит.
Теперь фото падения луча на мрамор и кальцит:
Теперь явно видно прохождение света в объеме минерала с отклонением от изначального направления. Это и есть эффект подслойного рассеивания и этот эффект будет создан с помощью SSS Physical Material mi.
Physical Material mi
Свойства материала SSS Physical Material удобнее будет понять на практическом примере. Смоделируем светильник, у которого источник света будет геометрически изолирован, а свет будет выходить наружу по световодам из материала на основе SSS.
Светильник типа ночник:
Источник света помещен в герметично закрытый корпус, из которого выходят четыре световода (рожки), которые будут выводить свет наружу, рожки сделаем загнутыми, чтобы максимально осложнить распространение света.
На корпус назначаем любой непрозрачный материал. А рожкам-световодам SSS Physical Material (mi)
Первый слот Material – сюда назначается материал который будет отвечать за функцию BRDF, проще говоря, внешней оболочки материала, на которую потом будет добавляться эффект SSS.
Я назначил в этот слот стекло, так как световоды в основе своей прозрачны.
Использовался специализированный шейдер стекла Glass(lume).
Если нет шейдера подходящего для конкретной ситуации, то можно создать материал на основе любого другого материала и установить его сюда через Material to Shader.
Transmission – фильтр и яркость для SSS эффекта. Значение 0,5 по всем трем составляющим цветов не оказывает влияние на результат , уменьшение или увеличение веса составляющих делает эффект ярче или темнее, но в любом случае на рассеивание и поглощение не влияет.
Index of refraction – коф преломления материала.
Ближе к концу урока я дам табличку со значениями четырех основных параметров подслойного рассеивания для самых распространенных материалов
Absord. Coeff - Коэффициент поглощения света, величина обратно пропорциональная пробегу фотона в толще материала до полного поглощения. Чем меньше величина, тем дальше свет проникнет в материал.
Scatter. Coeff. – Коэффициент рассеивания света в материале. Чем больше значение, тем сильнее материал рассеивает свет внутри себя.
Нужно не путать эти понятия, поглощение снижает интенсивность света с расстоянием, а рассеивание, не снижая интенсивности распределяет свет внутри объема материала, при этом подсвечивание объекта изнутри возрастает. Оба коэффициента даны в трех значениях для каждой составляющей цвета – R G B.
Scattering anisotropy – Анизотропия рассеивания, принимает значения от -1 до 1. При положительных значениях рассеивание происходит вперед ( по ходу движения фотона), то есть у фотона больше шансов выйти с противоположной освещенной стороне материала и «подсветить» теневую сторону объекта (Рис №1). При отрицательных значениях происходит обратное рассеивание, то есть дополнительно подсветиться область рядом с местом падения света(Рис №2). Анизотропия равная нулю, равномерно распределит рассеивание во все стороны (Рис №3)
Далее в настройке материала идут вспомогательные параметры, о них позже, а пока заставим работать ночник.
Для работы физического SSS материала необходимо включить непрямое освещение, удобнее использовать Каустику.
- В свойствах объекта (рожки) ставим галку для участия в расчете каустики
- Включаем каустику в настройках рендера
Все параметры, кроме слота для материала оставляем без изменения, так как предлагается редактором по-умолчанию. Но для наглядности картины уменьшим коэф. рассеивания до 0,01
Свет от источника света (ИС) я умышленно сделал светло-голубым.
Можно делать первую визуализацию
Уже сейчас видна работа материала подслойного рассеивания, рожки проводят свет, но пока не в той мере, как хотелось бы.
Очевидно, что нужно уменьшить коэф поглощения. Ставим минимальное значение (Absord. Coeff = 0.001 0.001 0.001 ) это означает что свет в полном спектре будет распространяться с минимальным поглощением:
Свет закономерно распространился дальше.
Сравните изменение цвета излучаемого света. Во втором случае у нас явно начала пропадать синяя составляющая спектра. Происходит это из-за того, что учитывается поглощение света по составляющим цветам – синий поглощается больше, красный меньше. Чем больше пройденное расстояние в материале, тем это больше заметно. При настройке материала, нужно учитывать этот факт и корректировать значения с учетом цвета.
Продолжим улучшать результат.
Поглощение сделали минимальным, а свет пока не хочет бежать по всему объему рожек. Все дело в том, что рожки светильника кривые, и чтобы заставить свет «завернуть за угол» нужно повысить его рассеивание в материале. Увеличиваем параметр рассеивания до 0,5 (Scatter. Coeff = 0.5 0.5 0.5 )
Почти совсем хорошо, но слишком хорошо видна граница между светом по линии распространения и боковому рассеиванию.
Посмотрите на коэф анизотропии, по-умолчанию он равен 0,8, грубо говоря 80% света проходит в материале прямо и только 20% отклоняется «за угол». Очевидно что нужно уменьшить анизотропию рассеивания, я уменьшил до 0,4
В результате получился материал с минимальным поглощением света и сильным равномерным рассеиванием.
После небольшой доводки получилось следующее:
Коэф. Поглощения для зеленой составляющей цвета Absord. Coeff (G) выше, чем для красной и синей составляющей, сделано это для поглощения зеленого и пропускания фиолетового спектра.
В итоге:
Освещение стенки под светильником и окружающих предметов в идеале происходит за счет фотонов и за счет Final Gather. Но в старых версиях 3d max есть определенные проблемы с настройкой фотонов непрямого освещения (неустранимый цветной шум), в этом случае необходимо отключать прием каустики на предметах вблизи работы sss материала. Проблема в max 2010 устранена.
скачать сцену для 3d max 9 и выше.
В перечислении параметров я перепрыгнул через параметр Scale conversion, он служит для адаптации значений под единицы измерения сцены. Все коэффициенты рассчитываются на миллиметры и если сцена выполнена в других единицах, то здесь необходимо указать размер масштабирования:
Единица измер |
Scale conversion |
см |
10 |
м |
100 |
футы |
304 |
дюймы |
25,4 |
Также этот параметр можно изменять для достижения результатов, выходящих за рамки физически корректных, получения сверхпроводящих (свет) и сверхрассеивающих материалов, для этого достаточно увеличивать масштаб. Правда установив Scale conversion = 10, не нужно ожидать что материал в 10 раз дальше проведет свет, расчеты не линейные.
Depth – глубина проникновения. Объем объекта, к которому применен SSS Physical Material делиться на внутренний и внешний. Внешний объем начинается от внешней кромки объекта и на глубину Depth. Рассеивание здесь происходит максимально точно. В остальном объеме рассеивание рассчитывается по упрощенной схеме. На практике чем прозрачнее объект, тем желательнее увеличивать этот параметр. Цветные или отдельно висящие «шарики» внутри прозрачного объекта, явный признак недостаточной глубины.
Max samples – величина показывающая максимальное количество отклонений, отражений или преломлений фотона, после чего он перестанет учитываться. Чем больше это значение, тем более точным будет эффект, но потребуется больше места для карты фотонов и дольше будет производиться расчет.
Max photons – максимальное количество фотонов для расчета эффекта, увеличение количества сделает результат более качественным, но ресурсов будет расходоваться больше. Как правило, для окончательной визуализации нужно использовать значение от 3000 и выше.
Max radius – радиус семпла (площадки сбора фотонов) уменьшение делает расчет точнее, но требует повышения количества фотонов.
Lights – активация данной опции с указанием источника света (источников), привязывает эффект к выбранным ИС и не учитывает для остальных.
Все параметры рассмотрены.
Далее приведу табличку с параметрами для некоторых распространенных материалов. Рассеивание и поглощение даны общей цифрой для всех цветовых составляющих. В хелпе к 3d max есть подробные значения для четырех материалов, полученных опытном путем разработчиками. Но найти такие значения для любого материала проблематично. Поэтому для трех цветов пишется одинаковый параметр, а более точно выравнивается после предварительной визуализации в зависимости от потребностей и взаимодействием с диффузной составляющей объекта.
материал |
Absord. Coeff |
Scatter. Coeff |
Scattering anisotropy |
Index of refraction |
Парафин |
1,01 |
0,216 |
0,2 |
1,2 |
Воск |
0,5 |
1,5 |
0 |
1,3 |
Мед |
0,16 |
0,012 |
0,1 |
1,3 |
Масло сливочное |
0,285 |
3,02 |
-0,3 |
1,4 |
Мыло |
0,56 |
1,78 |
-0,5 |
1,45 |
Сок апельсин |
0,096 |
0,035 |
-0,2 |
1,3 |
Молоко |
0,016 |
1,82 |
0 |
1,3 |
Кофе раствор |
0,045 |
1,08 |
0,26 |
1,3 |
Шоколад твердый |
2,087 |
0,145 |
0,6 |
1,1 |
Вазелин |
0,25 |
0,23 |
0 |
1,4 |
Кровь свернувш. |
5,2 |
0,18 |
0,46 |
1,1 |
Кровь жидкая |
0,06 |
1,2 |
-0,2 |
1,3 |
Фарфор |
1,3 |
4,2 |
0,6 |
1,5 |
Мрамор чистый |
0,012 |
2,1 |
0,2 |
1,5 |
Мрамор слоистый |
0,04 |
3 |
-0,3 |
1,5 |
Резина, Латекс |
0,35 |
0,087 |
0 |
1,2 |
Порядок практической настройки SSS Physical Material, для материала данные на которого неизвестны
Покажу на живом примере:
На моем столе прописалась настольная лампа, устройство (в интересующем сейчас меня плане) следующее:
В металлической «воронке» находиться лампочка, а поверх воронки пластик, материал для которого я и хочу настроить
Найти где бы то ни было значения поглощения и рассеивания для неизвестного вида пластика практически невозможно, поэтому нужно подобрать значения максимально эффективно и желательно без огромного количества предварительных визуализаций.
Из своего опыта и здравого (надеюсь) смысла нужно придерживаться следующего порядка:
- Создаем материал для внешнего вида нашего объекта, так как привыкли раньше. Я сделал на основе Архетектурно-дизайнерского:
- Transmission устанавливаем в 0,5 (128) для каждого цвета
- Коэффициент преломления придется найти, но, как правило жидкости 1,3 твердо-мягкие материалы 1,1 до 1,4 и твердые неорганические от 1,4 и выше. Для пластика я беру 1,2
- Scattering anisotropy, в твердых телах, как правило положительная, в жидкостях-суспензиях отрицательная. Пластик в моем примере однородный и твердый ставлю 0,6
- Scatter. Coeff временно понижаем до 0,01
- настраиваем Absord. Coeff до требуемого прохождения света в глубину материала, в моем примере это оценить сложно, пластик тонкий, но по опыту сразу ставлю 3, но вообще необходимо будет сделать несколько предварительных визуализаций.
- настраиваем Scatter. Coeff до требуемого расхождения света «в стороны» от основного направления светового потока, после трех предварительных визуализаций я остановился на 15
В слот Material ставим карту Material to Shader и в единственный слот кидаем мышкой наш созданный материал:
Физические характеристики настроили, закончим качественными для хорошего рендера:
- Увеличиваем Depth если хотим более качественный результат и готовы пожертвовать временем. В материалах с сильным поглощением Глубину не имеет смысла увеличивать, а в материалах близких по прозрачности к стеклу – наоборот. Я ставлю 3 - на всю толщину пластика в моей модели.
- Max photons Увеличиваем количество фотонов до 4000 -5000
- Max samples Если у объекта очень сложная геометрия, то есть смысл увеличить этот параметр, но как правило оставляем по-умолчанию
- Max radius - если после визуализации есть зернистость на материале, то увеличиваем, если нет, можно попробовать уменьшить.
Готово:
В результате наших стараний, кроме подслойного рассеивания, получаем более правильный переход от света к тени на окружаемых поверхностях с учетом цвета пластика (зеленая область на листе бумаги) и правильное смешивание со спектром света от ИС (Теплый фотометрический ИС, добавил желтого спектра на освещенную сторону пластика)
Еще пример для сравнения материала с SSS и без него.
Использование процедурных 3D карт
При сильном желании и настойчивости с помощью SSS Physical Material и трехмерных процедурных карт можно имитировать довольно сложные материалы с неоднородной внутренней структурой ( визуально наблюдаемой). Надо сказать, что это занимает довольно много времени. При создании материала все настраивается «на глазок» и требует кучи предварительных визуализаций, а время визуализации подскакивает на порядок.
Трехмерные процедурные карты есть смысл ставить для следующих параметров:
Несколько советов:
- На коэфф. поглощения и рассеивания в процедурках недопустимо использование черного цвета (0,0 по всем цветам), визуализация аварийно закончиться.
- Рассеивание лучше поставить большим и менять его в случае удачной картинки после настройки поглощения.
- Одинаково настроенную процедурную карту использовать для рассеивания и поглощения нецелесообразно, а вот инверсию карты для второго параметра вполне нормально.
- Освещать подопытный объект несколькими источниками света.
В остальном советовать нечего, получение задуманного результата путем настроек карт на этих параметрах даже танцами с бубном не назовешь. Но хороший результат того стоит – универсальный материал с имитацией структуры объема.
Один из примеров:
Вот собственно и все. Кто-то может возмутиться- «А где же кожа?!» Действительно, рядом с понятием SSS всегда создание материала кожи. Но создавать слоистую структуру кожного покрова физически точным методом совершенно непрактично, для этой цели есть специальный узкоспециализированный материал и все желающие могут поучаствовать на форуме Render.ru (ветка mental ray) в его обсуждении и принять участие в настройке.
Успехов!
С Уважением, КАА.
Kaa936@rambler.ru