Вообще, что такое mi файл для шейдера? Это файл, в котором содержится декларация самого шейдера, его параметров и.т.п. Mi файл является как бы связующим звеном между рендером и 3d пакетом, или даже юзером. Именно по этому файлу Maya определяет, что это за тип шейдера, что он возвращает и какие у него параметры. По сути, до самого рендера Maya вообще не загружает *.dll, то есть самого шейдера, а черпает всю информацию только из *.mi файлов.

В качестве примера рассмотрим декларацию шейдера my_phong:

declare shader color "my_phong" (

color "diffuse",    #:    shortname    "dif"    default    0.8    0.8    0.8

color "specular",    #:    shortname    "spe"    default    0.5    0.5    0.5

scalar "exponent",    #:    shortname    "exp"    default    50.    min    0. max    10000. softmax

2 0 0.

integer "mode" ,    #:    shortname    "mo"    min    0    max    2

array light "lights" #: shortname "lig"

)

version 1 apply material #: nodeid 666057 end declare

Декларация шейдера начинается со слов ‘declare shader’ и заканчивается ‘end de- clare’. Второй строкой идет тип возвращаемого значения и название шейдера.

Как мы видим, данный шейдер возвращает color. В принципе, шейдер может возвращать любое значение и даже структуру. Название шейдера my_phong, точнее, это название функции, которую mental ray будет искать в подгружаемых *.dll.

Далее идет перечисление параметров, тип и название.

Потом следует версия шейдера. Именно это значение должна возвращать функция my_phong_ver-sion(), иначе получим предупреждение о несовпадении версий во время рендера.

После чего следует строка apply material, говорящая, что это материал. Шейдера могут быть различных типов, например: texture, shadow, light и тд. Причем можно указать несколько категорий, например, так: apply material, texture.

И последней строкой идут таинственные символы: #: nodeid 666057. Сразу оговорюсь, данная строка не имеет никакого отношения непосредственно к mental ray, именно поэтому она закомментарена символом ‘#’, то есть она нужна и видна только для Maya. Номер nodeid нужен Maya для идентификации различных нод, вообще это относится не только к шейдерам, в Maya каждая тип ноды имеет свой номер. Номера не должны совпадать. Если вы занимаетесь серьезной разработкой и хотите закрепить за собой какие-то айдишники, то вам нужно будет обратиться в службу поддержки, где вам выделят персональный диапозон номеров.

В принципе, можно использовать любой номер, но нужно следить за возможными конфликтами. Например, может случиться так, что вы выбрали наугад какой-то номер, допустим, у вас он работает нормально без конфликтов, но тут вышла новая версия Maya, где добавились новые ноды, и возможно у вас теперь появятся проблемы. Так же возможны проблемы со сторонними плагинами, которые тоже могут конфликтовать с вашими no- deid. Поэтому тут нужно быть осторожными и лучше не использовать номера наугад. Разработчики выделили диапозон “для тестирования” от 0x0000000 до 0x0007ffff (от 0 до 524287), который гарантирует, что эти номера никогда не будут конфликтовать с Майскими нодами. Но при этом все же возможен конфликт с не совсем официальными плагинами или другими шейдерами. Этот диапозон может использовать каждый.


⇐ вернуться назад | | далее ⇒