Встроенный язык Maya (MEL)

В   этой   главе  рассматривается встроенный  язык   сценариев    Maya   MEL   (Maya Embedded Language) и  описывается, как он используется  в  Maya для  повышения произ­ водительности, автоматизации  выполнения часто повторяемых задач. Кроме того, в  гла­ ве рассматриваются  основы программирования  MEL и  объясняется, как  продолжить  са­ мостоятельное изучение этого мощнейшего компонента Maya.

Применение  MEL требует некоторых навыков  программирования,  поэтому тем,  кто никогда не занимался программированием, этот язык может показаться сначала  немного сложным, однако не стоит расстраиваться:  в  данной главе содержится вполне достаточно информации,  чтобы  начать  использовать  язык  MEL  и  применять его  для  управления Maya практически  без  единой собственноручно  написанной строки  кода.  Для  тех,  кто имеет некоторый  опыт  программирования,   синтаксис  языка  MEL  окажется  довольно простым, а для тех, кто знаком с языками  С или  С++, еще и  очень знакомым.

Maya 8.5 поддерживает также язык программирования  Python; опытным  разработчи­ кам сценариев  MEL будут интересны разделы, описывающие интеграцию  этих языков.

•         Основные  принципы языка MEL и  сценариев

•         Редактор сценариев

•         Справочная система языка MEL

•         Методы программирования языка MEL

•         Отладка сценариев  MEL

•         Создание процедур и  сценариев

•         Изучение работ других разработчиков

Основные принципы языка MEL  

Встроенный  язык   Maya   (Maya  Embedded   Language —   MEL)   является   основным уровнем взаимодействия  пользователя с Maya. При  запуске Maya  фактически  выполня­ ется несколько сценариев  MEL, которые и формируют все окна. На самом деле Maya ни­ какого интерфейса не имеет. Запустить  Maya можно даже из  командной строки  операци­ онной системы — достаточно лишь ввести команду Mayа. -prompt. Практически все, что делается в  Maya, выполняют сценарии  MEL.

Но что же это означает для среднего пользователя Maya?  Упрощенно, он  имеет воз­ можность сделать все, что уже сделали  разработчики  исходного  интерфейса. Пользова­ тель может создавать окна с ползунками, вкладки, текстовые  поля и  кнопки  для них; атрибуты в  панели  каналов; может даже добавлять пункты в  меню и   новые панели.  Тот факт, что Maya построена на языке MEL, — уже является  одним из  наиболее существен­ ных преимуществ этой программы.

Поскольку синтаксис языка  Maya подобен синтаксису  языков  программирования  С, С++ и  С#, это является хорошим подспорьем для тех, кто знаком с этими  языками.  Ав­ торы рекомендуют ознакомиться с такими  первоисточниками,  как Beginning Programming (издательство  Wrox, 2005 г.), С для "чайников", 2-е издание (2007, Диалектика) и  С# 2005 для  "чайников" (2006, Диалектика).

Что такое язык сценариев

MEL— это  не язык  сценариев  (script),  а полноценный язык  программирования  (как Java и  С++). Программа, написанная на языке программирования, компилируется и стано­ вится независимой  программой (как  базовая программа Maya), для выполнения  который необходима только операционная система компьютера. Язык сценариев,  напротив, сущест­ вует внутри другой программы, в данном случае Maya. Его код интерпретируется построч­ но, а не компилируется.  Поскольку  сценарий  интерпретируется  "родительской" програм­ мой, выполняется он немного медленнее, чем откомпилированная программа, однако и  до­ полнительных затрат они требуют намного меньше, чем откомпилированные программы.

Те,  кому  нравится  программировать,   вполне могут  создавать дополнения для  про­ граммы, используя такие языки  программирования, как  С и  С++. Maya имеет  собствен­ ный интерфейс прикладных программ (Application Programming Interface —  API), имею­ щий  соответственно   название  Maya  API. Язык MEL прекрасно  подходит для выполне­  ния почти 95% всех задач, и  этого вполне хватает большинству, а кроме того, делает язык не слишком трудным  в  изучении.    Хотя изучение  API  выходит  за рамки  рассмотрения этой  книги, вполне можно  связаться с  компанией Autodesk  и   выяснить подробности применения SDK Maya для разработки дополнений Maya.

Редактор сценариев  

Рис. 16.1. Редактор сценариев

