Погружение в ментал (освещение часть 2 – каустика и объемы)

Всем доброго времени суток!

Во второй части урока про освещение, я сначала опишу эффект каустики, его настройку и шейдер фотонов Photon Basic (base), потом шейдеры внутреннего объема parti_volume и  parti_volume_photon и их применение. В конце урока я опишу как используя эффекты, рассмотренные в уроке, сделать сцену для тестирования огранки драгоценных камней.

Урок рассчитан на пользователей 3d Max 2008 и содержит примеры сцен.

При создании урока я рассчитывал, что читающий ознакомлен с уроком «Погружение в ментал (шейдерный материал mental ray»

1.     Эффекты каустики (Caustic)

Каустика - это эффект непрямого освещения, получаемый с помощью каустик-фотонов, генерируемые источником света. Этот эффект можно разделить на две части – эффект создаваемый отразившимися фотонами от поверхности объекта

 

рис №1

и эффект создаваемый фотонами при прохождении объема объекта имеющего прозрачность и коф. преломления выше единицы.

 

рис №2

Для включения каустики необходимо соблюсти несколько условностей:

  1. Включить режим расчета каустики в настройках рендера:

    В закладке «Indirect illumination» (непрямое освещение) найти раздел «Caustics and Global Illumination» и поставить галку в разделе Caustics – Enable:

     

    рис №3

    остальные параметры, как правило, в редактировании не нуждаются и можно в 99 случаев из 100 их не менять:

    Maximum Num. Photons per Sample - определяет количество фотонов, которое будет использоваться для расчета освещенности одного фрагмента (Семпла) поверхности.

    Maximum sampling Radius  - максимальный радиус фрагмента поверхности (Семпла) для расчета каустики, при отключенном значении радиус назначает рендер самостоятельно.

    Filter – фильтр применяемый для расчета размера вклада в освещенность каждого фотона в одном семпле. Box, самый простой.

  2. Следующие условие это включить объект, от которого мы ждем каустику, в расчет последней. Делается это из меню свойств объекта (вызывается правой клавишей мыши при выделенном объекте). В меню свойств есть закладка «mental ray» где и необходимо выставить галку на генерации каустики:

     

    рис №4

    по умолчанию все объекты исключены из расчета каустики.

  3. Третье условие это настроить источник света, то есть включить ему генерацию каустик фотонов. По умолчанию все созданные источники света генерируют как фотоны каустики, так и фотоны GI. При этом используются глобальные настройки сцены по количеству фотонов и их затухание с расстоянием.

    В свойствах источников света есть закладка –mental ray Indirect Illumination. Параметры в которой разделены на две части – верхняя – генерировать фотоны учитывая настройки в свойствах рендера (включена по умолчанию) и генерация фотонов не учитывая настройки рендера, выбор нужного расчета выбирается установкой галки в соответствующем разделе:

     

    рис №5

    параметры для всех источников сцены, на основе которых производиться автоматический расчет  количества/качества фотонов (действует по умолчанию) устанавливаются в настройках рендера, закладке «Indirect illumination» (непрямое освещение),раздел «Caustics and Global Illumination» - пункт Light Properties:

     

    рис №6

    Caustic Photons (Average Caustic Photons per Light) это количество фотонов испускаемых источником света, при настройках автоматического расчета в настройках источника, выставляется не количество фотонов, а множитель.

    Decay – это затухание фотонов с расстоянием – для чистых прозрачных объектов он равен 2 (установлено по умолчанию) а для мутных прозрачных объектов можно установить 3 , дабы имитировать подслойное рассеивание и  затухание, бОльшие значения выставлять нецелесообразно.

    Параметр Energy – начальная энергия (яркость) фотонов, при настройках автоматического расчета это множитель для параметра Multiplier, основных настроек каустики (рис №3), а в ручных установках цвет и энергию фотонов можно выставить вручную. Необходимо помнить, что указанный цвет фотонов, складывается с цветом свечения источника света.

  4. И последнее условие – материал объекта должен иметь шейдер фотонов. Все предустановленные менталовские материалы имеют этот шейдер, а если материал делается вручную на основе материала mental ray, то его необходимо задавать.

Закончим с теорией и перейдем к практике:

Рассмотрим шейдер фотонов  Photon Basic (base)

В настройках выставляется цвет (карта) диффузного отражения – Diffuse.

Цвет(карта) зеркального отражения – Specular.

Прозрачность объекта – Transparency.

И коэффициент преломления.

 

рис №7

Необходимо запомнить одну особенность при построении своего материала, вытекающую из-за шейдерной структуры материала – все параметры настроек шейдера ни в коем случае не связанны с настройками шейдера поверхности (шейдеры Surface)  -  если поверхность материала объекта прозрачна, а в прозрачности и зеркальности шейдера фотонов стоит 0 (черный цвет), то каустики не будет. Такая система представляет определенную сложность в настройках, но и дает гибкость в построении материала. Ниже я покажу как сделать зависимости между параметрами шейдеров, дабы не путаться в настройках.

Для примера поэтапно настроим шейдер для красного стекла:

Устанавливаем в слот Photons , шейдер Photon Basic (base) и применяем его на какой-нибудь объект (подробно о структуре материала mental ray и подключении шейдеров к стандартным материалам см. урок «погружение в ментал (шейдерный материал mental ray)»)

Для своего примера я взял простейший объект – Box с материалом,  где в качестве поверхности шейдер Glass(lume) настроенный на красный цвет.

Рендер с параметрами по умолчанию:

 

рис №8

как видим, несмотря на то что стекло прозрачно, мы не видим каустики от прохождения фотонов сквозь объект, в наличии только зеркальная каустика.

Теперь я покажу как можно сделать зависимые параметры между настройками разных шейдеров. Нам необходимо связать параметры диффузии, зеркальности и коф. преломления между шейдером glass(lume) и Photon Basic (base).

  1. числовые значения – коф. преломления. Напрямую сделать зависимыми числовые значения нельзя, копировать с зависимостью (instance) мы можем только карты, поэтому назначим на коф. преломления (неважно в поверхности или в фотонах) карту «Output», в настройках выставим только выходное значение «Output Amount», я поставил значение равное 2, которое и будет нашим коэффициентом преломления.

     

    рис № 9

    теперь с помощью левой кнопки мыши скопируйте карту из слота для карт

    и вставьте его в аналогичный на другом шейдере с параметром Paste (Instance).

    Теперь меняя значение «Output Amount» карты в составе любого шейдера, изменяться все зависимые значения, при этом реально заданное числовое значение в самом шейдере игнорируется (у меня оно осталось равно 1,5 а применяется 2 из карты).

  2. для задания цвета с помощью карты можно использовать «RGB Tint»:

 

рис №10

настраиваем и делаем копии как и в первом случае.

Теперь рендер после настроек зависимостей:

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

В разных шейдерах прозрачных материалов свойства прозрачности задаются разными способами (отдельно цветом, либо числовым значением и цветом фильтра итд. ) поэтому тут сделать явную зависимость не всегда получиться. Я поставил вручную значение 0,5 (0 – непрозрачно, 1 полная прозрачность ) использовать какой- то преобладающий цвет в прозрачности тут ИМХО не уместно, так как он будет выступать в качестве дополнительного фильтра только для фотонов каустики прошедших через объект и будет не соответствовать оптическим свойствам объекта. Конечно если стоит цель с физической точностью изобразить предмет и подчеркнуть свойство материала имеющего определенный спектр поглощения тогда  придется указывать тут либо цвет, либо на градиенте несколько цветов.

Например у циркона их четырнадцать, с длинами волн: 691; 689; 662,5; 660,5; 653,5; 621; 615; 589,5; 562; 537,5; 516; 484; 460; 432,7 нанометров в оптическом спектре :-).

