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

ponimayka1

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

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

Очевидно, что если отредактировать на экране форму одного из кубов, то форма второго тут же изменится. Более того, выделив вершины на одной поверхности, вы увидите, что на другой они тоже выделены. Это еще раз подчеркивает, что положение в пространстве (transform) у объектов разное, а форма (shape) одна.

Примечание. Никакой галочки или кнопочки типа «Превратить инстанс в нормальную копию» не существует. Можете просто скопировать объект в режиме по умолчанию и удалить исходный объект.

Длинные и короткие прозвища.

Полный путь к объекту. Уникальные имена

Внутри разных групп объекты могут иметь одинаковые имена. Это действительно удобно, когда у вас есть, например, набор персонажей, и у каждого из них конечности называются одинаковыми «человеческими» именами (типа «left_hand» или «right_foot»). В таком случае надо уточнить понятие «имя объекта». Если два объекта имеют одинаковые имена в разных группах, уникальное имя объекта включает в себя полный «путь» до объекта по иерархии, то есть имя самого объекта и имена всех его родителей.

Например, если создать полигональную сферу, потом сгруппировать ее (Ctrl-g), а затем сдублировать (Ctrl-d), то получится две группы, внутри каждой из которых находятся объекты с одинаковыми именами pSphere1. Выбор на экране любой из этих сфер приводит к появлению в Script Editor команд

select -г group2 | pSphere1 ;

или

select -г group1 | pSphere1 .

91

Вертикальная черта « | » является разделителем между именем объекта и «путем» до объекта по иерархии.

MAYA сама отслеживает формирование нужных имен и путей, однако в некоторых случаях необходимо учитывать наличие одинаковых имен объектов в сцене. Например при написании еx pression для вышеописанной сцены необходимо писать

group1 | pSphere1.ty = sin(time)+ .. ;

так как обращение «pSphere1.ty» вызовет ошибку, связанную с неоднозначным обращением сразу к двум объектам.

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

В нашем случае команда

select -г pSphere1 ;

// Error: More than one object matches name: pSphere1 //

также приводит к сообщению об ошибке, и должна выглядеть как select -г group1 | pSphere1 ;

Чаще всего одинаковые имена возникают при дублировании групп объектов и это вполне разумно. Однако иногда хочется избежать появления одинаковых коротких имен в сцене (например, при экспортировании в другие программы). Для этого в Option Box операции Duplicate существует галочка Assign Unique Name to Child Node.

Для быстрого переименования всей иерархии целиком также будет полезна операция Modify=>Prefix Hierarchy Names, позволяющая быстро добавить к именам всех объектов в группе одинаковый префикс.

Sets и Partitions. Фиктивные наборы и эксклюзивные партии. Списки для быстрого выбора.

Иногда вы можете столкнуться с понятием сета (set) и раздела (или партиции, partition). Можно представить сет не как объект, а как список входящих в него составляющих (хотя, как вы понимаете, сет представлен в сцене нодой собственного типа, objectSet).

Можно выбрать в сцене некоторое количество объектов и/или компонент (например, вершин полигона или точек латтиса) и объединить их в сет. В отличие от группы, при создании сета не создается новой ноды transform, новый сет никак не меняет иерархию сцены, его нельзя двигать или вращать. То есть сет - это формальный список компонент или объектов. Более того, при удалении сета удаляется только список, сами же объекты из списка остаются в целости и сохранности.

92

Чаще всего сеты создаются самой MAYA для своих служебных целей. Например, при создании деформера автоматически появляется новый сет, содержащий список компонент, на который этот деформер действует. Если вы назначаете материал на некоторое количество объектов или, к примеру, граней поверхности, то создается новый сет, хранящий имена этих объектов/граней, который MAYA будет в дальнейшем использовать. При изменении материала объекты просто переносятся в другой список, то есть сет. (Те самые, загадочные Shaging Groups, появляющиеся в Attribute Editor это просто специальный тип сетов).

Точно так же, когда вы редактируете количество точек, подверженных влиянию какоголибо деформера с помощью Edit Membersip Tool, вы просто переносите компоненты из сета в сет.

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