Редактор  имеет две  панели: верхняя панель  называется панелью  истории   (history pane); а нижняя — панелью ввода (input pane). Давайте рассмотрим редактор сценариев в действии.   Открыв  редактор  сценариев,  создайте  полигональный  куб  (выберите пункт меню Create => Polygon Primitives => Cube • (Создать => Полигональные примитивы => Куб •)) . Теперь посмотрите на панель истории.  Последние строки  в  ней должны выгля­ деть примерно так:

setToolTo  CreatePolyCubeCtx ; polyCube -ch on -о on  -cuv 4;

// result:pCube l polyCubel/ /

Представленная в   верхней панели   команда—  это  выбранная в    меню   инструкция Maya создать куб. Команда setToolT o — это новая возможность Maya 8, реализующая интерактивный инструмент создания примитивов  (но это только по умолчанию, в  группе флажков  примитивов  он может быть установлен в  неинтерактивное  состояние). Затем команда polyCub e создает полигональный  куб  в  том месте на сцене, где пользователь дважды щелкнул. Все символы, которым предшествует знак – ("минус"), т.е. -ch, -о, – cuv и  т.д., называются флагами  (flag).  Они  уточняют,  как  именно команда polyCub e должна создать куб.  Например, флаг -ch отвечает за историю создания  (когда он установ­ лен, запись  истории  создания разрешена), флаг  -cuv указывает Maya, как  создать точки UV для куба (4 в данном случае означает, что следует создать такие точки UV, текстура ко­ торых не будет искажаться при  наложении  на куб).  И наконец, точка с запятой в  конце строки уведомляет Maya о том, что команда закончена. (Почти все строки кода  MEL долж­ ны завершаться точкой с запятой.) Здесь есть также строка результата  (result line), кото­ рая начинается символами  // . Она обеспечивает обратную связь,  свидетельствуя об успехе выполнения команды (более подробная информация об этом приведена далее).

Иногда в  панель ввода вносят больше символов,  чем она способна вместить.  В результате происходит  перенос строки, а точка с запятой позволяет выяснить,  где фактически  завер­ шается одна команда и  начинается  следующая. Вводя команды примеров  этой книги  в  ре­ дакторе сценариев, не забывайте  нажимать клавишу < Enter >  после ввода точки с запятой.

Измените значения некоторых из атрибутов  куба (масштаб, поворот, положение и  тд.) и посмотрите, как это отобразится в  панели  истории  редактора сценариев.  Как можно за­ метить, каждое действие,  выполненное в  интерфейсе базовой программы Майя, привело к  выполнению  некоторых  команд  MEL.  Чтобы  команды  было  проще читать,  верхнюю панель можно очистить   в  любой момент. Для этого выберите   в строке меню  редактора сценариев пункт меню Edit => Clear History (Правка => Очистить историю). Это очистит верхнюю  панель от всех команд.

