Вообще, что такое 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), который гарантирует, что эти номера никогда не будут конфликтовать с Майскими нодами. Но при этом все же возможен конфликт с не совсем официальными плагинами или другими шейдерами. Этот диапозон может использовать каждый.