Опять же если вернуться к физике, то значение отраженных каустик фотонов должно смешиваться со спектром света от источника освещения, поскольку на полированных гранях часть фотонов (физических, а не Максовских) отражаются от поверхности полностью (то есть во всем объеме спектра) а часть взаимодействует с поверхность углубляясь в материал, или проходя через микроскопические неровности и  теряются (в определенном спектре). В нашем случае цвет отражения необходимо смешать (через карту Mix) с цветом источника света (сложный способ для любителей программировать), или просто установить в слот более бледный цвет в отличии от диффузного.

и так  с установленной прозрачностью 50% и измененной Specular:

как бы с точки зрения распространения света все нормально, но вот смущают неоднородности на освещаемых участках.  Виной тому очень маленькое количество фотонов испускаемых источником света. Увеличиваем их  количество в 100 раз (рис №5 ) и повторно рендерим:

скачать сцену для 2008 Макса

добавив в спектр источника света желтого цвета, и не меняя свойство материала, получим правильный перерасчет и эффекта каустики: 

Закончим с данным простым, но интересным эффектом.

2.    Объемы

Шейдеры объемов позволяют включить в процесс визуализации внутренний объем объекта, путем описания характеристик прохождения света под поверхностью, и реализуются двумя способами –

  1. на основе прямого освещения, работает шейдер parti_volume
  2. на основе визуализации фотонов GI и Каустики,  работают шейдеры parti_volume и  parti_volume_photon.

оба шейдера имеют одинаковые настройки, но эффект от их применения различается. parti_volume позволяет показать проникновение в объем объекта прямого света от источника и не является физически точным (упавший на стеклянный объект луч, можно будет наблюдать, как продолжения луча от источника света, без учета коф. преломления материала), а эффект от parti_volume_photon будет физически точным, но требует дополнительных ресурсов от машины, так как идет обсчет каждого фотона.

рис № 11

на рисунке луч в объеме стеклянного объекта под цифрой «1» сгенерирован, как продолжение луча источника света.  Луч «2» показывает физически точное распределение фотонов каустики в материале стекла, учитывая коф. преломления и, более того, назначенный шейдер фотонов prism_photon (дополнительный шейдер и в стандартный комплект Макса не входит – подробнее в уроке «Создание драгоценных камней») разложил свет на спектр, согласно значению дисперсии.

Алгоритм работы тут следующий: На материал объекта с шейдером поверхности glass(lume) назначен шейдер фотонов (prism_photon) , шейдер Volume (parti_volume) и шейдер Volume Photon (parti_volume_photon). Для объектов с назначенным шейдером parti_volume, начинает работать механизм ray marching, который и визуализирует прохождение света в объеме по двум направлениям – упрощенное для прямого света (луч «1»)  и используя визуализацию сгенерированных фотонов объема шейдером parti_volume_photon (луч «2»). Если отключить шейдер объемных фотонов, то второго луча не будет, если отключить шейдер объема, но не отключать шейдер объемных фотонов, то мы ничего не увидим, так как фотоны будут сгенерированы, но не визуализированы (ray marching, запускаемый parti_volume – не включен).

Настройки шейдеров parti_volume и  parti_volume_photon.

 

рис № 12

Mode – (0 или 1)  = рассчитывать эффект объема на весь объект =0 или на определенную в Height  высоту = 1. Нужно заметить что расчет высоты идет от горизонта сцены, а не относительно габаритов объекта в документации на шейдер об этом как-то забыли упомянуть и во время тестирования шейдера мне это сильно попортило кровь.

Вот пример применения высоты заполнения в режиме «1»

белая сетка символизирует плоскость с Z=0 заполнение объекта началось над сеткой где z=1 метру , соответственно Height  тоже равно 1 метру. Значение высоты может быть и отрицательным.

Scatter color – цвет фильтра для эффекта заполнения объема.

Extinction – коф. затухания эффекта в объеме.

