Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ponimayka1

.pdf
Скачиваний:
123
Добавлен:
07.06.2015
Размер:
37.11 Mб
Скачать

Для начала посмотрим в Attribute Editor созданного куба. Все атрибуты объекта разнесены по различным закладкам и сгруппированы по своему, так сказать, назначению. Прежде всего стоит хорошенько усвоить: положение, размер, поведение, внешний вид и прочие конкретные

свойства

объекта

полностью определяются значением его атрибутов. Можно сказать просто

и точно:

объект -

это список атрибутов, полностью определяющих всю его жизнь. Положение

объекта определяется цифрами в первой закладке (pCube1), количество вершин - во второй закладке (polyCube1), цвет объекта значениями атрибутов в последней закладке (Lambert1). Всё, что происходит с объектом в процессе работы с ним в MAYA - это изменение его атрибутов. Если объект анимирован и движется, значит один из атрибутов translate меняется в зависимости от времени. Если вы меняете форму сплайновой кривой вручную, то меняются значения атрибутов, определяющих координаты контрольных вершин кривой и т.д.

Но атрибуты, оказывается, можно использовать не только для изменения свойств объекта, но и для создания связей между разными объектами. Прежде, чем создавать такие связи самим, посмотрим, как это же делает MAYA, и разберемся, как можно исследовать внутреннюю структуру объекта.

Однако еще разок повторю основную концепцию MAYA, то, что надо «зарубить себе на

носу»:

Объект - это набор атрибутов, определяющих его свойства.

Изучение внутренностей. Работа с Hypergraph. Исследовательская кнопка. Дерево зависимостей. «Нода» как новое слово в русском языке. Терминологические муки

Инструмент изучения внутренностей объекта называется Hypergraph. Выделив объект (pCube1) и открыв Windows=>Hypergraph, следует нажать «исследовательскую» кнопку (четвертая справа) или выбрать в меню пункт Graph=>lnput and Output Connection в окне Hypergraph.

Операция Input and Output Connection предназначена для отображения в окне Hypergraph выбранного объекта, а также всех его связей со своими составляющими и другими объектами. Формально говоря, она отображает дерево зависимостей (Dependency Graph) для выбранного объекта.

Как следует из содержимого окна Hypergraph, наш куб не представляет из себя единого целого объекта, а распадается на элементы (pCube1, pCubeShape1, polyCube1).

Такие элементы называются в MAYA нодами (nodes). Каждая такая нода определяет четко определенные свойства объекта (через соответствующие атрибуты, естественно). Таким образом, практически любой видимый в окне камеры объект - это набор нод, каждая из которых имеет свои собственные атрибуты, определяющие конкретные свойства объекта. Именно эти ноды (а точнее, их имена) видны в закладках Attribute Editor, что делает концепцию разложения объекта на составляющие ноды еще более наглядной. Таким образом, уточним предыдущее определение: -объект - это набор составляющих его нод, каждая из которых ответственна за определенные

81

свойства объекта и является просто набором атрибутов, определяющих эти свойства». Если для кого-то такое определение звучит угрожающе, то попробуйте представлять себе объекты как молекулы, состоящие из атомов-нод, количество и заряд которых определяют свойства молекулыобъекта.

Закладки в Attribute Editor, прямоугольники в Hypergraph, разделы в Channel Box - все это визуальные представления нод в интерфейсе MAYA.

Терминологический комментарий. Термин «нода» давно и прочно прижился в устном «майском» жаргоне. Честно говоря, в печатном виде он выглядит не так «естественно». Но пока что мне не удалось иначе передать сложившуюся терминологию, вводя при этом новые, искусственные термины. Нода - это не узел, не вершина, не подобъект. Попробуйте сами рассказать кому-нибудь про нодовую структуру, применяя, например, термин «часть объекта». Так что привыкайте, будет легче общаться с майщиками всех народностей мира

Володя Забелин как-то предложил мне переводить node как «первоэлемент». Соглашусь, это неплохо: и звучит несколько мистически и в то же время выпукло отражает суть понятия. Жаль только, что в техническом тексте такой термин будет выглядеть несколько громоздко. Но при попытках осмыслить природу, суть «ноды» он подходит, на мой взгляд, лучше всего.

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

В случае с кубом (объект pCube1) читать эту информацию следует так: атрибут output ноды polyCube1 присоединен к атрибуту inMesh ноды polyShape1. Здесь очевидно, что эти атрибуты не просто одиночные числа, а представляют собой целые наборы данных. Впрочем, о типах атрибутов

ио Construction History узнаем чуть позже. А сейчас я лишь отмечу, что при помощи Hypergraph

и-исследовательской» кнопки можно всегда увидеть все связи между атрибутами выбранных объектов. Очень полезно также представлять себе «майскую» сцену как поток данных, который движется по стрелкам-связям, по пути формируя нужные объекты.

Вы можете проделать следующее упражнение: выделяйте все ноды, которые появляются в окне Hypergraph после очередного нажатия кнопки Input and Output Connection, и снова нажимайте эту кнопку. Таким образом, в окне будут появляться все новые ноды, связанные с атрибутами уже выбранных объектов, пока вы не увидите полное дерево объектов, описывающих текущую сцену.

Режимы работы в Hypergraph.

Иерархия сцены и дерево зависимостей. Дело вкуса

Однако в нашем случае с кубом одну связь не удастся увидеть:- это связь между нодами pCube1 и pCubeShape1. Чтобы увидеть ее в Hypergraph нужно переключиться в режим просмотра иерархии сцены: Graph=>Scene Hierarchy. И дополнительно включить отображение нод типа Shape: Option=>Display=>Shape Nodes. Тогда связь появится, но без направляющей стрелки и без подсказки при наведении курсора мыши.

Рассмотрим ее подробнее, сделав сначала несколько замечаний по поводу режимов работы в Hypergraph.

82

Работу в Hypergraph можно разделить на два режима. Режим Scene Hierarchy - это работа со списком объектов в сцене, так же, как в окне Outliner. В этом режиме в рабочей области Hypergraph отражаются видимые объекты, с которыми вы работаете в окне текущей камеры. Он предназначен для выбора, удаления, группировки объектов и является альтернативой выполнения аналогичных действий в окне Outliner. Для переключения в этот режим используется меню Graph=>Scene Hier­ archy или соответствующая кнопка на панели Hypergraph.

Другой режим (Dependency graph) отсутствует в окне Outliner и служит для отображения и исследования как связей между объектами, так и внутренней структуры объектов. В этот режим можно всегда попасть, выбрав Graph=> Input and Output Connection или нажав соответствующую кнопку.

Примечание. Использовать Hypergraph

в режиме Scene Hierarchy или Outliner -скорее

дело

вкуса,

однако

это напрямую связано с размером монитора по диагонали.

Но

в целом ясно: кто

привык к спискам

и таблицам, предпочтет Outliner, тогда

как

все

пользователи,

имеющие склонность к визуальному представлению данных,

наверняка

выберут

Hypergraph.

 

 

Transform и Shape. Положение и форма. Родители и потомки. Неразрывная связь

Вернемся к Hypergraph и рассмотрим подробнее отношение между pCube1 и pCubeShape1. Связь между ними не является связью между атрибутами и представляет собой особый тип отношений между объектами, а именно: иерархическое отношение parent-child (родительпотомок).

Дело в том, что практически любой объект, видимый на экране (точнее, в окне камеры), всегда состоит из двух составляющих. Первая составляющая - это нода типа transform, которая определяет, где находится объект в пространстве, каков его размер, где располагается его pivot, то есть представляет собой как бы оболочку или мини-пространство, в котором живет объект. Но она ничего не говорит о форме или внешнем виде объекта. За форму отвечает вторая составляющая: нода типа shape. (У источников света и камер тоже имеется нода shape, однако если говорить о форме камеры, имеется в виду не геометрическая форма, а внутренние свойства объекта, такие, как фокальное расстояние, апертура и др.)

Действительно, если выбрать любой объект на экране и открыть Attribute Editor, то первые две закладки всегда будут представлять ноды transform и shape. Аналогичные разделы, представляющие эти же две ноды, появляются и Channel Box.

Данная концепция распространяется на все объекты, видимые в окне камеры (позже мы назовем их DAG-объектами).

83

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

Любой вновь созданный объект хотелось бы перемещать в пространстве, поэтому он просто обязан иметь ноду transform, которую (точнее: «за которую») мы будем его двигать или вращать. Если выражаться банально, надо сказать: «Изменяя атрибуты ноды transform, мы будем трансформировать объект».

Если изменяется интенсивность или цвет источника света, это осуществляется с помощью атрибутов ноды shape этого источника света. Эти атрибуты определяют как бы внутренние свойства объекта, не зависящие от его трехмерного положения.

Если перемещать, например, вершины полигонального куба, это также приведет к изменению атрибутов ноды shape - просто имена таких атрибутов не видны в Attribute Editor, а их тип не позволяет отобразить их адекватно для всего объекта целиком. О таких атрибутах я расскажу подробнее в разделе, касающемся Construction History.

По умолчанию, вновь созданные объекты появляются в Outliner (и в Hypergraph в режиме Scene Hierarchy), при этом они не разделены на transform и shape, а представлены как один целый объект: это лишь подчеркивает, что объект всегда создается как неделимая пара transform-shape. Чтобы увидеть ноды shape в Outliner, надо включить их отображение через меню Display=>Shapes (для Hypergraph: Option=>Display=>Shape Nodes).

84

В таком режиме видна связь между transform и shape, которая, как упоминалось выше, не описывается зависимостью атрибутов, а является отношением parent-child (родитель-потомок). Как говорят психоаналитики, поговорим об этом подробнее.

Отцы и дети. Начальники и подчиненные. «Припарентивание» и прочие термины. Наследование трансформаций

Как описано выше, для того, чтобы подчинить один объект другому, надо выбрать два объекта и выполнить операцию Edit=>Parent. После этого перемещение второго объекта влечет за собой перемещение первого. Второй объект становится «родителем» (parent) и подчиняет себе перемещения первого, который отныне стал его потомком, «ребенком» (child). Перемещение родительского объекта всегда вызывает перемещения подчиненных объектов, хотя последние могут иметь свои собственные перемещения, если их выбрать независимо от родителя. Разберемся, как это устроено с точки зрения майской архитектуры и деления объектов на transform и shape.

Мы только что выяснили: transform-нода полностью управляет положением объекта в пространстве и как бы подчиняет себе shape-ноду. А нельзя ли сделать так, чтобы один объект подчинял себе перемещения другого объекта? (Точнее, чтобы один transform подчинял себе не только свой shape, но и другой transform.) Вышеописанная операция называется parent и служит для организации перемещения подчиненного объекта-потомка вместе с объектом-родителем. Порусски прижилось название «припарентить», то есть как бы привязать один объект к другому.

Терминологический комментарий. Термин «привязать» один объект к другому при работе с MAYA был бы крайне неудачен, так как связать движения двух объектов можно различными и концептуально разными способами. Для операции parent принято говорить «припарентить». Если объекты связываются с помощью операций из меню Constrain, то в устном изложении это звучит как, пардон, «приконстрейнить». В тексте выглядит, конечно, чудовищно, но сразу понятно о чем речь. Если движение объектов синхронизируется с помощью связывания соответствующих атрибутов, то профессиональный термин звучит как «приконнектить атрибуты». Все эти нецензурные, по мнению литредактора, термины означают «привязку» одного объекта к другому, произведённую совершенно разными способами.. Увы, пока что лучше не скажешь...

Создайте два любых примитива, выберите их, выполните Edit=>Parent.

Включите Display=>Shapes в окне Outliner и разверните все плюсы напротив имен объектов.

Схематическое представление иерархии говорит само за себя. Нода transform родительского объекта (parent-объекта) включает в себя свой shape и transform подчиненного объекта, содержащего свой shape.

Теперь все перемещения «верхнего» объекта наследуются «нижним» объектом. Более того, все значения атрибутов перемещений, задаваемые, например, в Channel Box для подчиненного объекта, определяют теперь его перемещения не в мировом пространстве, а лишь в пространстве

85

родительского объекта. Поверните «верхний» объект и посмотрите, как влияют значения атрибутов translate «нижнего» объекта на его положение в пространстве.

Для взрослых. Интересно, что наследование трансформаций можно отключить, сняв галочку Inherit Transform (в Attribute Editor в закладке transform для подчиненного объекта). После этого он будет только выбираться вместе с родительским объектом, а перемещаться вместе ним не будет.

Таким образом, в ходе операции parent для подчиненных объектов, все мировое пространство (мировая система координат) заменяется на пространство родительского объекта (локальную систему координат объекта).

Интерактивный способ, позволяющий «припарентить» один объект к другому, тоже очень нагляден. В окне Outliner можно потащить средней кнопкой мыши нужный объект и бросить его прямо на другой объект. «На» означает, что вокруг объекта (на который мы бросаем первый объект) появляются две горизонтальные черты: бросаемый объект как бы «проваливается» в своего родителя и становится подчиненным. Одна черта обозначает вставку или изменение положения объекта в списке других объектов(reoder).

Очень показательна реализация команды unparent - если выбрать любой подчиненный объект и выполнить Edit=>Unparent, то можно углядеть в Script Editor команду "parent -w[orld]". Это означает, что, освобождая объект от родителя, мы просто «припарентиваем» его к мировой системе координат, в которой изначально создаются все объекты.

Аналогичные действия средней кнопкой мыши можно производить и в Hypergraph.

Очевидно, подчиненных объектов может быть сколько угодно, а вот родитель всегда один. Также очевидно, что одного родителя можно сделать подчиненным другому родителю, то есть организовать иерархию какой угодно глубины. Главное, о чем стоит помнить: отношения parentchild устанавливаются именно между transform-нодами.

Для взрослых. Пытливые умы конечно спросят, а можно ли разорвать «родовую» связь между transform и shape, и «припарентить» shape одного объекта к transformноде другого? Ответ, конечно, подкупает новизной - при помощи соответствующей MEL-команды можно всё. Создайте, например, полигональную сферу и источник света (spot light). В Outliner или Hypergraph выберите сначала shape сферы (pSphereShape1), а затем transform источника света. В Script Editor выполните команду

parent -add -s;

86

Эта команда добавит shape сферы «под» transform источника света. (Исходную сферу можно выбрать в Outliner, а потом удалить.) В итоге получится весьма странный объект, похожий на группу, но в нем ни сферу, ни источник света нельзя перемещать по отдельности.

Кстати, данный трюк позволяет осуществлять операцию combine для NURBSобъектов. В некоторых случаях это помогает существенно сократить размер файла сцены, сэкономить толику памяти и ускорить перерисовку экрана.

Некриминальные группировки.

Пустые группы. Умение группироваться

Посмотрим, что происходит в процессе группировки объектов. Если выбрать несколько объектов и выполнить операцию Edit=>Group, то и в Outliner и в Hypergraph сначала просто будет создана пустая нода типа transform с именем типа group1, а затем все выбранные объекты «припарентиваются» к этой группе, то есть задача сводится к только что описанной выше. Если в предыдущем случае один объект выступал в роли родителя, в процессе группировки такой родитель искусственно создают в виде пустого transform-объекта и потом назначают «начальником» («отцом родным») для всех выбранных объектов. Если выбрать группу в Outliner и открыть Attribute Editor, вы увидите, что у группы всего одна закладка - для transform-ноды. Так как у группы нет ноды shape, то у нее не может быть формы, и, следовательно, без специальных ухищрений ее нельзя выбрать на экране.

87

Показателен один из способов создать пустую группу. Надо ничего не выбрать (то есть снять выделение со всех объектов), а затем выполнить команду Edit=>Group. Создается пустаи группа, включающая в себя «ничто». Для тех, кто не привык мыслить столь радикально, в меню существует «официальный» пункт Create=>Emtpty Group, который делает абсолютно то же самое.

Операция разгруппировки Edit=>Ungroup, выполняемая над выбранной группой, аналогична операции Edit=>Unparent, произведенной над каждым членом группы. Расформированные члены группы попадают в подчинение к вышестоящему объекту, если такой существует. Хотя в Option Box можно задать операции ungroup, чтобы объекты расформированной группы попадали не к вышестоящей группе, а в мировую систему координат (опция World).

Следовательно, вытащив любой объект из иерархии и бросив его на пустое пространство в Outliner, мы просто произведем операцию unparent, так как мы бросаем объект как бы в мировое пространство.

Навигация по группам. Работа с клавиатурой

Клавиатурная навигация по группам и иерархиям в Мауа весьма продуманна. Выбрав объект и нажав стрелку вверх, мы попадаем на родителя этого объекта. Если объект в группе, то попадаем (а «попадаем» значит «выбираем») на группу, так как она является родителем. Если же у объекта нет родителя, он просто остается выбранным. Это удобно визуально наблюдать в Outliner и Hypergraph. Если нажать стрелку вниз, то мы попадем на первый подчиненный объект (child), то есть "проваливаемся" внутрь группы или иерархии. С большой вероятностью после нажатия стрелки вниз будет выбрана нода shape объекта (если она у него есть), так как она всегда подчинена своей ноде transform.

Если же вы хотите перебирать объекты внутри одной группы, не подымаясь на уровень выше, используйте правую и левую стрелки. Для изменения порядка следования объектов внутри группы, используйте в Outliner перетаскивание средней кнопкой мыши и бросайте объект в нужное место между другими объектами. (В Hypergraph используйте среднюю кнопку мыши + Ctrl.)

Так как основным примером иерархии являются скелетоны, то стрелки вверх и вниз оказывают незаменимую помощь при работе с такими объектами.