Именно для выбора существуют специальные списки-сеты по названием Quick Selection Sets. Создать их можно через меню Create=>Sets=>Quick Selection Set... Быстро выбирать созданные таким образом сеты можно с помощью меню Edit=> Quick Selection Sets.

Для взрослых. Quick Selection Sets отличаются от остальных сетов только значением атрибута annotation. А в остальном, зто такие же сеты, создаваемые через меню Create=>Sets=>Set. Вы можете легко убедиться в этом, посмотрев, что тип ноды для всех сетов - зто objectSet.

Иногда необходимо, чтобы члены двух сетов не пересекались между собой. Например, на один объект не может быть назначено два материала. В этом случае MAYA предусматривает создание разделов, или partitions (мне представляется, что проще говорить: «партиций»). Партиции могут содержать в себе только сеты, и при этом, если два сета входят в одну и ту же партицию, то это гарантирует, что они не будут иметь общих членов. (Именно для этого существует, например, глобальная renderPartition). В этом случае сеты называются эксклюзивными. При создании любого деформера в Option Box в закладке Advanced есть галочка Exclusive, позволяющая сделать так, чтобы компоненты, на которые деформер будет влиять, не подвергались влиянию других деформеров. Для этого создается partition, указанная в поле Partition То Use.

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

Примечание. Если

речь идет об объектах, а не о компонентах, то вместо сетов

для быстрого выбора (Quick Selection

Sets) удобно использовать слои (layers). Они

также позволяют быстро выбирать

объекты, входящие в слой, прятать их,

выделять другим

цветом и т.д. Кроме того, слои находятся всегда под рукой, в

Channel Box.

 

 

93

Отредактировать содержимое сетов и партиций можно через соответствующий «редактор отношений», находящийся по адресу Windows=>Relationship Editors.

О пространствах. И локальных осях

Если вы откроете настройки Move Tool, то увидите, что объект можно передвигать различных пространствах (spaces) (или в различных системах координат, и пусть в рамках этой книги это будет одно и то же). С мировым пространством все понятно передвигаем объект вдоль мировых осей координат, и в Channel Box появляются соответствующие значения атрибутов translate, соответствующие смещению вдоль мировых осей.

Интуитивно понятно, что внутри объекта тоже существуют некие оси координат (соответствующие, например, осям условной симметрии), «вмороженные» в объект и определяющие «пространство объекта» (object space). Если объект слегка развернут и в настройках MoveTool выбрано Object Space, то перемещение вдоль одной из этих осей (то есть в пространстве объекта) вызывает изменение всех трех атрибутов translate в Channel Box. Из чего можно заключить, что в Channel Box всегда отображаются координаты в мировом пространстве. Строго говоря, это не совсем так, потому что атрибуты translate содержат координаты в пространстве «родителя»

94

(которое называют локальным пространством, или local space). Но если объект не находится в группе (то есть у него нет родителя), то формальным родителем для него является мировое пространство, поэтому атрибуты translate в Channel Box содержат мировые координаты. Термин «локальное пространство» для обозначения пространства вышестоящего объекта, на мой взгляд, не слишком удачен, так как ассоциативно путается с пространством самого объекта («parent space» было бы субъективно удачнее). Таким образом, опция local в Move Tool Settings имеет смысл только тогда, когда объект находится внутри иерархии, в противном случае локальное пространство (local) совпадает с мировым (world).

Внутри объекта существуют еще и локальные оси вращения (Local Rotation Axes), которые, однако, не задают никакой системы координат, а просто определяют оси внутри объекта, вокруг которых будут производиться вращения с помощью Rotate Tool. Эти оси могут не совпадать с осями координат «объектного пространства», и представляют из себя просто компоненты объекта (или атрибуты transform-ноды), которые можно выбрать и повернуть в режиме выбора компонент.

В настройках Wove Tool в новых версиях MAYA появились дополнительные опции, разворачивающие манипулятор перемещения в различных направлениях, в том числе вдоль «вращательных осей» или вдоль выбранного ребра.

Итак, для любого объекта всегда существует мировое пространство (world space), пространство объекта (object space) и локальное пространство (local space, или пространство родительского объекта). Есть еще параметрическое пространство, определенное для NURBSкривых и поверхностей, но о нем мы поговорим в соответствующей главе.

Сброс и заморозка (Reset и Freeze).

Новое место рождения объекта. Разворот локальных осей

Любой объект где-то рождается, то есть создается. Если в результате безумных перемещений и поворотов, вы «угнали» объект в какое-нибудь экзотическое положение и хотите его быстро вернуть в место рождения и к прежним размерам, можно выполнить операцию Mod- ify->Reset Transformations. Это аналогично «вбиванию» в Channel Box нулей для атрибутов trans­ late и rotate и единиц для атрибутов scale. (В Option Box операции Reset Transformations есть соответствующие галочки для каждого из этих атрибутов.)

95

Операция Modify->Freeze Transformations тоже «вбивает» нули и единицы в Channel Вох, но при этом не меняет положение объекта. Иначе говоря, Freeze Transformations определяет текущее положение (плюс повороты и размер), как новое место рождения объекта. В результате выполнения этой операции объект остается на месте, в Channel Box у него появляются одни нули и единицы а локальные оси смотрят вдоль мировых осей, то есть как будто объект только что был созданье этом месте, так что он будет возвращаться в это положение после Reset Transformations. Операция Freeze Transformations часто используется для разворота локальных осей в нужном направлении (в Option Box этой операции также есть соответствующие галочки для translate, rotate, scale).

Связи между атрибутами. Работа с Connection Editor.

Полное имя атрибута. Типы атрибутов. Совместимые атрибуты. Красивые и настоящие имена атрибутов

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

Создайте несколько цилиндров, разбросайте их в пространстве или откройте файл trainStart.ma. Попробуем соединить вращения двух колес.

Для связывания между собой атрибутов объектов чаще всего используется Connection Еdi tor. Откройте Windows=>General Editors=>Connection Editor. Две панели открывшегося окна служат для отображения атрибутов объектов. В отличие от Attribute Editor, объекты надо загружать в Connection Editor вручную.

96

Выберите первое колесо (wheel_1) и нажмите кнопку Reload Left, затем выберите второе колесо |wheel_2) и нажмите кнопку Reload Right.

В обеих панелях Connection Editor появятся атрибуты объектов. Количество отображаемых

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

Весьма разумно спрятать огромное количество служебных атрибутов, для этого в меню Connection Editor снимите галочки Left Display=>Show Non-Keyable и Right Display=>Show Non-Key- аЫе. Это приведет к тому, что в панелях останутся только анимируемые атрибуты, которые нас как раз и интересуют.

Раскройте с обеих сторон аттрибуты Rotate, нажав на плюс рядом с именем атрибута. Выберите слева RotateX, а затем RotateX справа.

Вмомент выбора RotateX справа произошло связывание атрибута rotateX объекта wheel_2

сатрибутом rotateX объекта wheel_1.

Отвязать атрибут (то есть «отсоединить» его, сделать независимым) можно, снова нажав на RotateX справа. Повторное нажатие как бы переключает состояние «связанности».

Проделайте операцию связывания для атрибутов rotateY и rotateZ обоих цилиндров. При выборе атрибутов слева в правой панели подсвечиваются атрибуты, связанные с ними.

Курсивом в Connection Editor выделяются атрибуты, имеющие связи с другими атрибутами. Кроме того, нажав правую кнопку мыши над именем атрибута, можно увидеть список связанных с ним атрибутов.

97

Совет.

Взрослые мальчики вместо Connection Editor могут

использовать MEL

команду

connectAttr. Тогда не понадобится открывать окна,

выбирать нужные

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

connectAttr -f wheel_1.rotateX wheel_2.rotateX;

Покрутив первое колесо, можно увидеть, что второе вращается синхронно с ним. Попытка покрутить второе колесо будет безуспешной, так как атрибуты rotate второго колеса теперь несвободны и намертво связаны с атрибутами первого колеса. Об этом также свидетельствует! желтый цвет значений атрибутов в Channel Box. (Желтый обозначает прямую связь с атрибутами другого объекта.)

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

Не закрывайте Connection Editor, выберите оба колеса и откройте Hypergraph, в меню которого выполните Graph=>lnput And Output Connection.

Для того, чтобы быстро наехать на выбранные объекты, нажмите клавишу f. Отъехав немного, вы увидите оба колеса, связанные стрелками-связями.

