Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом_Данил.doc
Скачиваний:
42
Добавлен:
09.02.2016
Размер:
1.53 Mб
Скачать

1.3 Mel

Это акроним, который служит для обозначения встроенного языка

Maya (Maya Embedded Language). Язык MEL - оригинальный язык программирования, специально созданный для работы в среде Maya. Благодаря упрощенной структуре и синтаксису, он более прост и используется более широко, нежели интерфейс программирования на основе C++. Одно из главных достоинств MEL заключается в том, что он является интерпретируемым языком. В то время как обычные языки программирования требуют компиляции и сборки исходного кода, программа на интерпретируемом языке может выполняться сразу же.

Эта способность немедленно выполнять записанные инструкции означает, что MEL особенно подходит для быстрого составления прототипов Коль скоро шаг компиляции-сборки не требуется, вам будет проще создать проект и реализовать новую идею. Действительно, код на языке MEL можно написать, отладить и выполнить, не покидая Maya. Внешние компиляторы и отладчики становятся не нужны.

MEL - это интерпретируемый язык, поэтому у него есть недостаток: программа на нем может работать гораздо медленнее, чем аналогичная программа C++. [31]

В результате компиляции исходного кода на C++ генерируются естественные машинные инструкции, и такая программа выполняется очень быстро. Интерпретируемый язык работает с исходным кодом, который интерпретируется «на лету». Когда Maya встречает инструкцию MEL, пакет должен интерпретировать ее и, наконец, преобразовать в естественный машинный формат. Даже несмотря на то что Maya проделывает большую работу, пытаясь ускорить этот процесс, зачастую MEL сильно отстает от C++ в отношении скорости. Однако во многих случаях дополнительные преимущества, связанные с быстрым созданием и выполнением программы на MEL. на деле перевешивают необходимость установки, сложность и издержки компиляции программы на C++. Все зависит от типа и сложности задачи, которую вы хотите решить.

C++ Для программирования Maya можно использовать стандартный язык C++. Хотя это и отпугивает тех, кто не знает этого языка, на сегодняшний день C++ является самым мощным инструментом, расширяющим возможности Maya. Используя C++, вы сможете создавать собственные подключаемые модули Maya. которые будут без проблем работать с остальными компонентами этого пакета.

Доступ к средствам программирования осуществляется через интерфейс прикладного программирования (API) на языке C++. Он состоит из ряда библиотек классов C++. Чтобы создать подключаемый модуль, просто напишите на языке C++ программу, которая использует и расширяет возможности базовых классов Maya. Как таковой процесс изучения программирования с использованием C++ API включает освоение назначения различных классов и приемов работы с ними. Реализация классов, к счастью, отличается последовательностью и непротиворечивостью, поэтому изучение некоторых более простых классов помогает

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

MEL или C++

Теперь вы знаете о двух способах программирования работы Maya и должны

сами решить, каким из них пользоваться. Делая свой выбор в пользу того или

иного интерфейса программирования, в равной степени взвесьте оба варианта с позиции ваших конкретных нужд. На окончательный выбор могут повлиять такие внешние факторы, как сжатые сроки или особые требования к производительности. В общем, MEL содержит все необходимые функции. Он обладает широкими возможностями доступа к функциональности Maya и не требует обращения к C++. Работа с интерфейсом программирования на основе C++ обычно обусловлена потребностью в тех функциях, которые отсутствуют в интерфейсе MEL.[17]

Кроме того, немаловажно понять, что выбор одного автоматически не исключает другого. Интерфейс C++ не является надмножеством интерфейса MEL; иначе говоря, интерфейс C++ не имеет всех возможностей, которые имеются в интерфейсе MEL, и тем более не превышает их. В MEL вы сможете отыскать ряд возможностей, которые недоступны через интерфейс C++, и наоборот.

По существу, некоторые задачи можно решить лишь при совместном использовании обоих интерфейсов. Когда вы приобретете более богатый опыт разработки для Maya, хорошее знание API на основе C++ и MEL станет для вас лучшим средством выбора надлежащего решения конкретной проблемы. Уверенно ориентируясь в обоих интерфейсах программирования, вы сможете понять, когда один из них более соответствует тому или иному фрагменту задачи, и, соответственно, сможете получить оптимальное смешанное решение.

Простота применения

Выбор используемого интерфейса программирования может быть продиктован исключительно вашей программистской квалификацией. Хотя MEL обладает значительным сходством с языком С.

Он существенно отличается от него в тех деталях, которые делают его доступнее для менее опытных разработчиков.[27]

Благодаря изъятию таких элементов, как указатели, а также отказу от выделения и освобождения памяти, MEL становится гораздо проще в применении и понимании. Несмотря на то что он не предусматривает возможностей низкоуровневого доступа, предлагаемых языком С, необходимость этого при программировании Maya возникает нечасто. Кроме того, отсутствие подобных конструкций также предотвращает некоторые наиболее распространенные причины программных сбоев и нестабильности общего характера.

Сценарии MEL более близки к псевдокоду, чем программы на других языках,

поэтому их легче читать. Кроме того, MEL более «снисходителен» в том смысле, что не выполняет слишком много проверок типов. Это значит, что вы можете быстро составлять сценарии, не беспокоясь о том, какой тип имеют используемые переменные. Это может быть одновременно и благом, и мучением, поскольку иногда ведет к незаметным ошибкам, которые; как окажется позднее, трудно найти. Проверки типов, к счастью, можно ужесточить, явно указывая тип переменной при ее описании. Если вы имеете немалый опыт программирования на C++, то, возможно, вам захочется воспользоваться интерфейсом на C++. Иерархия С++ классов Maya

обеспечивает доступ к большому количеству функций пакета. Однако даже

в том случае, если вы захотите написать весь код на языке C++, вам неизбежно придется время от времени заниматься программированием на MEL. Хорошее знание C++, безусловно, поможет в изучении MEL, так как синтаксис последнего очень напоминает С. Существенные различия между языками программирования С и MEL изложены в Приложении В.

Если задача, которую вы программируете, требует применения сложных

структур данных, вам, скорее всего, потребуется использовать C++ API. Язык

MEL содержит ограниченный набор различных типов переменных и не позволяет пользователям описывать собственные структуры данных.

Функциональные особенности

Поскольку интерфейс на основе C++ сложнее по сравнению с языком MEL, нетрудно предположить, что именно C++ API должен обеспечивать больше возможностей доступа и управления. Отчасти это так. Пользуясь интерфейсом на основе C++, можно создавать подключаемые модули и писать программы, обеспечивающие более тесную интеграцию с ядром Maya. Но все же неверно было бы полагать, что C++ API является надмножеством функций языка MEL. На самом деле, они дополняют друг друга.[26]

Существует определенный набор функций, к которым можно обратиться из MEL, но нельзя обратиться из C++ API, и наоборот. Так что при выполнении ряда задач разработчик не имеет выбора и должен сочетать использование обоих языков. В действительности подобная практика весьма распространена и вы вполне можете встретить подключаемый модуль на C++, в котором иногда используются вызовы команд MEL. Однако чаще MEL обеспечивает достаточную функциональность, и написание модулей на C++ становится ненужным.

Но такое не всегда возможно. Интерфейс на основе C++ обладает некоторыми функциями, которые просто не имеют аналогов в арсенале MEL. Только посредством C++ API вы можете создавать свои собственные узлы. Создание подобных узлов позволяет разрабатывать нестандартные инструменты, деформаторы, формы, шейдеры, локаторы, манипуляторы и т. д. К тому же MEL не позволяет описывать пользовательские команды, хотя и поддерживает создание процедур, действие которые подобно действию некоторых команд.

Независимо от того, какой интерфейс программирования вы выберете

для разработки ядра своих функций, вам придется использовать MEL, когда вы приступите к работе с любым графическим интерфейсом пользователя, поскольку MEL - это единственное средство управления интерфейсом. К счастью, команды MEL можно выполнять из интерфейса C++ API.

Межплатформенная переносимость

Учитывая широкое распространение Maya на многих вычислительных платформах, важно решить, имеет ли значение возможность переноса программы.

Если ваша разработка ограничена одной платформой, это становится не столь существенным. [27]

Однако если не забывать о повсеместном использовании смешанных платформ для обработки данных и рендеринга, то. пожалуй, было бы разумным подумать о возможных последствиях решения, принятого сегодня Язык MEL является интерпретируемым, поэтому он был разработан с расчетом на легкую переносимость на другие платформы. В него входит немного функций, действие которых зависит от аппаратной конфигурации. По сути, почти все команды MEL работают независимо от конкретной платформы, на которой они запущены. Значит, разместить сценарий MEL на нескольких платформах обычно проще, так как он менее зависим от особенностей каждой из них. Для реализации всех функций графического интерфейса пользователя служит язык MEL, стало быть, вам никогда не придется иметь дело со своеобразием различных систем управления окнами. При помощи MEL вы можете разработать интерфейс на одной из платформ и знать о том, что на других он будет выглядеть и работать аналогично.

Хорошо известно, что разработка межплатформенных программных средств

на C++ представляет трудности по целому ряду причин. Проблемы начинаются с того, что различные компиляторы C++ обладают собственными несовместимыми элементами. К тому же они в различной степени соответствуют стандарт)ANSI C++.[20]

Наконец, не все компиляторы используют одни и те же стандартные библиотеки С. Применение только С++-классов Maya и библиотек, которые слабо зависят от других внешних наборов функций и расширенных свойств языка, должно облегчить разработку продуктов для нескольких платформ.

В тех случаях, когда межплатформенная совместимость играет немаловажную роль, попытайтесь как можно больше функций написать на языке MEL. Обращайтесь к C++ лишь тогда, когда это абсолютно необходимо.[24]

Скорость

MEL - это интерпретируемый язык, и по этой причине он, вероятно, работает медленнее, чем C++. Однако это не всегда так, и скорость во многом зависит от сложности программы.

При решении некоторых задач различие в скорости может быть не столь значительным, чтобы стать оправданием дополнительных усилий по написанию кода на C++. Что касается сложных операций, время выполнения которых действительно имеет решающее значение, то для них, безусловно, справедливо высказывание о том, что программа, на C++ выполняется быстрее.

На практике прирост скорости может быть десятикратным. Это немаловажное соображение, если сцена состоит из больших и сложных геометрических объектов.

Затратив дополнительные силы на программирование на C++, можно получить большой выигрыш в качестве взаимодействия z пользователем и общей производительности труда.

Архитектура Maya

Как пользователь системы Maya вы взаимодействуете с ее графическим пользовательским интерфейсом. Вы выбираете пункты меню, изменяете параметры, анимируете и передвигаете объекты и т. д. Во время вашего взаимодействия с интерфейсом пользователя Maya, на самом деле, инициирует команды языка MEL.

Они посылаются командному ядру (Command Engine), где интерпретируются и выполняются. Как вы, возможно, знаете, пакет Maya можно запускать и в пакетном режиме. Графический интерфейс пользователя в нем отсутствует, и команды MEL передаются на выполнение непосредственно компоненту Command Engine. Большинство команд MEL работают с графом зависимости Dependency Graph.

Это происходит потому, что на интуитивном уровне Dependency Graph можно представить как полную сцену.[28]

Сцена содержит все важные данные и информацию, образующую трехмерный мир, включая объекты, анимацию,

динамику, материалы и т. д. Граф зависимости не только описывает то, какие

данные относятся к текущей сцене, но его структура и общая схема определяют способ обработки данных. Компонент Dependency Graph- это своего рода «сердце» и «мозг» Maya. Это очень важный компонент, и сейчас вы узнаете о нем более подробно.

Рис.1.6 Система Маya.

Проанализировав тенденции ЗВ-приложений, нетрудно обнаружить, что каждый отдельный модуль, на самом деле, можно разбить на более мелкие операции. Эти операции меньшего размера способны обрабатывать данные и передавать их следующим операциям. По сути, все функции, реализуемые обособленным модулем, можно инкапсулировать в серию взаимосвязанных операторов. Эти операторы принимают на вход одни данные и передают на выход другие. Будучи соединены последовательно, они образуют канал, или конвейер. Данные передаются первому оператору конвейера, а затем, после той или иной обработки, покидают последний оператор на другом конце. При правильном подборе операторов на одном конце конвейера можно поместить трехмерную модель, а на другом получить ряд элементов изображения.

Продолжая обобщать этот подход, можно без труда прийти к тому, чтобы любые данные приходили на один конец конвейера и любые данные покидали другой конец. На самом деле, не обязательно требовать даже того, чтобы они относились к трехмерному пространству. Можно поместить на вход конвейера текстовый файл и получить на выходе отредактированную цепочку символов.[34]

Компания Alias Wavefront реализовала ядро Maya, пользуясь такой парадигмой потока данных. Названное ядро физически представлено графом зависимости- компонентом Dependency Graph. Dependency Graph сокращенно, DG. C технической точки зрения, в основу DG положена двунаправленная модель, а не строгая модель потока данных.DG - это поистине «сердце» Maya. Он предоставляет в ваше распоряжение все только что упомянутые базовые строительные блоки. Он позволяет создавать произвольные данные, подаваемые на вход серии операций и служащие сырьем для получения обработанных данных на другом конце конвейера. Данные и операции над ними инкапсулируются в DG как узлы. Узлы заключают в себе любое количество ячеек памяти, которые содержат данные, используемые Maya. Кроме того, в состав узла входит оператор, способный обрабатывать данные узла и получать в результате нечто иное. Распространенные задачи трехмерной графики могут быть решенье путем соединения ряда узлов. Данные первого узла поступают на вход следующего, тот так или иначе их обрабатывает и выдает новые данные, затем поступающие на вход другого узла. Таким образом, данные проходят по сети узлов, начиная с самого первого узла и заканчивая последним. На этом пути узлы могут свободно обрабатывать и редактировать данные, как им будет угодно. Кроме того, они могут порождать новые данные, которые затем передаются в другие узлы. Каждый тип узлов предназначен для выполнения малого, ограниченного множества различных, операций. Узел, управляющий ориентацией одного объекта, который должен указывать на другой, реализует лишь эту конкретную функцию.

Он не может, к примеру, деформировать объект. Для решения именно этой задачи будет создан узел деформации. Проектируя узлы для решения конкретных единичных задач, можно сохранить их простоту и повысить управляемость. Для выполнения какого-то сложного преобразования данных создается сеть подобных простых узлов. Количество и способ соединение узлов не ограничены, что дает возможность создавать сети произвольной сложности. Во многом это похоже на конструктор Lego, в котором путем соединения простых блоков можно создавать сложные конструкции; так и узлы Maya можно связывать и объединять в сложные потоки данных.

Свидетельством гибкости графа DG является тот факт, что при помощи узлов

создаются и обрабатываются все данные (моделирование, динамика, анимация, тонировка и т. д.) в среде Maya. Этот подход к построению сложных вещей из простых строительных блоков придает Maya реальную силу и гибкость.

В то время как проекты прежних 3D-приложений предусматривали наличие отдельных модулей, Maya предлагает обширный набор различных узлов. Объединив достаточное количество этих узлов в сеть надлежащим образом, можно решить практически любую вычислительную задачу. Каждая функция, связанная с моделированием, динамикой, тонировкой и рендерингом, обеспечивается наличием сети взаимосвязанных узлов. При таком универсальном подходе нетрудно заметить, что в систему Maya, не имеющую постоянного множества интерфейсов или понятия обособленных модулей, можно с легкостью встраивать новые возможности.

Для внедрения в состав Maya новых функций достаточно лишь создать новый узел. Подобные узлы можно создавать так, что они выглядят как собственные узлы Maya, а значит, их можно безболезненно встраивать в структуру графа DG.

Это, в сочетании с возможностью описания собственных команд, дает практически безграничные возможности расширения Maya.

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

Сцена

Сцена - это общее понятие, используемое для описания совокупного состояния трехмерной графики в данном ЗВ-приложении.

Сцену образуют все модели, анимация и текстуры, а также все источники света, камеры и иная дополнительная информация, такая, как настройки рендеринга и т. д. Сценой в пакете Maya является граф DG. Это одно и то же. Записывая сцену на диск или считывая ее с диска, Maya просто сохраняет или считывает граф зависимости. DG описывает всю сцену как сеть взаимосвязанных узлов.[35]

В обычном приложении вся информация, которая составляет сцену, хранится

в отдельных специальных структурах.

Эти структуры, как правило, находятся в центральной базе данных. Граф DG представляет собой множество взаимосвязанных узлов, где содержатся данные, поэтому сцена сохраняется не централизованно, а в виде распределенной сети.[17]

Совместно все узлы образуют распределенную базу данных. Можно добавлять новые узлы в сеть и удалять существующие, поэтому по своей структуре это очень динамичное образование. Как при таком распределении информации по всем соединенным узлам получить конкретный фрагмент данных? Если другие системы сохраняют свои сведения в центральной базе данных, то конкретный фрагмент можно легко найти. Несложно, например, направить сцене запрос на перечисление всех источников света. Когда же все данные содержатся в сети узлов, запросы такого типа могут представлять трудности. [18]

К счастью, Maya оберегает пользователей от изучения особенностей функционирования DG и предоставляет удобные функции доступа к сцене, позволяющие работать с ней так. будто она содержится в центральном хранилище данных. Интерфейс программирования DG не требует знания схемы его организации и структуры.[13]

К примеру, вы можете быстро и легко получить список всех объектов данного типа, не зная их расположения в сети. Даже несмотря на то что различные интерфейсы программирования скрывают изрядную долю подобных сложностей, важно понимать, что реально происходи внутри. Вам предстоит неоднократно оказываться в ситуациях, когда более глубокое понимание применяемых в Maya методов хранения сцены поможет разрабатывать более надежные и быстрые приложения.[3]

Узлы

Каждый узел имеет одно или несколько связанных с ним свойств. Такие свойства обычно называют атрибутами. [12]

Атрибут- это конкретное свойство данного узла. Узел transform, к примеру, содержит атрибут translateX, в котором хранится текущее положение объекта на оси х. Каждый узел типа makeNurbSphere имеет атрибут radius, а также многие другие. В этом примере узел имеет два атрибута: input и output. По идее, данные атрибутов содержатся внутри узлов.

Наряду с атрибутами все узлы содержат функцию compute. Хотя вы не увидите ее на экране в Maya, можете считать, что ее имеет каждый узел. Функция compute должна принимать один или несколько входных атрибутов и вычислять один или несколько выходных.[10]

Как упоминалось ранее, основная задача узла состоит в хранении данных и, возможно, той или иной их модификации. Данные сами по себе просто хранятся в атрибутах узла. И именно функция compute выполняет всю работу по их модификации. Она имеет представление о том, как на основе исходных данных получить выходной результат. Зная тот факт, что сцена- это не что иное, как граф DG, который представляет собой ряд взаимосвязанных узлов, можно прийти к интересному логическому заключению относительно функции compute. Отдельные реализации этой функции можно рассматривать как «нейроны» в сети узлов, образующих «мозг» Maya.[19]

Концептуально последний не отличается от мозга человека. В то время как в нашем мозге нейроны объединяются посредством дендритов, в мозге Мауа. вместе объединяется именно ряд узлов, которые, благодаря своим функциям compute, генерируют поток данных, меняющихся на пути от одного узла к другому.[7]

Maya- непосредственный результат совместного действия всех функций compute. Граф DG может состоять из множества различных узлов, поэтому вы можете на деле создавать разные варианты «мозга», порождающего и обрабатывающего данные. Создавая свои собственные узлы и составляя соответствующие функции compute, вы фактически сможете встраивать в этот механизм свои собственные компоненты. [17]

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

рис.1.7. Базовый вариант узла.

Вывод к главе 1

В настоящее время компьютерная графика является очень мощной и развивающейся структурой возможности которой растут с каждым днём. Преимущества Maya перед другими продуктами компьютерной графики:

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