Maya Embedded Language (MEL) является язык сценариев, используемый для упрощения задачи в компании Autodesk 3D Graphics Software Maya. Большинство задач, которые могут быть выполнены с помощью графического интерфейса пользователя Maya, могут быть выполнены с помощью MEL, а также некоторые задачи, недоступные из графического интерфейса пользователя. MEL предлагает метод ускорения сложных или повторяющихся задач, а также позволяет пользователям распространять определенный набор команд среди других, которые могут оказаться полезными.
MEL синтаксически похож на Perl и Tcl. Он обеспечивает некоторое управление памятью и динамическое распределение массивов, а также предлагает прямой доступ к функциям, специфичным для Maya. Большинство стандартных команд Maya - это сценарии MEL по умолчанию, сохраненные в каталоге Maya Program Files.
MEL довольно ограничен по сравнению с основными языками сценариев. Mel - это в первую очередь язык, предназначенный для ведения журнала сеанса Maya, поэтому ему не хватает многих дополнительных функций, таких как ассоциативные массивы. Python был добавлен в Maya в качестве альтернативы MEL в Maya 8.5. Тем не менее MEL предлагает некоторые преимущества Python:
MEL часто критикуют за отсутствие функций программирования и объектной ориентации. На практике, однако, MEL используется как язык метапрограммирования, где MEL просто инструктирует архитектуру узлов Maya для решения проблемы. Поскольку узлы образуют фактическое вычислительное ядро Maya, использование более надежного и очевидного метода программирования было бы очень неэффективным подходом. MEL во многих отношениях дополняет Maya API с четкими границами между выделенными задачами. Это усложняет изучение и полное понимание MEL.
Инструменты, разработанные с использованием сценариев MEL, обычно относятся к следующим категориям:
Это пример сценария, который копирует выбранный объект по его пути:
// animated duplicates/instances script proc animatedDuplication (int $rangeStart, int $rangeEnd, int $numOfDuplicates, int $duplicateOrInstance) { int $range_start = $rangeStart; int $range_end = $rangeEnd; int $num_of_duplicates = $numOfDuplicates; int $step_size = ($range_end - $range_start) / $num_of_duplicates; int $i = 0; int $temp; currentTime $range_start; // set to range start string $selectedObjects[]; // to store selected objects $selectedObjects = `ls -sl`; // store selected objects select $selectedObjects; while ($i lt;= $num_of_duplicates) { $temp = $range_start + ($step_size * $i); currentTime ($temp); // selected the objects to duplicate or instance select $selectedObjects; if($duplicateOrInstance == 0) { duplicate; } else { instance; } $i++; } } // Usage example: // duplicate the current selection 5 times -- // evenly distributed between frame 1 and 240 animatedDuplication(1, 240, 5, 0);
Maya также предлагает язык выражений, который является надмножеством MEL, и в результате создаются узлы, которые выполняются как часть графа зависимостей Maya. Выражения разрабатываются с помощью редактора выражений Maya и позволяют запускать сценарии, в то время как Maya оценивает файл сцены при каждом изменении времени, чтобы моделировать сложное поведение или выполнять другие полезные задачи.