Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Как использовать все возможности mental ray в р...docx
Скачиваний:
8
Добавлен:
01.09.2019
Размер:
2.2 Mб
Скачать

Шейдеры и параметры

Говоря о простоте и удобстве, нужно также упомянуть еще об одной замечательной возможности mental ray. Речь идет об определении значений параметров одних шейдеров при помощи значений, возвращаемых другими шейдерами (shader assignment). Это свойство позволяет строить цепочки шейдеров через их параметры, соединяя их в последовательности и сети для построения более сложных материалов или phenomena.

Основное правило при построении цепочек - соответствие типов параметров и результатов шейдеров: тип результата шейдера и тип параметра, для определения значения которого он назначается, должны быть совместимы. Например, если параметр шейдера имеет тип Color (цвет), то назначить ему можно любой шейдер, который возвращает результат того же типа - Color.

В 3ds max это правило работает "визуально", каждому параметру шейдера можно вместо постоянного значения назначить другой шейдер из списка доступных, который появляется при нажатии кнопки справа от константного значения параметра:

Назначение шейдеров в качестве параметров других шейдеров в 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 также регламентированы и ключи этого оператора (типы шейдеров по назначению):

  • lens: линзовый шейдер для камеры

  • material: материальный шейдер

  • light: шейдер источника света

  • shadow: теневой шейдер для материалов

  • environment: шейдер окружения для материалов или камер

  • volume: объемный шейдер для материалов или камер

  • texture: текстурный шейдер

  • photon: фотонный шейдер для материала

  • geometry: геометрический шейдер

  • displace: displacement шейдер для материала

  • lightmap: шейдер запекания освещения в текстуру для материала

  • emitter: шейдер фотонного эмиттера, управляющий испусканием фотонов от источников света

  • output: шейдер вывода для камер

  • state: шейдер состояния

В 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. После этого шейдер станет доступен для определения цвета точечного источника.