Наведя курсор мыши на любую из этих стрелок, можно прочитать «расшифровку» этой связи. Слева всегда обозначен «источник» (в данном случае wheel_1.rotateX), а справа - «принимающий» атрибут (в данном случае wheel_2.rotateX).

98

Напомню, что wheel_2.rotateX - это полное имя атрибута, состоящее из имени объекта и имени атрибута, однозначно определяющее значение атрибута в сцене.

Связь можно выбрать, щелкнув по ней мышкой, а затем удалить, нажав клавишу Delete. Это равносильно разъединению атрибутов в Connection Editor. Выбирать много связей одновременно нельзя, поэтому придется щелкать и удалять каждую из них.

Совет. Двойной щелчок по связи вызывает Connection Editor с загруженными в него соответствующими объектами.

Вернемся в Connection Editor. Опытным путем можно установить, что атрибут Scale слева нельзя присоединить к атрибуту ScaleX или TranslateY справа. Дело в том, что эти атрибуты несовместимы. Оказывается, атрибуты объектов могут быть разных типов. В данном случае scaleX или translateY это простые числовые атрибуты (double), a scale - это «тройной» атрибут, то есть набор из трех чисел (double3). Атрибуты могут быть простыми числовыми, составными (compound, то есть содержащими наборы данных), строковыми (string, то есть содержащими текст), матрицами и пр. Количество типов атрибутов исчисляется десятками, и их можно найти в описании команды setAttr.

Как нетрудно убедиться, в Connection Editor можно соединить только совместимые между собой атрибуты. К типам атрибутов мы еще вернемся, а сейчас нас интересуют простые числовые атрибуты, или атрибуты, содержащие три числа.

Для взрослых. Можно всегда посмотреть тип атрибута с помощью команды SetAttr с флагом - type, например:

getAttr -type wheel_1.scaleX; // Resuit: double //

getAttr -type wheel_1.scale;

//Resuit: double3 // getAttr -type phong1.color;

//Resuit: float3 //

getAttr -type phong1.colorR; // Resuit: float //

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

Отсоединение не поможет вернуть колесо на место, так как разъединится только связь между атрибутами, но последние значения атрибутов останутся неизменными. Для отмены неудачных экспериментов лучше воспользоваться Undo. Можете соединить между собой атрибуты Scale и убедиться в Hypergraph, что цвет связи в Hypergraph зависит от типа соединяемых

99

атрибутов.

Примечание.

Составные

атрибуты

(Compound attributes) -

например,

Rotate

содержат в себе простые атрибуты RotateX, RotateY, RotateZ.

Такая организация

сделана для

удобства

соединения

групп атрибутов между

собой.

То есть

соединение атрибутов Rotate двух объектов между собой почти равносильно последовательному соединению пар атрибутов RotateX, RotateY, RotateZ этих же объектов. «Почти» означает, что соединение «тройных» атрибутов Rotate имеет более высокий приоритет, чем попарное соединение RotateX, RotateY и Ro tateZ. Проверьте сами.

Некоторая чехарда с маленькими и большими буквами в названиях атрибутов связана с тем, что реальные имена атрибутов всегда начинаются с маленькой буквы (rotateY, visibility). Но в Соn nection Editor, Attribute Editor и даже в Channel Box имена атрибутов отображаются в «эстетичном» стиле, то есть с большой буквы. Сильного вреда это не приносит, однако при использовании MEl команд, работающих с атрибутами, необходимо использовать реальные имена, так как применение -красивых» имен, запомненных при работе с интерфейсом, приводит к сообщениям об ошибке.

Настоятельный совет. Установите в Channel Box режим отображения реальны длинных имен атрибутов, чтобы глаз привыкал к настоящим именам, «как взрослых»: Channels=>Channel Names=>Long.

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

Потом выберите все остальные колеса и нажмите Reload Right. Далее, выбрав Rotate слева, прощелкайте все Rotate справа.

Покрутите первое колесо, остальные должны вращаться синхронно с ним.

В Hypergraph снова выполните Graph=>lnput And Output Connection. Теперь от первого колеса исходят несколько связей с остальными объектами. Интуитивно понятно, что от одного атрибута могут исходить несколько связей, но входящая в него связь может быть только одна.

100

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