Теперь попробуйте открыть  одно из  окон  Майя,  например окно  гиперграфа  (пункт меню Windo w => Hypergraph : Hierarchy (Окно => Гиперграф: Иерархия). Что появилось в панели  истории?  Вероятно, ничего вообще. Чтобы переключение между  окнами  не за­ громождало  панель  истории,   разработчики  Майя  создали  фильтр,  который  блокирует отображение  в  панели  истории  большинство  команд  MEL, которые  обычные пользова­ тели не должны видеть.  Но иногда полезно видеть все, что Майя  Делает в действительно­ сти.   Закройте    окно    гиперграфа,  выберите  в     редакторе    сценариев    пункт    меню Histor y => Echo All Command s (История => Отображать все команды) и снова откройте ок­ но гиперграфа. Теперь в  панели истории должно появиться нечто вроде следующего:

editMenuUpdat e  MayaWindow|mainEditMenu ; HypergraphHierarchyWindow ; hyperGraphWindo w "" "DAG"; addHyperGraphPane l   hyperGraphPanel 1

HyperGraphEdMen u  hyperGraphPanel1HyperGraphEd ; createModelPanelMen u modelPanel1 ; createModelPanelMen u modelPanel2 ; createModelPanelMen u modelPanel3 ; createModelPanelMen u modelPanel4 ; buildPanelPopupMen u scriptEditorPanel1 ; buildPanelPopupMen u hyperGraphPanel1 ;

Все эти странные строки  кода соответствуют действиям, которые Майя предприняла для создания окна гиперграфа. (Практически все слова, такие как buildPanelPopupMenu, яв­ ляются  обращениями  к  другим сценариям MEL,  расположенным  в   папке  Mауа8.5/ scripts/others, хотя точный путь зависит  от  конкретной  операционной системы. Чтобы увидеть,  как  фактически  создается  окно,  эти  и  другие сценарии  можно просмот­ реть.) Как можно заметить, даже окна в  Майя создаются с помощью команд MEL.

Теперь рассмотрим панель ввода (она находится в нижней   части окна редактора сцена­ риев).  Сначала освободите  сцену от всех объектов  и  очистите  панель истории;  поместите курсор в  нижнюю панель и  введите следующий  код (чтобы упростить чтение  панели  исто­ рии, можно сначала отключить функцию Echo All Command s (Отображать все команды)):

polyCube -name myCube;

Нажмите  клавишу <Enter > на цифровой клавиатуре  (но не на основной) или  комби­ нацию клавиш <Ctrl+Enter > на основной клавиатуре.  Как можно заметить, код исчез из панели  ввода  и появился   в панели  истории.  Одновременно в  исходной точке сцены дол­ жен появиться куб myCube. Примите поздравления,  только что была выполнена первая команда MEL!

Строка кода, подобная / /   result : hyperGraphPanellWindo w // ,  называется строкой  результата   (result  line).  Две  наклонные  черты  в    начале  строки  —  это  маркер комментария, который уведомляет о необходимости  игнорировать  при  выполнении  ос­ тальную  часть  этой  строки. (В  хорошо  проработанных  сценариях MEL  комментарии встречаются очень часто, и  мы подробно обсудим их  позже.)  Так  MEL отображает ре­ зультат операции  (в данном случае это отчет о  создании  запрошенного окна). Если  при создании  окна гиперграфа возникнет  проблема, строка результата вместо сообщения об успехе будет содержать сообщение об ошибке.

Использовать клавишу < Enter >  на  вспомогательной числовой  клавиатуре   (или   комбина­ цию клавиш < Ctrl + Enter >) приходится потому, что клавиша < Enter >  на основной клавиа­ туре  зарезервирована  для  перехода  на  новую строку.  Другими  словами, нажав  клавишу

< Enter >  на основной клавиатуре,  можно перейти  в  окне редактора на новую строку.  Что­ бы запустить на выполнение код, набранный в  окне редактора, необходимо  воспользовать­ ся одной из двух других возможностей  либо выделить все команды в  панели  ввода,  а затем нажать клавишу  < Enter >  на основной клавиатуре.

Теперь выполните  следующее: удалите куб  со  сцены,  а затем  трижды щелкните  на введенной  ранее строке в  панели  истории  (polyCube -name myCube). Выделив  всю строку, скопируйте ее в  панель ввода  или  перетащите туда с помощью  средней кнопки мыши  (нажав  клавишу  <Option > — на Маc). Нажмите клавишу  <Enter> .  В результате должен появиться тот же самый куб (myCube), который  был создан ранее в  исходной точке  сцены.  Это означает, что  в  результате  копирования  команды  из  панели  истории был   создан   мини-сценарий (называемым   макрокомандой,   или    макросом   (macro)).   Этот небольшой  пример демонстрирует  мощь  такого  простого  приема, как  "копирование  и вставка", он позволяет записать некую последовательность  действий и,  перетащив  ее код из  панели  истории,  превратить  в  макрокоманду  MEL (или  даже в  полнофункциональ­ ный сценарий).  Сохранив  этот небольшой сценарий, к  нему можно вернуться в  любой момент,  скопировав  и  вставив   его код (или  щелкнув  на кнопке), а затем запустив  его на выполнение.

Номер а  стро к  

Тем,  кто  привык программировать на  языке  MEL, Майя 8.5   предоставляет новые, улучшенные возможности:  панель ввода окна  редактора сценариев  те­

перь  отображает номера строк  с левой стороны.  Хотя  это  все  еще  относительно  слабая система для  программирования   крупномасштабных  сценариев, введение   номеров   строк серьезно упрощает работу над короткими  сценариями  непосредственно  в  окне  редактора сценариев.  Кроме того, это существенно облегчает отладку.

Для команд MEL можно также без проблем создавать кнопки  на любой панели.  Дос­ таточно выделить  команды, кнопку для которых необходимо поместить на  панель, а за­ тем  перетащить их  с  помощью средней кнопки  мыши  из  командной  строки  на панель (нажав  клавишу <Option > — на Маc). На рис. 16.2 представлена  панель с несколькими кнопками сценариев  MEL на ней. Несколько макрокоманд панели  будет создано далее, в разделе "Практика: постановка  света с помощью MEL".

Рис. 16.2. Кнопки сценариев MEL на панели

Maya  8.5, MEL и  Pytho n  

Нововведением  Maya  8.5  является  внутренняя  поддержка  для  языка  Python  версии  2.4.3, включая способность выполнять команды MEL в  коде Python, если  окружение  установлено правильно.  Язык  Python  —  это  автономный  язык   сценариев   (не  зависящий   от  системы Майя), весьма популярный в  области  визуальных  эффектов. Обычный  разработчик может вполне безопасно игнорировать язык Python, поскольку обычно он  используется в  больших компаниях,  рабочий процесс  которых  зависит от сценариев  Python.  Но это  новое дополне­ ние означает,   что  теперь  Майя  может  быть  полностью  интегрирована в   рабочий процесс больших компаний. Фактически,  поскольку  все  команды  MEL  (за исключением  совпадаю­  щих с командами  Python, подобно математическим функциям) доступны внутренним функ­ циям языка  Python,  программисты  могут  теперь  использовать исключительно язык  Python, вызывая команды  MEL в сценариях Python.

В панели  ввода редактора сценариев есть теперь две вкладки:  MEL и  Python. Вкладка MEL  (выбранная  по  умолчанию)  позволяет  вводить  текст,   рассматриваемый редактором   сцена­ риев  как  код MEL  и  интерпретировать  его согласно  синтаксису MEL.  Вкладка  Python  позво­ ляет ввести  текст,  интерпретируемый  редактором  сценариев  как  код  Python.  Командная строка  также  имеет переключатель  (слева), позволяющий ввести одну строку  кода  MEL  или сценария Python, в  зависимости  от сделанного выбора.

Поскольку синтаксис языка Python совершенно отличается от синтаксиса MEL, вызовы придется переписывать с  учетом   соответствующего  синтаксиса.  Например,   команда   MEL   spher e    – radiu s  5 -name  bal l для языка Python должна быть переписана следующим образом: Maya.cmds.sphere (radiu s   =   4, name   =    ‘ball’ )

Префикс Maya.  cmds  уведомляет  Python  о  том,  что  ему  передается   команда   MEL.   Затем флаги  radiu s и  name  передаются  команде  spher e как  аргументы,  а не как  флаги,  согласно стандартному синтаксису  Python.

Для  запуска  языка  Python  в  редакторе  сценариев  необходимо сначала  ввести  следующую строку  во  вкладке Python  панели  ввода:

impor t  Maya.cmd s

Эта команда загружает модуль команды MEL в  Python, позволяя использовать код MEL в любом сценарии Python. Чтобы меньше нажимать клавиши при вводе команд MEL в языке Python, мож­ но  прибегнуть  к  импорту в   альтернативное пространство  имен.  Например,   команда   import Maya.  cmds  as  mc позволяет ввести следующий код, не прибегая к нажатию клавиш:

mc.spher e   (radiu s  =  4, name  =   ‘ball’ )

Для  автоматического импорта команд  MEL  в  Python  после  запуска  Майя  можно  сначала  соз­ дать в  стандартной папке сценариев  (путь ~home/Autodesk/Maya/8 . 5 /scripts )  текстовый файл   userSetup.py ,   содержащий   команду    impor t    Maya.cmds.     После    запуска  Maya "увидит" этот файл и автоматически импортирует команды MEL в систему сценариев Python.

Описание  языка сценариев  Python выходит  за рамки  рассмотрения  этой главы. Более под­ робная  информация об использовании  языка  Python  в  Майя  приведена в  документации  ин­ терактивной справочной  системы.  О  языке   Python   написано  множество  книги, включая Beginning Python Питера К. Нортона (Peter С. Norton).

Источник: Кундерт-Гиббс, Джон,  Ларкинс, Майк,  Деракшани, Дариус, Кунзендорф, Эрик,  и др., Освоение Maya  8.5.:  Пер.  с англ.  – М.:  ООО  «И.Д.  Вильямс», 2007.  – 928  с.:  ил.

По теме:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий