logo search
Как использовать все возможности mental ray в р

Конструкция стандартного материала

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

Материалы определяют вид геометрических объектов. Указание материала при определении геометрического объекта выполняется по его имени, при этом сам материал должен быть предварительно определен (определен до его первого использования в каком-либо геометрическом объекте). Для полигонных объектов указание имени используемого материала обязательно выполняется для каждого полигона, либо явным указанием его имени, либо при помощи тэгов. Правила определения полигонных объектов подробно рассматриваются в обзоре "Как использовать все возможности mental ray в работе с 3ds max. Часть 4. Геометрические объекты".

По принятым в mr правилам, источники света и текстуры не могут быть указаны в определении объекта. Они указываются только в материалах. Таким образом, материалы являются единственным источником информации об освещенности объектов и используемых текстурах. Если с текстурами все ясно, то определение источников света в материалах, а не в объектах, выглядит несколько странно. На самом деле все логично - дело в том, что именно материальный шейдер, являющийся частью модели материала, а не объекта, отвечает за расчет освещения точки поверхности.

Разработчики 3ds max решили отойти от этого правила. Так, они включили описание источников света непосредственно в определение объекта при помощи специальной структуры пользовательских данных max_NodeData. Эти данные содержат поля "illuminators" и "shadowmakers", определяющие источники света и расчет теней от них.

Такая схема в общем случае не конкурирует со схемой, используемой mr, поскольку шейдеры, написанные специально для 3ds max, используют для расчета освещения именно пользовательские структуры данных и оставляют без внимания способ указания источников в материалах. Шейдеры же mental ray, поставляемые в его стандартных библиотеках, используют для расчета освещения списки источников, указываемые в материальных шейдерах и не используют пользовательские данные. В конечном итоге - дело каждого шейдера, откуда получать данные, лишь бы это происходило правильно.

Таким образом, если работать со стандартными материалами 3ds max, о привязке освещении можно не беспокоиться - она может быть выполнена стандартными средствами max. Но если в материале используются стандартные шейдера mental ray, может возникнуть ситуация, когда придется редактировать списки источников в материалах. Это вполне возможно сделать, отредактировав раздел gui в декларации материальных шейдеров mental ray (файлы base.mi и physics.mi, категория Illuminations, убрать hidden у параметров lights и mode). По умолчанию в стандартных материальных шейдерах mental ray значение mode равно 0, то есть материал освещается всеми присутствующими в сцене источниками.

В остальном, конструкция материала в 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

и в 3ds max: