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

ponimayka1

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

Для взрослых.

В некоторых случаях (например, при использовании Set Dhven

Key),

возникает ситуация, когда несколько атрибутов влияют

на

один атрибут.

В

зтих

случаях автоматически

создается нода blendTwoAttr (смеситель атрибутов), на

вход

которой

подаются

значения

входящих атрибутов,

а

выход

присоединяется

к зависимому

атрибуту.

Тем не

менее, входящая в атрибут связь

всегда

может

быть

только

одна.

 

 

 

 

 

 

 

Непрямые связи. Функция Set Driven Key. Определение интеллектуальных зависимостей между

атрибутами без программирования. Расширение сознания.

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

Создайте полигональную сферу.

Откройте Connection Editor и загрузите ее в левую панель.

Допустим, что вас мучает параноидаьная идея, состоящая в том, что размер сферы должен влиять на ее же цвет. Цвет сферы определяется атрибутами материала, который ей присвоен. В нашем случае это материал по умолчанию lambertl. Осталось загрузить его в правую часть Con­ nection Editor.

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

Нажмите Reload Right в Connection Editor, чтобы справа появились атрибуты материала. Затем слева выберите Scale, а справа Color.

Готово! Теперь осталось лишь выбрать Scale Tool и неистово менять размер сферы, наблюдая наличие очевидной зависимости между размером и цветом объекта. Изменение размера вдоль

101

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

Представьте, что сфера - это брюхо комара, которое должно при увеличении в размере одновременно краснеть, и даже, быть может, становиться более прозрачным. По-человечески сформулировать задание можно так: если сфера небольшая (например, scale=0.5, то есть «комар голоден»), то цвет ее должен быть темно-коричневый, а если сфера огромная (scale=3.0, то есть «комар сыт»), то цвет ярко-красный.

Чтобы создать такую интеллектуальную связь, быстро воспользуемся функцией Set Driven Key и посмотрим, как это все выглядит в Hypergraph.

ВConnection Editor (или в Hypergraph) разорвите связь между Scale и Color.

ВAttribute Editor сделайте цвет сферы темно-коричневым.

Нажав правую кнопку на атрибуте Color, выберите в выпавшем меню Set Driven Key.

Откроется окно Set Driven Key, которое похоже на вертикально расположенный Connection Editor. В нижней части, где должен находиться управляемый (driven) или зависимый объект, уже загружен материал lambert1 и даже выбран атрибут colorR.

Выберите сферу и нажмите кнопку Load Driver.

Когда наверху появятся атрибуты сферы, выберите scaleX - именно он и будет «рулить» цветом. В отличие от Connection Editor, никого соединения еще не произошло.

Смысл функции Set Driven Key состоит в том, чтобы не только выбрать соединяемые

102

атрибуты, но и задать их значения, а потом «Зафиксировать связь» в таком положении (то есть если pSphere1.scaleX=0.5, то lambert1.colorR=0.1), затем изменить значения этих атрибутов и снова «зафиксировать связь» в новом положении (если pSphere1.scaleX=3.0, то lambert1.colorR=0.95). После этого MAYA будет сама пересчитывать значения scale в значения для color в соответствии с заданной зависимостью.

Подробнее мы поговорим о Set Driven Key в главе про анимацию.

А сейчас установите scaleX сферы равным 0.5, убедитесь, что в верхней части окна Set Driven Key выбран scaleX, а в нижней colorR, и нажмите кнопку Key (зафиксировать).

Теперь сделайте scaleX равным 3.0, а цвет материала ярко-красным (именно в такой последовательности), а потом снова нажмите кнопку Key.

Все! Можно снова выбрать Scale Tool, чтобы изменить размер сферы. Теперь цвет сферы меняется только при изменении scaleX в диапазоне от 0.5 до 3.

Поскольку цвет пока что зависит только от scaleX, пытливые умы могут сами проделать установку Set Driven Key для scaleY и scaleZ, причем выбирая в нижней панели не только colorR, но и colorG, и colorB. А неутомимые исследователи могут повторить эту процедуру еще и для прозрачности материала, то есть для атрибута transparency.

Дальше. Выберите сферу и тут же идите в Hypergraph. Выполните Input And Output Connection.

Проанализируйте следующую картину: между сферой и материалом теперь находится некая нода (lambert1_colorR), которая «корректирует» зависимость между pSphere1.scaleX и lam­ bert1.colorR.

pSphere1.scaleX сначала попадает на вход (input) этой ноды, которая проводит некоторые вычисления с этим атрибутом, а результат, то есть выход (Output) пойдет уже на lambert1.colorR.

Помните, что «майскую» сцену можно представить себе как поток данных, бегущий по стрелкам-связям в Hypergraph. При изменении атрибутов где-нибудь в середине потока (например, pSphere1.scaleX ) происходит автоматическое обновление всех данных, находящихся •ниже по течению», как указано стрелками. Формально говоря, обновляется нижняя часть дерева зависимостей (downstream graph).

Если выбрать ноду lambert1_colorR прямо в Hypergraph, то, естественно, ее можно рассмотреть в Attribute Editor. Это просто анимационная кривая, которая также является объектом в MAYA, и она ничем не лучше и не хуже остальных объектов. У нее свой набор атрибутов, определяющих ее свойства и свое представление в Attribute Editor. Любопытствующие умы могут рассмотреть ее подробнее в Window->Animation Editors->Graph Editor...

103

Функция Set Driven Key является мощнейшим средством для задания нужных связей между атрибутами объектов, так как позволяет задавать практически любые зависимости, не прибегая к программированию формул или сложным вычислениям. Более того, эти связи между атрибутами имеют прекрасное визуальное представление в Graph Editor и могут быть интерактивно, отредактированы в любой момент.

Результаты проделанных выше действий сохранены в файле sdk.ma.

Анимация. Связь атрибутов с временем. Анимационные кривые как объекты сцены. Анимация и деформация времени

Продолжим работу с деревом зависимостей. Посмотрим, что происходит при анимации.

Выберите сферу, встаньте в первый кадр и нажмите shift-r - это поставит ключ на атрибуты scale. Встаньте в двадцатый кадр, измените размер сферы и снова нажмите shift-r.

Встаньте в сороковой кадр, еще раз измените размер сферы и снова нажмите shift-r. Проиграйте анимацию и обратите внимание, что меняется не только размер объекта, но и цвет материала, хотя от времени зависит только атрибут scale, на который мы ставили ключи.

Вернемся в Hypergraph. Как обычно, нажимаем кнопку Input And Output Connection. Видим, что в наше дерево добавились еще три ноды, которые присоединяются к атрибутам scale сферы. Это анимационные кривые, задающие зависимость атрибутов scale от времени.

104

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

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

Нажмите shift, а затем перетащите средней кнопкой анимационную кривую pSphere1_scaleY и бросьте ее на ноду pSphere1.

Откроется Connection Editor с загруженными в нужном порядке нодами. Если у pSphere1_ scaleY не видно никаких атрибутов, включите галочку Left Display=>Show Non-КеуаЫе.

Соедините атрибут Output слева (он последний) и атрибут translateY справа.

Проиграйте анимацию. Теперь сфера не только раздувается, но и перемещается по аертикали, хотя мы не ставили никаких ключей, а всю работу сделали во «внутренностях» MAYA. Кроме того, одна анимационная кривая управляет сразу двумя атрибутами, чего невозможно было бы добиться, расставляя ключи традиционным способом. Хотя, как вы понимаете, того же результата (то есть синхронизации scaleY и translateY) можно было бы добиться, соединив scaleY и translater в Connection Editor.

Для взрослых.

Пытливые умы наверняка

тут же возопят: «А почему мы

не видим

в Hypergraph

связи между анимационными кривыми

и

временем?».

Действительно,

время в MAYA тоже является объектом. Его зовут

time1, и он имеет атрибут out-

Time,

содержащий

значение

глобального

времени

в

кадрах.

Вы можете разыскать

и выбрать его в

Outliner,

если

снять

галочку

Display=>DAG

Objects Only.

Можете

рассмотреть

его

в Attribute Editor.

Но

в Hypersraph его связь с анимационными

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

Точнее

говоря, если к

атрибуту input анимационной кривой ничего не присоединено,

на него в этом случае

подается значение

timel.outTime.

Кстати, вы

всегда

можете увидеть

атрибут

input

в Channel Box, просто

сделав

его

keyable

через Channel Control. Более того,

105

можете ставить на него ключи, тем самым «деформируя» глобальное время добиваясь эффекта искажения времени ( tiте-warping).

Вывод номер один

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

Вот этим мы как раз сейчас и займемся.

Типы атрибутов и их назначение. Анимируемость и совместимость атрибутов. Интеллектуальные атрибуты. Мешки чисел

