3d max модели авто mental ray
Погружение в ментал (шейдерный материал mental ray)
Доброго времени суток!
В этом уроке я хочу показать структуру и использование шейдерного материала mentalf ray. Покажу использование и назначение основных шейдеров для этого материала и эффекты, которые возможны в Mental Ray. Урок носит справочно-обзорный характер и несет цель раскрыть «прелесть» шейдерного материала в MR, без глубокого описания каждого использующегося шейдера (которым я посвящу отдельные уроки). Материалы предназначены для работы в Max 2008 и выше, с установленным по умолчанию рендером Mental Ray, отдельно помечены пункты, где пример дается с использованием дополнительных шейдеров. Урок комплектуется файлами сцен.
Основным материалом MR является одноименный материал mental ray. При назначении мы получаем набор из пустых слотов для назначения шейдеров различных свойств:
также можно осуществить «подключение» mental ray к стандартным материалам 3D max, и готовым материалам Mental Ray, через закладку в свойстве материалов «mental ray Connection»:
свойства которые уже используются помечены замочками, но это не мешает нам их поменять при надобности, разблокировав замок и установив нужное в соответствующий слот.
Опишу каждый слот отдельно и выборочно наиболее актуальные шейдеры, которые можно назначать в них.
Первая группа шейдеров «Basic Shaders» описывают сам материал.
Surface – поверхность, служит для формирования внешнего вида объекта.
Как правило для получения корректной картины в эти слоты назначается один и тот же материал с зависимыми по изменению параметрами (instance), но не кто нам не запрещает изобразить физически невозможный материал например камень у которого тень как у стекла, для этого в слот Shadow нужно поставить шейдер прозрачного материала, а в Surface шейдер нужного нам материала:
Посмотрим основные материальные шейдеры для поверхности и затемнения:
Принцип данного материала в уроках уже рассматривался, посмотрим, что реализовано в mental ray.
Если назначить «чистый» АО в качестве поверхности на материал, получим расчет сцены с имитированием глобального освещения но без учета диффузного и других свойств материала.
bright: цвет лучей источника света
dark: цвет неосвещенных поверхностей
spread: определяет качество теней при 0 (расчет одним лучем) тени контрастные, при 1 (освещение лучами со всей полусферы) тени мягкие.
Max distance: расстояние, которое берется в расчет теней вокруг объекта, при 0 считается вся сцена.
Reflective: флаг переключающий режим Ambient Occlusion / Reflective Occlusion
Type : 0 – режим АО, 1 – АО с учетом окружения (цвет либо карта), 2 – режим когда цветовой гаммой указывается отклонение нормалей относительно мировых координат, 3- тоже что и 2 только относительно камеры.
Return … alpha – при рендере дополнительно в альфа канале строиться карта АО
Как правило, чистый AO используют только для получения масок изображений и дальнейшего использования их в других программах.
В Максе шейдер АО можно назначать на значения Ambient материалов (если он есть) или использовать смешивание с диффузным отражением для имитации глобального освещения(можно устанавливать на параметр Bright карту HDR).
На рисунке сцена с одним источником света (omni) и добавленным АО во все Diffuse материалов (дополнительно наложена HDR).
Исходя из названия это имитация автомобильной краски.
В настройках шейдера огромное количество параметров.
Параметры диффузного цвета разделены на четыре части. Базовый (Base color), окружающий (Ambient), а так же дополнительно цвет на освещенных гранях напротив камеры (Light facing color) и цвет поверхностей находящихся под большим углом к камере (Edge Color). Цифровые параметры регулируют (образно говоря) масштаб применения этих цветов.
Flake Color это цвет вкраплений в краску, которая и создает нужный эффект далее идут настройки их количества, масштаба применения и размера, хочу отметить, что отдельно можно отрегулировать их отражающую способность «Flake Reflection»
Ниже закладки с настройками рефлексии и глянца.
Итак, сделав предложенные диффузные цвета одинаковыми(с небольшим различием по яркости), мы получим обычную глянцевую краску автомобиля, а настроив каждый цвет отдельно – краску «хамелеон» или «перламутр», добавляя Flakes’ы, имитируем «металлик» (если металлик не нужен, Flakes’ы покрасьте черным)
на данном материале впечатляет скорость работы рендера.
Так называемый диффузный, глянцевый и отражающий материал. Из названия уже понятно зачем он нужен. Настройки:
Diffuse – цвет материала
Glossy Highlights – цвет бликов
Specular – отражаемый цвет
IOR – коф преломления
В отличии от стандартного материала, DGS свои функции выполняет по всем физическим законам, например, чем дальше объект от отражающей поверхности, тем он более размазан (регулируется параметром блеска).
Стоит отметить, что иногда в областях блеска сильно видны неоднородности, исправляется это изменением количества семплов на пиксель в настройках рендера. На рисунке видны отличия одной и той же сцены и параметры, приводящие к этим результатам:
Шейдр для создания светящихся поверхностей. В настройках прост – устанавливаем цвет поверхности и диффузного отражения, потом указываем цвет которым он будет светиться (Glow) и яркость свечения (Brightness). Галка «Mix diffuse» заставляет смешивать цвет поверхности и цвет свечения. Параметр прозрачности думаю актуален только в анимации, чтобы «убрать» объект со сцены из контроллера.
Особенность : материал будет работать только с включенным Final Gather (F10 >> Indirect Illumination >> Final Gather> Enable FG)
Шейдр наносит растровый рисунок на видимую часть объекта, к которому применен данный материал, при этом рисунок будет всегда повернут к камере, независимо от расположения объекта. Геометрия объекта полностью не учитывается, а вот расчет световых эффектов накладывается согласно форме этого объекта. Такое свойство можно использовать при создании спец эффектов и низко полигональном проектировании.
Например вы хотите сделать ролик как инопланетяне высаживаются рядом с вашим домом :-). Фотографируете дом, делаете сцену, на которой дом заменит параллелепипед, ставите камеру на сцене в то место откуда делалось фото (нужен тот же ракурс). Потом применяете к параллелепипеду материал с поверхностью Façade и растром фото дома. Рисуете НЛО и опускаете его рядом с домом. Тень от НЛО ляжет на растровую картинку не прямо, а с учетом углов и ориентации параллелепипеда.
Очень привлекательный шейдер с точки зрения физики, но крайне ресурсо-емкий, имитирует подслойное рассеивание света. В 3D графике материалы представляют собой каркасы обтянутые пленкой материала и как правило прохождение света в толще материала не учитывается – только на входе и на выходе. Материалы на основе данного шейдера просчитывают проникновение фотонов в толщу материала и дальнейшею их судьбу. На рисунке представлен материал на поверхность которого падает свет и вызывает свечение в толще объекта:
material : в данный слот назначается шейдер материала, для которого будет рассчитываться эффект подслойного рассеивания (как правило glass или DGS.
Transmission цвет или карта, которая будет фильтровать входящий в материал поток света (если цвет = #000000, свет в материал не будет проникать)
IOR коф преломления материала.
Внимание эти два коэффициента указываются отдельно для каждой составляющей цвета (RGB) при этом по умолчанию синий цвет имеет преимущество. На коэффициенты можно устанавливать 3d процедурные карты, для имитации внутренней структуры материала. Правда в Max 2008 вероятно есть с этим ошибка, рендер объекта с материалом sss и 3d картой на рассеивании, проходит через раз (просто виснет на определенном проценте выполнения), в 2009 максе – проблем нет.
Сцена с таким эффектом, только для 2009 макса.
Scattering anisotropy – анизотропия 0 нет, 1 и (-1) анизотропия 100% для направления внеред\назад.
Далее параметры семплирования фотонов и указание источника света, от которого идет расчет эффекта.
Важно: объекту с данным материалом, должна быть назначена каустика, рендеру включен режим каустики, и источник света тоже должен участвовать в расчете каустики. При расчете эффекта могут возникать артефакты в виде отдельных фотонов в слое материала который находиться за пределами величины Depth, это обусловлено включением упрощенного алгоритма просчета для данной области. Для точной картины воспроизведения картины рассеивания необходимо для материала и источника света назначать большое количество фотонов каустики и GI (если включен GI), соответственно требуется много памяти, на моей машине масштабные сцены заканчиваются сообщением о нехватке ресурсов, на машинах х64, думаю с этим проблем не будет.
На рисунке к ровной плоскости назначен материал стекла с шейдором Ocean, который имитирует волны.
Diffuse – цвет самого стекла
Reflectivity – отражение (0-1)
Transparency – прозрачность (0-1)
Transparency Tint – судя по заявлению Lume( в мануале к шейдору), этот параметр позволяет более реалистично засчитать проходящий через стекло цвет, и позволяет смешать его с дополнительным user color.
Blur Transparency – устанавливает размытее прозрачности
Edge Transparency – позволяет руками настроить прозрачность поверхности в зависимости от угла зрения
Edge Shadow – позволяет настроить тень от объекта, а точнее пятно от эффекта каустики.
Translucency – одностороння прозрачность – настройка прозрачности на гранях, нормаль которых повернута от камеры.
Шейдр назначается в слот материала, но при использовании эффекта каустики для данного материала требует назначения шейдера фотонов в соответствующий слот материала ( подробности ниже).
На этом с основными шейдерами поверхности закончу.
Переходим к группе шейдеров Caustic & GI.
В слот Photon, как правило устанавливается шейдер фотонов: «Photon Basic» для прозрачных материалов или «Transmat Photon» если фотоны нужно принудительно убрать.
В настройке шейдера Photon Basic указываются основной цвет материала, цвет отражения и прозрачность, на основании которых вычисляется цвет фотонов прошедших через материал и цвет фотонов отразившихся от него. Также указывается коэффициент преломления материала.
внимание : для того чтобы от объекта генерировалась карта фотонов каустики, необходимо в настройках объекта (вызывается через правую кнопку мыши) указать генерирование каустики:
Оба шейдера имеют абсолютно одинаковые параметры, но Parti Volume Photon применяется для фотонов (будет виден каждый фотон), а «Parti Volume» для всего объекта (что-то вроде объемного света для источника света, но внутри объема).
Примечание «Parti Volume» наверное должен называться «Party Volume», но что есть то есть :-).
Mode режим просчета, если 0 то эффект считается для выбранного источника света, а 1 для всей сцены без источника света. По идее должно быть 2 для всех истточников….. но проверил…. Не работает.. тоже что и 0.
Scatter color фильтр цвета заполнения либо для фотонов либо для всего объекта, в зависимости от шейдера.
Extinction – параметр показывает ослабление эффекта с глубиной
последние параметры указывают качество семплирования и используемый источник света.
Примечание – привожу только поверхностное описание данных шейдоров, так как из-за их сложности им нужно посветить отдельный урок (работа алгоритма ray marching)
Пример работы шейдеров в стекле:
а вот вместо стандартного шейдера фотонов (Photon Basic) назначен шейдер с эффектом дисперсии prism_photon о котором я писал в первом уроке.
несмотря на то что описанные эффекты работают только в объеме конкретного объекта, допускается применение шейдеров для вложенных объектов.
На сцене, приведенной ниже, шар помещен в куб, которому в качестве поверхности назначен прозрачный материал и шейдер Parti Volume в слот Volume. Эффект Volume минимизирован (чтобы не мешал) а эффект Photon Volume максимизирован. Справа находиться источник света, от которого мы видим объемный эффект каустики от сферы.
вот еще сцена с призмой и шейдером prism_photon, вместо стандартного шейдера фотонов
каждая точка это один фотон. Размер отображаемых фотонов устанавливается в настройках рендера (F10), закладка Indirect Illumination, раздел Volumes.
Но просто объемным заполнением мы пользоваться можем, применяя карты для фильтрующего цвета, можно получать красивые эффекты для свой сцены с объемным заполнением материалов:
Environment – в данный слот назначается шейдер Environment(3dsmax) в котором можно указать растровую карту которая будет учитываться как окружение для объекта на который назначен данный материал. Это удобно когда визуализируется отдельный объект на однотонном фоне, но необходимо подчеркнуть свойства рефлексии для поверхности, а отражать на сцене собственно и нечего.
Остались не рассмотренными два слота под шейдеры: Bump и Displacement оба имитируют неровности на прямых гранях объекта.
С первого взгляда эффект от применения шейдоров похож, но Bump просто накладывает маску теней и при больших значениях эффекта работать будет некорректно, так как видимый контур не меняется, а Displacement имитирует настоящее смещение. Урок по Displacement в mental ray уже есть, а на Bump останавливаться не буду, он довольно прост и работает аналогично как и в стандартных материалах.
На этом обзор по материалам и шейдерам mental ray закончу, позже отдельно сделаю урок для GI и АО в ментале, и возможно объемному заполнению.
Как использовать все возможности mental ray в работе с 3ds max. Часть 6. Материалы
Если рассматривать mental ray с функциональной точки зрения, то его можно разделить на два основных блока: первый отвечает за трассировку лучей и всего, что с этим связано, второй блок является набором материальных шейдеров.
Разделение mental ray на трассировщик и материальные шейдеры очень схематично. В настоящее время шейдеры можно написать практически для любой функции рендеринга. Кроме материальных, для программирования доступны следующие типы шейдеров: геометрические (процедурная геометрия), объемные (volume), фотонные (photon и photon volume), окружения (environment), освещения (light), displacement, теневые (shadow), contour, расчет карт освещения поверхности объектов (lightmap), шейдеры вывода для камер (output) и некоторые другие.
Тем не менее, упрощенное представление работы mental ray, как совместного функционирования трассировщика и материального шейдера, позволяет четко понять основную схему расчета изображений. И такое понимание может стать ключом к успешной работе с mental ray, как для художников, так и для программистов. Конструкция стандартного материала
Материалы определяют вид геометрических объектов. Указание материала при определении геометрического объекта выполняется по его имени, при этом сам материал должен быть предварительно определен (определен до его первого использования в каком-либо геометрическом объекте). Для полигонных объектов указание имени используемого материала обязательно выполняется для каждого полигона, либо явным указанием его имени, либо при помощи тэгов. Правила определения полигонных объектов подробно рассматриваются в обзоре «Как использовать все возможности mental ray в работе с 3ds max. Часть 4. Геометрические объекты».
Разработчики 3ds max решили отойти от этого правила. Так, они включили описание источников света непосредственно в определение объекта при помощи специальной структуры пользовательских данных max_NodeData. Эти данные содержат поля «illuminators» и «shadowmakers», определяющие источники света и расчет теней от них.
В остальном, конструкция материала в 3ds max, реализованная при помощи mental ray Connection и mental ray material, совершенно аналогична конструкции, используемой в mental ray.
Определение материала на языке описания сцен mental ray выглядит следующим образом:
material | » material_name « |
[ opaque] | |
material | shader [shader_list] |
[ displace | shader [ shader_list]] |
[ shadow | shader [ shader_list]] |
[ volume | shader [ shader_list]] |
[ environment | shader [ shader_list]] |
[ contour | shader [ shader_list]] |
[ photon | shader [ shader_list]] |
[ photonvol | shader [ shader_list]] |
[ lightmap | shader [ shader_list]] |
end material |
Как видите, конструкции материалов совершенно идентичны.
Итак, определение в mr материала выполняется конструкцией
material «material_name» … end material
Ввиду особой важности материального шейдера, мы рассмотрим его подробно.
Хотя набор задач материального шейдера выглядит внушительно, он довольно прост, а стандартизация его функций позволяет ожидать от любого типичного материального шейдера совершенно одинакового поведения.
Таким образом, в mental ray весь процесс получения окончательного цвета для одного луча можно описать следующей стандартной последовательностью операций.
2. После нахождения точки пересечения первичного луча и поверхности какого либо объекта, создается так называемое «состояние» (state). Состояние есть ничто иное, как структура данных, включающая разнообразную информацию о состоянии mental ray в момент пересечения. Эта информация необходима для расчетов материальных шейдеров и активно ими используется.
Таким образом, сразу после пересечения mental ray формирует структуру данных «состояние», вызывает на исполнение материальный шейдер и передает ему состояние в качестве одного из параметров. Теперь материальный шейдер запущен на расчет и обладает всей необходимой полнотой информации как о состоянии, которое его вызвало, так и о настроечных параметрах, переданных от пользователя (3D программы), которые нам более знакомы и привычны- цвет, текстура и другие.
3. Материальный шейдер начинает расчет тех задач, о которых упоминалось выше.
Прежде всего определяется список активных источников света. Определение материала позволяет исключать некоторые источники из расчетов (параметры light и mode в настройках материальных шейдеров).
Примечание. Поскольку 3ds max использует собственную схему указания источников света для объектов, параметры light и mode скрыты. Если работа ведется только с light шейдерами 3ds max, эти параметры не понадобятся. Если же потребуется работать с исходными light-шейдерами mental ray, скорее всего, их придется открыть.
Далее, для каждого из активных источников света вызывается его light-шейдер. Он рассчитывает цвет и интенсивность освещения от источника, затухание освещения в зависимости от направления и расстояния, трассирует блокирующие свет объекты и рассчитывает тени.
Световой шейдер возвращает рассчитанную интенсивность и цвет освещения, направление на источник света, расстояние между источником и точкой и, возможно, некоторые другие параметры, которые могут потребоваться материальному шейдеру. Световые шейдера могут учитывать и более сложную анизотропию излучения и геометрические свойства протяженного источника, как это делает, например, шейдер physical light.
Примечание. Шейдер physical light учитывает анизотропию излучения для протяженных источников, рассчитывая угол между направлением на освещаемую точку и нормалью поверхности источника в точке сэмплирования. Зависимость интенсивности излучения от этого угла определяется по закону косинуса. Шейдер physical light обладает настроечным параметром, позволяющим задавать степень косинуса угла и тем самым изменять изотропию излучения: чем выше степень, тем более выражен пик в направлении нормали источника. Кроме того, physical light позволяет задавать произвольный закон затухания освещения с расстоянием. В отличие от него, базовые источники типа omni, spot, directional могут рассчитывать освещение только с линейным затуханием или без затухания вообще, не учитывают зависимость угла излучения и используют простые типы анизотропии.
Разработка моделей ведется постоянно и представляют собой интереснейшую область исследований. Появление новых моделей освещения обогащает компьютерную графику возможностями визуализации и является источником расширения библиотек материальных шейдеров. В качестве примера хочу привести шейдер path material, который появился в mental ray 3.4. Используемая в нем модель освещения довольна сложна и реализует так называемый двунаправленный path tracing, который позволяет рассчитывать все типы освещения в сцене, в том числе и вторичное освещение, методом рейтресинга, без привлечения фотонных карт и final gather.
5. Отражения и преломления. Если в свойствах материала заданы прозрачность или отражения, материальный шейдер будет выполнять трассировку дополнительных лучей, так называемых secondary ray или вторичных лучей. Сначала будет вычислено направление испускания вторичного луча в соответствии с законами отражения/преломления и значениями параметров материального шейдера, таких как коэффициент преломления. Затем выполняется трассировка вторичного луча и, в случае его пересечения с другим объектом, будет вызван материальный шейдер материала, назначенного этому объекту.
Далее произойдет расчет материального шейдера в объеме и последовательности, описанных выше и затем вновь рассчитанный цвет будет скомбинирован с цветом материального шейдера, запустившего трассировку вторичных лучей. Мы видим, что стандартизация функций материального шейдера позволяет довольно просто реализовать всю цепочку расчетов последовательным вызовом требуемых шейдеров.
6. Расчет вторичного освещения.
Наконец, после расчетов прямого освещения, отражений и преломлений, выполняется вычисление вторичной освещенности. Завершающим этапом работы любого материального шейдера mental ray является учет вторичного освещения при помощи методов final gather, photon map или caustic photon map.
Начиная с версии mental ray 3.3 введена новая, дополнительная процедура расчета вторичного освещения, которая позволяет переопределять настройки вычислений fg, gi и caustic индивидуально для материалов. Однако, ее использование в 3ds max требует программирования специального шейдера для поверхности геометрических объектов, через который должны подключаться материальные шейдеры.
7. После вычисления вторичного освещения, результат складывается с освещением, рассчитанным на предыдущих этапах и получается окончательный цвет для текущего первичного луча (сэмпла). Этот цвет записывается в буфер цвета mental ray и впоследствии фильтруется в соответствии с настройками суперсэмплинга (секция Sampling Quality панели Rendering в 3ds max).
Кроме цвета, материальный шейдер может управлять выводом и в другие буфера mental ray:
Оператор
displace sader [ shader_list]
и соответствующий слот свойств материала в 3ds max позволяют задать шейдер, который будет рассчитывать изменение геометрии объекта, смещая элементы поверхности вдоль нормали на рассчитанную скалярную величину, если используются displacement-шейдеры из стандартной библиотеки mental ray. Как и любой другой, этот шейдер может быть заменен другим с иным алгоритмом расчета смещения элементов поверхности.
Оператор
shadow shader [ shader_list]
задает шейдер, который будет вызван световым шейдером при расчете тени от объекта. Теневой шейдер предназначен для обслуживания расчетов, инициированных другими материалами, а не для расчета тени, падающей на данный объект. В этом смысле, это шейдер «для других». Теневой шейдер будет задействован только если тени рассчитываются методом трассировки лучей (ray traced shadow).
Оператор
volume shader [ shader_list]
Оператор
environment shader [ shader_list]
определяет цвет только вторичных лучей преломления/отражения, которые трассируются материальным шейдером и не пересеклись ни с каким объектом сцены, но не для первичных лучей. Таким образом, шейдер окружения в материале позволяет определить, какой фон материал будет отражать или преломлять. Удобным моментом является индивидуальность такого определения для каждого материала. Шейдер environment, назначаемый для камеры, определяет цвет для первичных лучей из камеры, если они не пересеклись ни с одним объектом сцены и вышли за ее пределы.
Оператор
contour shader [ shader_list]
позволяет назначать контурные, или не фотореалистичные шейдера, имитирующие рисунок.
Оператор
photon shader [ shader_list]
еще один оператор, который не предназначен для вычислений цвета объекта, которому этот шейдер непосредственно назначен в составе материала. Шейдер используется только на этапе трассировки фотонов и создании фотонных карт, определяя как фотоны взаимодействуют с данным материалом. Расчет же фотонной освещенности объекта выполняется на основе настроек рендеринга в секции Indirect Illumination и никак не использует этот шейдер. В качестве фотонного шейдера могут быть использованы как специально написанные (например, photon basic), так и обычные материальные шейдера.
В последнем случае mental ray в состоянии автоматически определить, что материальный шейдер используется как фотонный. Наиболее правильным, с практической точки зрения, является использование в качестве фотонного шейдера материального шейдера dgs, поскольку он обеспечивает закон сохранения энергии при расчете переотражений фотонов.
Оператор
photonvol shader [ shader_list]
так же, как и photon шейдер, предназначен для трассирования фотонов. Когда фотон сталкивается с материалом, объемный фотонный шейдер вызывается для его трассировки.
Оператор
lightmap shader [ shader_list]
позволяет назначить материалу шейдер, который будет запекать в текстуру все падающее в данную точку освещение (illuminance или irradiance). Этот шейдер подробно рассматривался в обзоре «Mental ray для 3ds max. Часть 5. Запекание текстур (render to texture)»
Таким образом, конструкция материала в mental ray позволяет не только рассчитывать освещенность и цвет поверхностей объектов, но и определять, как объект затеняет другие объекты и какое окружение он отражает/преломляет, задавать объемные эффекты освещения, изменять геометрию поверхности при помощи растровых карт, определять взаимодействие фотонов с объектами, выполнять нефотореалистичный рендеринг и запекать в карты освещение.
Говоря о простоте и удобстве, нужно также упомянуть еще об одной замечательной возможности mental ray. Речь идет об определении значений параметров одних шейдеров при помощи значений, возвращаемых другими шейдерами (shader assignment). Это свойство позволяет строить цепочки шейдеров через их параметры, соединяя их в последовательности и сети для построения более сложных материалов или phenomena.
В 3ds max это правило работает «визуально», каждому параметру шейдера можно вместо постоянного значения назначить другой шейдер из списка доступных, который появляется при нажатии кнопки справа от константного значения параметра:
В 3ds max использование оператора apply в декларации шейдера с указанием его ключей является обязательным требованием и вызывает сообщение об ошибке, если оператор или его ключи не указаны.
Хотя mental ray и разрешает подключение произвольных шейдеров, если они совместимы по типу, следует четко понимать смысл и последствия создаваемой цепочки.
Подключение шейдеров в mi файле рассмотрим на примере назначения шейдера mib_cie_d в качестве цвета для светового шейдера точечного источника mib_light_point.
1. Прежде чем шейдера могут быть использованы в сцене, они должны быть декларированы:
declare shader | |
color | «mib_light_point» ( |
color | «color», |
boolean | «shadow», |
scalar | «factor», |
boolean | «atten», |
scalar | «start», |
scalar | «stop» |
) | |
version 1 | |
apply light | |
end declare |
declare shader | |
color | «mib_cie_d» ( |
scalar | «temperature», |
scalar | «intensity» |
) | |
version 1 | apply light |
end declare |
shader | «color_light» | «mib_cie_d» ( |
«temperature» | 2700, | |
«intensity» | 1) |
Здесь мы определили шейдер типа mib_cie_d с именем «color_light» и присвоили его параметрам «temperature» и «intensity» значения.
3. Теперь шейдер может быть использован как параметр другого шейдера, для этого достаточно в поле значения соответствующего параметра указать имя определенного ранее шейдера без параметров:
shader | «my_light» | «mib_light_point» ( |
«color» | ; = «color_light», | |
«shadow» | off, | |
«factor» | 0, | |
«atten» | off, | |
«start» | 0, | |
«stop» | 40) |
Для удобства написания и использования phenomena предусмотрены так называемые интерфейсные параметры. С их помощью phenomena передаются значения параметров извне, от пользователя. Также, важной особенностью phenomena является и то, что они позволяют управлять сложным набором шейдеров, каждый из которых обладает собственными параметрами, при помощи небольшого набора собственных параметров phenomena.
Назначение mib_cie_d в качестве параметра светового шейдера, в примере который мы рассмотрели чуть выше, может быть оформлено как phenomena.
shader | «my_light_color» | «light_color_phen» |
(«temp» | ; = 2500, | |
«inten» | = 1 |
Как и шейдеры, phenomena предназначены прежде всего для создания сложных материалов на основе более простых материальных шейдеров. Реальным примером сложных phenomena является материал sss_fast_skin, который подробно рассмотрен в обзоре «Mental ray 3.3 для 3ds max. Часть 4. Упрощенная модель подповерхностного рассеяния SSS Fast» (http://www.ixbt.com/soft/ss_fast.shtml). Или Car paint Phenomenon, который появился в standalone mental ray версии 3.4 (файл paint.mi) и представляет собой сеть из шейдеров mi_metallic_paint, mi_bump_flakes, mib_glossy_reflections, mib_color_interpolate и mib_illum_lambert.
Точный синтаксис определения phenomena выглядит следующим образом.
В определении phenomena могут быть использованы любые шейдера, конструкции материалов, источников света и инстансы. Блок options предназначен для указания только необходимых условий, которые обязательно должны быть выполнены, прежде чем phenomena может быть вызван. Перед рендерингом mental ray проверяет эти условия в декларациях всех шейдеров и phenomena, используемых в сцене, разрешает конфликты и настраивает глобальные опции сцены, чтобы удовлетворить этим требованиям. Полный список опций включает: scanline on|off, trace on|off, shadow off, shadow on, shadow sort, shadow segments, face front|back|both, derivative [ 1] [ 2], object space, camera space, volume level.
Оператор root имеет для phenomena совершенно особое и очень важное значение. Он выполняет две функции: во-первых он определяет результат который возвращает phenomena, во-вторых он может дополнять сцену различными элементами.
Возможные типы root:
root shader
в качестве возвращаемого значения определяется значение шейдера, как мы это видели в примере с light phenomena. По принятому соглашению в качестве результата phenomena должны быть указаны именные шейдеры без параметров: root = «name_shader». Тип результата шейдера должен совпадать с декларированным типом phenomena. Этот вид phenomena является основным для практического использования и эквивалентен регулярному шейдеру.
root material » material_name »
указывает, что сконструированный phenomena будет материалом, при этом тип phenomena в декларации обязательно должен быть material. В этом случае phenomena может быть использован для создания собственной конструкции материала, который затем используется как регулярный материал, а не шейдер, везде, где применение материалов допустимо.
Остальные виды root не являются обязательными и могут указываться совместно с одним из обязательных видов для дополнительных целей, в основном для введения шейдеров, операторов и геометрии в определения камеры и сцены. Все дополнительные виды root обрабатывается на предварительной стадии, до начала рендеринга, и после создания геометрии, шейдера или оператора удаляются из phenomena.
geometry shader,
позволяет phenomena вводить в сцену процедурную геометрию при помощи геометрических шейдеров. После обработки на предварительной стадии, процедурная геометрия добавляется к описанию сцены и удаляется из phenomena.
volume shader,
позволяет добавить объемный шейдер (например, шейдер атмосферы) для камеры.
environment shader
добавляет шейдер окружения для камеры.
lens shader
добавляет линзовые шейдеры для камеры
output shader
output [ » type «] » format » [ opt] » filename »
позволяют добавить шейдеры и операторы выводы в определение камеры до начала рендеринга. Например, если phenomena рассчитывает и записывает пользовательские данные, этот вид root позволит создать пользовательский буфер для их вывода.
contour store shader
contour contrast shader
позволяют вводить шейдеры для NPR (non photorealictic rendering).
volume priority priority (целое число),
lens priority priority (целое число),
output priority priority (целое число)
определяют приоритет размещения шейдеров указанных типов в определении камеры.
Как видим, несмотря на простоту «программирования» phenomena, с их помощью можно решать довольно широкий круг задачи и они органично дополняют концепцию шейдеров, превращая их в «строительные кирпичики» шейдерных графов.
Ну что же, пора подводить итоги.
Я надеюсь, что этой информации достаточно для понимания основных принципов работы mental ray с материалами и составляющими их шейдерами. А когда основной принцип ясен, с деталями разобраться намного проще.
Но, с использованием этого нового метода связана определенная проблема. Поскольку старая функция расчета «зашита» в код материальных шейдеров, просто так заменить ее новым методом не удастся, потребуется перепрограммирование всех материальных шейдеров.
Настроечные параметры is_mat_irradiance:
— Mtl. Irradiance Off : отключает расчет вторичного освещения для материала.
— Irradiance In Reflect/Refract: если установлен, рассчитывается вторичное освещение в отражениях и преломлениях. По умолчанию установлен, если отражений или перломлений в сцене нет, отключение параметра ускорит рендеринг.
— Input Mtl : слот, куда должен быть подключен материальный шейдер mental ray или материал 3ds max, является аналогом слота Surface.
— чекбоксы Mtl. Overwrite Caustic, Mtl. Overwrite GI и Mtl. Overwrite FG, если установлены, позволяют переопределять настройки расчета вторичного освещения индивидуально для материала/мат. шейдера, заданного в Input Mtl.
параметры Num. Photons per Sample, Max. Sampling Radius для каустики и GI, Num. Samples, Max. Radius, Min. Radius, Radii in Pixels для FG являются параметрами качества расчетов и идентичны аналогичным из секции Indirect Illumination глобальных настроек, но действуют только для материала, подключенного в слоте Input Mtl.
Irr. for BackSide On : если включен, то вторичная освещенность рассчитывается для всех полигонов, в том числе тех, нормали которых «смотрят» от камеры. По умолчанию выключен.
Fast Sky Color : цвет освещения от Fast Sky.
Для того, чтобы расчет вторичного освещения выполнялся индивидуально для материалов также требуется включить расчет соответствующего метода в Indirect Illumination.
Вот как это выглядит на примере очень простой сцены.
Сцена освещена одним SkyLight, расчет освещения выполнен методом FG с глобальными настройками: 20 сэмплов, min radius = 0.1 см, max. Radius = 1 см., всем объектам назначен один материал с шейдером IllumLambert
Теперь для чайника и цилиндрической подставки назначим новый материал, подключив IllumLambert через is_mat_irradiance с настройками FG : 150 сэмплов, min radius = 0.1 см, max. Radius = 1 см.
Теперь c помощью is_mat_irradiance создадим материал для конуса и «земли», число сэмплов оставим равным 20, но увеличим радиусы max = 50 см., min=5 см.
Добавим немного освещения от дополнительного источника света типа spot:
Шейдер is_mat_irradiance (dll и mi для 3ds max), инструкция по установке прилагается.
Автор выражает глубокую признательность Павлу Ледину за ценные консультации и советы при разработке шейдера.