Порядок поворотов.

Сделайте небольшое упражнение, чтобы почувствовать смысл и устройство иерархии объектов.

Создайте три сферы любого типа.

Сделайте первую размером побольше и оставьте в начале координат.

Вторую переместите по оси X, например, в точку (9,0,0), а третью сожмите немного и

88

передвиньте в (12,0,0).

Назовите их Sun, Earth и Moon, соответственно (то есть Солнце, Земля и Луна).

Теперь в Outliner перетащите средней кнопкой Moon и бросьте на Earth, затем перетащите Earth и бросьте на Sun.

Получится иерархия, представляющая из себя простую планетарную систему. Выберите Sun и покрутите округ оси Y.

Затем нажмите стрелку вниз (попадете на уровень SunShape), а затем стрелку вправо (будет выбрана Earth, контролируйте выбор в Outliner или Hypergraph).

Также покрутите Earth вокруг любой оси.

Еще одно нажатие на стрелки вниз и вправо приводит к выбору объекта Мооп, который поворачивается вокруг своей оси.

Если еще раз нажать стрелку вниз (чего делать не стоит или не имеет смысла), выбранным окажется нода shape объекта Мооп.

Если вы запутались в стрелках, выбирайте объекты прямо на экране, но перемещение по иерархии при помощи стрелок с одновременным контролем выбора в Outliner или Hypergraph поможет вам лучше понять устройство иерархии.

Любители быстрой езды, то есть скоростной анимации, могут выбрать Sun, открыть At­ tribute Editor и в первой закладке, в ячейке для rotateY (вторая сверху, вторая слева), написать =frame/2, а затем нажать Enter.

Теперь выберите Earth и для rotateY напишите =frame*3.

Для Мооп.rotateY можно ничего не писать, но если очень хочется, пусть будет =frame*7. Запускайте анимацию и смотрите на результат. Смысл произведенных заклинаний будет

раскрыт в главе про анимацию. Соответствующие файлы на диске названы planetStart.ma и planetFinal.ma.

Обратите внимание также на следующий момент: если выбрать Sun и повернуть его вокруг оси X, то результат, возможно, вам не будет интуитивно понятен, ведь плоскость вращения Земли останется горизонтальной. Чтобы повернуть всю систему целиком, надо использовать ось Z, так как поворот вокруг мировой оси Z производится после поворота вокруг Y, а поворот вокруг X перед ним. Чтобы изменить порядок поворотов, можно изменить атрибут Rotate Order в Attribute Editor в закладке для ноды transform.

89

Самогруппировка. Слоеная иерархическая анимация

ВMAYA часто применяется группировка объекта с самим собой, то есть выбирается объект

ивыполняется операция Edit=>Group. Зачем? Прежде всего для удобной иерархической анимации. Дело в том, что в MAYA нет понятия «стэк анимации» в том виде, в котором его используют в альтернативных конфессиях. Группируя объект сам с собой, вы, попросту говоря, добавляете объекту новый pivot, вокруг которого или «за который» вы сможете анимироватьобъект параллельно

санимацией самого объекта. Таких самогруппировок может быть сколь угодно много, и каждый раз, к объекту добавляется дополнительная нода transform (с именем Group#), с помощью которой можно добавлять к объекту очередной «слой» анимации. Надо лишь хорошо представлять себе, как эти «слои» анимации будут складываться в результирующее движение и заранее планировать адекватную иерархию. Например, если вы планируете запустить по пути лихорадочно трясущийся объект, то разумно будет сгруппировать объект сам с собой и группу запустить по пути, а потом выбрать сам объект и хорошенько потрясти его при помощи expression.

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

Инстансирование или подстановки.

Поверхности с общей формой. Один потомок у семи родителей

При дублировании объектов по умолчанию создается копия как ноды transform, так и ноды shape, то есть дублируется вся иерархия; в случае группы дублируется вся группа.

В свете вышеизложенного возможен вопрос: а можно ли скопировать только transform, a shape оставить как бы один на двоих?

Действительно, в Option Box операции Duplicate для параметра Geometry Туре можно выбрать вместо Сору опцию Instance (подстановка).

Если при такой установке Geometry Туре скопировать, например, полигональный куб, то, изучив Outliner или Hypergraph, можно определить, что скопировался только transform, определяющий положение копии объекта, а вот shape-нода, определяющая форму объекта, осталась «одна на двоих», то есть не скопировалась, а присутствует, одна и та же, в каждом из объектов.

90

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]