r, g1,g2 -  коф. описывающие рассеивание света внутри объекта: g1 и g2 – это два коф, которые описываю прохождение света относительно плоскости падения света :

 

рис № 13

точка «L» это точка падения света

для каждого g справедливы значения:
- обратное рассеяние: -1 < g < 0
- изотропное g = 0
- прямое рассеяние: 0 < g < 1
а r это составляющая по распределению затухания  между g1 и g2, для g1 равно r, для g2 =  (1-r).

Схематичный пример : g1=1, g2=0,3 r=0,5

рис № 14

при отрицательных значениях g форма пятна по идее должна принимать гантелеобразную форму, но на практике не получилось увидеть.

Non Uniform – при значении = 0 – сплошное заполнение, при 1 – наличествует шум (неоднородности)

!!! Примечание : осторожнее с применением карт и значений выходящим за рамки от 0 до1 – видно разработчики не позаботились о проверках на некорректные значения. Отрицательные значения гарантированно сносят Макс, карты не органичные в разбросе значений в пределах от 0 до 1 тоже могут привести к аварийному завершению программы. 

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

Например простейший вариант:

скачать сцену для Макс 2008

Min/Max Step Length  - определяют качество расчета алгоритма заполнения чем меньше значения, тем детальнее визуализация.

Light Distance – значение которое используется алгоритмом для принятия решения использования минимального или максимального шага для просчета эффекта

No GI where direct – устанавливается для ускорения процесса визуализации, путем не учитывания GI фотонов.

Lights -   позволяет указать источники от которых будет учитываться расчет эффекта, если галка не стоит то расчет для всех источников на сцене.

С помощью использования шейдера parti_volume можно имитировать полупрозрачные объекты имеющие слоистую структуру – например разные пластики,  стекла и конечно драгоценные камни типа агатов, опалов, флюоритов итд.

А вот использование шейдера  parti_volume_photon может вывести визуализацию на новый уровень, поскольку в объеме объекта для которого работает алгоритм ray marching, визуализируются все фотоны непрямой иллюминации (и GI и каустика) даже те которые сгенерированы другим объектом. Например заключив сцену с интерьерным решением в объем с назначенным шейдером parti_volume мы увидим абсолютно все фотоны непрямой иллюминации – ярко освещенные объекты приобретут ореолы (фотоны GI),  сфокусированные в яркие пучки лучи (каустика) будут светиться. – то есть будет явный учет того что сцена находиться не в вакууме а в воздушной среде.

Но к сожалению во всем этом кроется большой минус – фотоны нужно уменьшать до микроскопических размеров (дабы сцена не была заполнена шариками из блудных фотонов) а их количество, генерируемое источником света увеличивать до запредельных величин.

Да, кстати – размер визуализированных фотонов указывается в настройках непрямой иллюминации в разделе Volumes:

размер и яркость одного фотона объема складывается из значения Максимального количества фотонов (GI и/или Каустики), которые его будут формировать и его визуального размера, что и позволяет настроить данный раздел.

Автор данной статьи попробовал сделать более менее законченную интерьерную сцену, где в объем комнаты источником света выпускалось 25 миллионов GI фотонов и 1 миллион каустик фотонов, что на самом деле было очень мало для данного решения – сцена обсчитаться не смогла с ошибкой нехватки ОЗУ. Насколько мне известно, при составлении карты фотонов тратиться порядка 25 байт на описание 1 фотона, плюс затраты памяти на систематизацию фотонов. Кароче такие расчеты не для 32 битных машин, тем более mental ни в какую не хочет юзать файл подкачки – только физическую ОЗУ.

Несмотря на большие затраты ресурсов, некоторую пользу от визуализации фотонов мы извлечем даже не на мощных машинах.

Создадим сцену для тестирования огранки драгоценных камней.

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

Данная сцена будет на самом деле очень простая и ее основа будет состоять из Бокса, который будет имитировать атмосферу, для визуализации фотонов каустики (а именно они нас и интересуют). Внутрь этой коробки мы и будем помещать тестовую модель камня.

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

Итак создадим материалы:

Атмосфера:

 

как видно шейдеры поверхности и затемнения представлены просто прозрачным материалом – аналог стандартного материала Макса с 100% прозрачностью. Назначен шейдер фотонов, в котором коф. преломления = 1 – дабы входящий поток света не преломлялся на входе, прозрачность = 100%, настройки шейдера объема можно оставить по умолчанию, нам он нужен только для запуска алгоритма ray marching.

Материал применяем на созданный примитив Box.

Далее материал ширмы:

тут нас поверхность совсем не интересует, но оставлять пустыми слоты нельзя, для этого есть специальный шейдер «transmat(physics)» который служит для создания объектов – пустышек,  настроек шейдер не имеет. В слот фотонов назначается шейдер фотонов с максимальной прозрачностью и коф. преломления = 1. настройки шейдера объемных фотонов и шейдера объема можно оставить по умолчанию, либо параметр Scatter color установить белым. Данный материал назначаем на ширму – тонкую пластину, тоже бокс (плоскость нам не подойдет , так как не имеет объема). Эту пластину расположим внутри объекта атмосферы со стороны куда падает лучь света от источника.

Располагаем бокс атмосферы и ширму в нем на сцене, создаем источник направленного света, который освещает ширму. Главное не забыть все объекты включить в расчет каустики и включить этот режим в рендере.

Теперь создаем материал для тестового камня, можно взять любой из предустановленных – от трассироваемого (Raytrace) до архитектурно-дизайнерских с профилем стекла, а можно и на основе «mental ray», главное не забыть добавить шейдер объема и фотонов объема (о назначении слотов шейдеров и подключении к менталу стандартных материалов см. урок «погружение в ментал (шейдерный материал mental ray)»).

Теперь помещаем в бокс камень, применяем на него материал, рендерим:

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

Скачать сцену под Max 2008

Можно сделать лучи более похожими на свет (яркими) поставив шейдер «Glare» на камеру:

слоты под шейдеры камеры находятся в меню настройки рендера (F10), закладке «Renderer»

к большому сожалению на тестовой сцене нельзя напрямую использовать мой любимый шейдер фотонов prism_photon , так как он генерирует только фотоны преломления, а фотонов отражения нет.:

можно конечно сделать материал смесь (Blend) с зеркальным материалом, но все равно из-за однократного отражения картина будет не полной.

Кстати про отражение и преломления: для фотонов непрямой иллюминации тоже существует глубина трассировки:

которая находиться в настройках непрямой иллюминации и ни как нельзя ее путать с основной глубиной трассировки рендера.

Для тестовой программы глубина по умолчанию в 5 уровней явно маловата – нужно будет увеличить хотя бы до 10.

Во время подготовки сцены для иллюстрации к уроку:

с 5 уровнями трассировки вторая призма преломления и отражений не давала.

На этом вторую часть повещенную освещению закончу. Осталось рассмотреть GI  и  материалы послойного рассеивания.

С Уважением КАА.

kaa936@rambler.ru

