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

Назначение шейдеров в качестве параметров других шейдеров в 3ds max

В 3ds max принята классификация шейдеров по назначению, вследствие которой работают дополнительные ограничения на подключение шейдеров. Реализовано это при помощи оператора apply в декларации шейдеров. Например, если шейдер при декларации имеет строчку "apply material", то он будет виден только в редакторе материалов и недоступен для назначения в качестве shadow шейдера (хотя mental ray это допускает). В mental ray такие ограничения не используются и директива apply просто игнорируется (действует только правило соответствия типов). Поэтому, если шейдер не виден в какой-либо категории, исправить положение просто - нужно отредактировать декларацию этого шейдера, добавив нужную категорию в apply.

Например, в декларации всех материальных шейдеров присутствует "apply material". Если дописать "apply material, shadow, photon", то материальные шейдеры станут доступны не только для слота surface, но и для shadow, и для photon - то есть с их помощью можно будет определять тени и фотонные свойства материалов.

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

В 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

Мы хотим использовать mib_cie_d для определения параметра "color" у mib_light_point. Обратите внимание, что тип результата, возвращаемого mib_cie_d и тип параметра "color" у mib_light_point одинаковы - это цвет (color).

2. Шейдер, назначаемый в качестве параметра другого шейдера должен быть предварительно определен - значениям его параметров должны быть указаны определенные величины:

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)

Аналогичную цепочку можно построить и средствами 3ds max, но потребуется отредактировать оператор apply в декларации mib_cie_d - дописать для apply light новый ключ material, вот так: apply light, material. После этого шейдер станет доступен для определения цвета точечного источника.