До сих пор мы экспериментировали с простыми числовыми атрибутами, которые определют довольно очевидные и вполне «осязаемые» свойства объектов, такие как цвет, размер, положение Есть подозрение, что у любого объекта (точнее, у составляющих его нод) существует еще много всяких атрибутов, определяющих и другие, не столь наглядные свойства. Например, будет ли объект появляться в отражениях или отбрасывать тень - это тоже определяется соответствующими атрибутами. Когда вы прячете объект (Display=>Hide=>Hide Selection), вы всего лишь меняете значение атрибута visibility, который определяет видимость объекта в сцене.

Числовые атрибуты можно условно разделить на некоторые типы в зависимости от типа данных, которыеони содержат: целые числа (integer), числа с плавающей точкой (float) и логические значения (boot) типа on/off (которые на самом деле являются числами 0/1). Об этом необходимо помнить, так как вы можете без труда соединить в Connection Editor атрибут с плавающей точки и целый атрибут, но потеря дробной части при этом будет совершенно предсказуема.

Как правило, числовые атрибуты позволяют себя анимировать то есть менять значение в зависимости от времени. Если вы не видите атрибута в Channel Box, это еще не означает, что его не существует: просто он может быть неанимируемым (non-keyable). Анимируемость (keyable) - это не тип, а скорее статус числового атрибута, который всегда может быть изменен через Windows=>General Editors=>Channel Control.

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

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

Выберите оба объекта, откройте Hypergraph и нажмите Input And Output Connections. Сейчас нас интересуют shapeноды обоих объектов, определяющие их форму.

106

pCubeShape1 имеет связь с нодой poLyCube1, которую можно также увидеть в закладках Attribute Edi­ tor (помня о том, что в Attribute Editor показываются все ноды, хоть как-то связанные с выбранным объектом). Нода polyCube1, как написано в документации, просто создает полигональный куб в соответствии со своими атрибутами width, height, depth.

Вопрос

что значит «создает»? Ведь куб создается операцией Create->Polygon Primi-

tives->Cube или

командой polyCube в Script Editor. Дело в том, что нода polyCube1 вычисляет

все необходимые данные для построения полигонального куба (координаты вершин, грани и нормали). Можно сказать, что она «вычисляет» куб, а результат этого вычисления (то есть данные, определяющие куб) складывает в один «большой» атрибут, который называется output, и хранит в себе все эти данные в виде, условно говоря, «мешка чисел». При соединении этого атрибута с атрибутом inMesh ноды pCubeShape1, этот «мешок чисел» моментально «приезжает» в ноду pCubeShape1, которая, собственно, и визуализируется на экране. Разумно предположить, что тип атрибута inMesh при этом совпадает с типом атрибута output ноды polyCube1.

Чтобы проверить эти рассуждения, удалите связь между pCubeShape1 и polyCube1 или вообще удалите polyCube1 (только не забудьте потом вернуть все обратно при помощи Undo). Куб не исчезнет, но данные, содержащиеся в атрибуте inMesh и определяющие форму куба, теперь не зависят от ноды polyCube1 и просто имеют какие-то значения.

Но ведь для сферы ситуация аналогична, и «вычислитель» сферы polySphere1 тоже отдает результат своих вычислений в атрибут inMesh ноды pSphereShape1.

Итак, экспериментируем. Скрестим куб и сферу. Нажимаем shift, тащим средней кнопкой мыши ноду polySphere1 и бросаем ее на pCubeShape1.

107

Открывается Connection Editor с уже загруженными нодами. И слева и справа (в Left Dis play и в Right Display) должна быть галочка в Show Non-Keyable. Слева ищем и выбираем Output, а справа - inMesh.

На экране получаем две одинаковые сферы, а в Hypergraph следующую картину:

Если нас что и смущает, так только названия объектов. Но можно переименовать

pCubeShape1 и pSphereShape1 в,

например, meshl и mesh2, и тогда все встанет на свои места.

Вычислитель сферы polySphere1

отдает вычисленные данные через атрибут inMesh в ноды mesh1

и mesh2, которые отвечают за построение и визуализацию полигональных сеток.

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

Выше уже прозвучало неявное определение типов атрибутов. Остается лишь подытожить и сформулировать, что атрибуты бывают разных типов, причем не только числовых, но и более сложных, что непостижимо для обычного, нерасширенного сознания. Чтобы два атрибута можно былосоединить (например в Connection Editor), они должны быть совместимы, то есть принадлежать к одному типу. Именно поэтому при выделении в Connection Editor какого-нибудь атрибута слева, справа становятся доступными лишь совместимые с ним атрибуты, готовые к соединению.

Динамические атрибуты. Статические атрибуты. Добавление и удаление собственных атрибутов. Повышение уровня абстракции и очеловечивание объектов

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

108

анимации. На самом деле все проще.