750 0 850 67
24
2008-07-08
Спасибо за проделанный труд.
2008-07-08
5/5
2008-07-08
5/5
2008-07-08
АААбалдеттттьь!!!!!!!!!! 5\5 (хочется 10\10) Спасибо!!! P.S. Хотелось бы узнать, а планируете ли вы описать внешнее и внутреннее освещение (екстерьер\интерьер) их ньюансы, возможности и недостатки..? Особенно хотелось бы вашего анализа mrSun\mrSky+mrPhoto\logarithmic exposure control, если чесно с этим я запутался вконец (что из них некорректно работает, экпоужур или мрСан\Скай...). По стандартным и фотометрическим источникам тоже хоцца анализа...
2008-07-09
Очень хороший урок :) 5/5
2008-07-09
Крут 5/5
2008-07-09
Отлично! Так держать )))
2008-07-09
Igni, да будет внутреннее освещение, GI я пока пропущу, так как начего там особо сложного нет. А вот к следующему уроку сделаю освещение помещения от А до Я - на примере небольшого офиса с большим количеством источников, с использованием IES'ок и фотометриков. правда это будет уже под 2009 макс
2008-07-09
под 2009 макс и нужно писать. Про дайлайт хотелось бы раскрытую тему увидеть.
2008-07-09
Здорово!
2008-07-09
Васщее, уважаю!!! СПАСИБО 5/5
2008-07-09
за неоценимый вклад в библиотеку уроков RENDER.RU, за регулярные, а главное актуальные уроки автор награждается [b][color=Maroon]+75 баллами[/color][/b] рейтинга и [b][color=Maroon]Аватарой[/color][/b] на сайте.
2008-07-09
Пора книгу уже издавать ! А ! Я уже говорил )))
2008-07-10
Спасибо, очень полезный и нужный урок.. max/max
2008-07-10
Извините но........ После прочтенного "погружения в mray" трудно сказать погружение,скорее поверхностное барахтание, темы нераскрыты,шейдера тоже (почему так,а можно и так....) К тому же уже существует крепкий труд по менталрею на русском, который трудно переплюнуть.
2008-07-11
Xform2006, не будьте голословным, поделитесь ссылкой на сей труд. я лично знаю теоритические статьи на http://www.fcenter.ru. И на iXBT есть хорошие статьи особенно про АО и sss, в остальных рускоязычных больше возникает вопросов, чем полезной информации. статей про то что меня больше всего интересовало ( объемы) я вообще не нашел, пришлось оттаткиваться только от пдф документа с кратким описанием шейдеров на аглицком. Нашел пример рендера, где в объем шара помешено подобие паучка - сделанно это (судя по описанию) чисто материалом - как такое сделать пока ума не приложу - процедурку так не настроить ( слишком паучек реальный), если в указанном Вами "труде" будет упомянут данный метод, то цены ему не будет
2008-07-12
А, кто тут голословен? Вот именно про статьи Игоря Сивакова я говорил. Мега мощная работа проделанна была. Я нивкоем случае нехотел обидеть вас. Просто уж выглядит кагбы на от...сь. То что лежит на поверхности и так очевидно на уровне хелпа. ....Вау,есть кнопка (отсчитать(новыми словами) и вся аудитория УРРААА. Блин смешно. Вам ненадоело есть макароны из года в год. ...... Вэяли и написали бы действительно интересный труд. Иногда немешает быть лишним,обьяснить начинающим,очевидные вещи для професионалов. Чтоб невыглядело ...есть кнопка,а более расширенные её функции ...сами догоните.... Опишите,разберите. Куча шейдеров,которые скрыты,как открыть,для чего служат,шейдера ис,шейдера камеры и т.д. ментал в анимации,как лучше. Вообщем ментал это целая нива для изучений :=) ..... Каким образом отсчитать шарик,это уж ваша проблема вы же уроки пишете.Значит есть время,вот и разбирайте. У меня его к несчастью нет,работы много :=( Удачи !!!!
2008-07-17
Впринципе я согласен с иксформом,погружением в ментал такую статью действительно не назовешь,статьи на IXBT читал еще давно-вот что очень помогло в освоении ментала,а также гномоновские 3 ДВД по менталу,где все рассматриваетяс неплохо,хотя и для майки ментал ,но принцип тот же :)
2008-07-17
а мне урок будет очень полезен! автор потратил время, и не зря... ++
2008-07-23
Спасибо очень нужная информация 5\5
2008-07-25
Думаю нада переходить на ментал, в топку вирай)))
2008-07-26
Побольше б таких полезных уроков.
2008-12-13
5/5
2009-01-12
Класный урок, обновленный. Для моего среднего уровня очень полезно знать. Короче 5/5
RENDER.RU