Все атрибуты, которые вы видите, создав очередной объект, в Attribute Editor или в Channel Box (ну, хорошо: почти все) - это статические атрибуты, которые нельзя ни удалить, не переименовать. Самое удивительное, что к любому объекту (точнее, к любой ноде) можно добавлять свои атрибуты! Они-то и называются динамическими, так как их потом можно удалить или переименовать.

«А зачем это нужно?» - спросят еще недостаточно искушенные умы. Зачем добавлять атрибуты, когда и в существующих разобраться невозможно? Действительно: ведь добавив свой атрибут к объекту, мы просто получим новую цифру в клеточке в Channel Box или числовое поле в разделе Extra Attributes в Attribute Editor.

Это можно сделать, выбрав объект, а затем выполнив Modify=>Add Attribute.

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

Будьте внимательны: атрибут добавляется к выбранному объекту, а не к ноде, закладка которой активна в Attribute Editor. Имя объекта, к которому добавляется атрибут, всегда высвечивается в заголовке окна Add Attribute.

Нажав OK (или Add и Close), вы добавите новый атрибут, который можно будет найти в Attribute Editor в последнем разделе Extra Attributes.

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

Примечание. Чтобы сэкономить время, можно добавлять атрибуты к нодам непосредственно в Attribute Editor. Для этого нужно воспользоваться меню Attributes->Add Attribute... При этом все равно придется помнить, какая нода и какой объект выбраны в данный момент.

Итак, зачем же нам дополнительные цифры в клетках, от которых ничего не зависит? Зачем навешивать на объект дополнительные данные?

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

Например, вы можете добавить к вашему скелету новый атрибут closeFingers. А затем, с помощью функции Set Driven Key, задать связь между ним и атрибутами rotate всех костей, определяющих пальцы персонажа. Причем задать связь так, что для closeFingers=0 все пальцы согнуты в кулак, а при closeFingers=1 все пальцы выпрямлены. После этого можно анимировать только атрибут closeFingers, чтобы сжимать и разжимать кулак у персонажа. Об этом я еще поговорю подробнее в главе про анимацию персонажей, а сейчас лишь замечу, что добавление собственных атрибутов позволяет привнести в сцену новый уровень абстракции и на приемлемом, •человеческом» языке задать новые понятия для управления персонажами и вообще объектами.

Кроме того, в добавленных атрибутах вы можете хранить свои данные, необходимые вам для последующей работы (например, амплитуду колебаний объекта, анимированного с помощью expression). Вы можете ставить ключи на свои атрибуты, использовать их в expressions, присоединять их к другим атрибутам через Connection Editor и т.д.

Динамические атрибуты проще всего удалить или отредактировать через меню Attribures, находящееся, как нетрудно догадаться, в Attribute Editor.

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

109

эффективность использования MAYA при работе со сложными сценами.

Кроме того, существуют секретные динамические атрибуты. Добавив из вы можете изменить свойства объекта (ноды), к которой эти атрибуты добавлены. Об этом читайте в конце главы.

Изменение порядка динамических атрибутов в ноде. Шаманство

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

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

К сожалению, в Мауа нет утилиты для такой работы. Может, написать какой-нибудь скрипт использующий недокументированные команды? Нет, все проще. Можно обойтись и без скрипта. Было замечено, что если выделить несколько динамических атрибутов в Channel Box и вызвать там же меню Delete Attributes, а затем сделать Undo, то MAYA восстановит эти атрибуты, но только

в обратном порядке и в конце списка. Отсюда можно сделать вывод, что любой динамическим атрибут можно перенести вниз, удалив его и восстановив командой Undo. Или вверх, если выбрать все атрибуты до него и повторить операцию удаления и восстановления два раза (второй раз, чтобы восстановить прежний порядок в удаленных атрибутах). Попробуйте сами.

Mesh In, Mesh Out

Мы уже на грани постижения тайны: того, что же такое Construction History. Однако позволим себе еще один эксперимент.

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

В Attribute Editor можно заметить, что для каждой такой «типа, сферы» присутствует закладка polySphere1, описывающая входящие атрибуты для вычисления сферы.

Установите subdivisionsAxis=4 и subdivisionsHeight=4, чтобы окончательно превратить сферу в «типа, сферу».

Теперь зададимся таким вопросом: если у полигональной сетки (определяемой нодой pSphereShape1) есть входной атрибут inMesh, то, может быть, у нее есть и выходной атрибут типа outMesh, в котором содержится описание этой сетки. Действительно, изучение Connection Edi­ tor выявляет наличие такого атрибута. Понятно, что содержимое inMesh и outMesh не обязано

110

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