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

ponimayka1

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

Удалите исходную кривую.

Обратите внимание на расположение локальных осей внутри гада: ось Z смотрит вперед, осьУ - вверх. Отметьте также, что пивот находится в начале координат. Скоро мы об этом вспомним. Отмасштабируйте кривую, чтобы ее длина равнялась примерно пяти единицам. Нарисуйте путь для Гада. Это может быть абсолютно произвольная кривая. В качестве эксперимента можете ставить точки неравномерно. Перед "Запуском" Гада по пути, задайте диапазон проигрывания анимации от нуля до двухсот кадров.

Выберите сначала Гада, затем кривую (путь всегда выбирается последним). Выполните операцию Animate=>Motion Paths=>Attach to Motion Path. Проиграйте анимацию.

Гад довольно весело едет по пути, однако совершенно не так, как нужно.

581

Есть подозрение, что при выполнении последней операции можно было бы открыть Op­ tion Box и указать массу параметров. Однако по доброй майской традиции все настройки можно произвести после выполнения операции, отредактировав нужные атрибуты соответствующей ноды.

Если Гад выбран, откройте Attribute Editor и разыщите там закладку motionPath1, отвечающую за прикрепление объекта к пути.

Соответствующая нода появляется и в Channel Box в разделе INPUTS, однако для редактирования нужных нам атрибутов необходим Attribute Editor.

Прежде всего, следует отметить, что по умолчанию включен атрибут Follow, отвечающий за повороты объекта вдоль пути. Однако мы не определили, каким «боком» наш Гад должен смотреть вдоль пути. Очевидно, что он должен двигаться «носом вперед», однако MAYA ничего не знает о том, где у нашего мутанта «нос». По умолчанию объект движется по пути, разворачиваясь своей локальной осью X по ходу движения. Это следует из значения атрибута Front Axis=X.

Установите Front Axis=Z, припоминая о том, что локальная ось Z у нашего пресмыкателя направлена вперед. Анимация сразу примет более благопристойный вид.

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

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

В нашем случае установка по умолчанию Up Axis=Y задает подходящую для нас ориентацию Гада «глазами вверх», так как локальная ось Y объекта направлена вверх.

Кроме того, в атрибутах motionPath1 заданы значения World Up Type=Vector и World Up Vector=(0,1,0). Это означает, что локальная ось объекта, заданная с помощью UpAxis, будет стремиться развернуться в направлении конкретного вектора (World Up Туре), координаты которого заданы как (0,1,0), то есть вертикально вверх.

Поэкспериментируйте со значениями Up Axis, чтобы убедиться, что можно задавать

582

ориентацию не только «глазами вверх», но и «боком вверх», и даже «брюхом вверх». Не забудьте про опции Inverse Front и Inverse Up. Они позволяют развернуть объект «задом наперед» и «вверх тормашками».

Когда направление движения по пути становится параллельным направлению «вверх», заданному через World Up Vector, объект может внезапно перевернуться. В нашем случае это может произойти, если на пути движения встретится вертикальный участок. Эта проблема связана с тем, что в таких случаях объект пытается смотреть «вверх» одновременно и «носом» и «макушкой». «Макушка» при этом, может стремительно вращаться.

Эту проблему решают обычно выбором направления World Up Vector таким образом, чтобы оно никогда не совпадало с касательной к пути движения. Если же траектория столь замысловата, что нельзя подобрать такой вектор, проблема решается выбором альтернативного метода разворота «макушки» объекта, а именно World Up Type=Object Up. В этом случае требуется создать дополнительный объект (обычно это локатор) и указать его имя в поле World Up Object. После этого объект будет двигаться по пути и стараться ориентироваться своей «макушкой» на локатор, который можно ловко анимировать, управляя ориентацией объекта. Подробнее о том, как избежать проблемы перекручивания и внезапных переворотов, вы можете прочитать в разделе про констрейны, а именно в описании Aim Constraint.

Атрибуты Front/Up/Side Twist позволяют «доворачивать» объект на нужный угол, если это необходимо: ведь атрибуты rotate самого объекта заблокированы входящими связями от ноды motionPathl. Вы можете анимировать атрибуты Twist любым способом.

Чтобы включить режим «мотоциклетного наклона внутрь поворота», существует опция Bank (крен). Соответствующие атрибуты позволяют задать диапазон автоматического крена.

Редактирование анимации по пути

Теперь поговорим немного об внутреннем устройстве анимации по пути.

Как следует из Channel Box, на атрибутах translate и rotate объекта появились некоторые связи. Перемещением и вращением объекта теперь управляет нода motionPathl, в чем нетрудно убедиться, открыв Hypergraph.

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

Самый «главный» атрибут ноды motionPath - это U Value. Он определяет, в каком месте на кривой располагается объект.

Как вы знаете, «конкретное место на кривой» задается параметром U. Очевидно, что если кривая имеет контрольные точки, неравномерно распределенные в пространстве, и построена по умолчанию с использованием параметризации типа Uniform, то параметр U (или U-координата) распределен вдоль кривой совершенно неравномерно. Именно поэтому опция Parametric Length по умолчанию выключена, и объект движется вдоль кривой не в соответствии с параметризацией, а пропорционально длине кривой. В этом случае атрибут U Value представляет собой длину пройденного участка кривой. Точнее говоря, он изменяется от нуля до единицы, отражая, какую часть полной длины кривой объект уже «проехал».

Если вы включите опцию Parametric Length, то увидите, что объект будет двигаться не равномерно, а в соответствии с «насыщенностью» контрольными точками на различных участках. Основная идея движения по пути заключается в том, что вы анимируете (не обязательно ключами) атрибут U Value ноды motionPath и тем самым изменяете положение и ориентацию объекта в пространстве. Сам объект анимируется «пассивно», то есть через посредника.

Примечание. В

некотором смысле Motion Path можно рассматривать

как констрейн.

По умолчанию,

он создается уже с анимацией атрибута U Value,

однако если в

583

Option Box операции Attach to Motion Path определить Time Range как Start, mo a результате выполнения этой операции получится объект, закрепленный в начале кривой. Кривая в этом случае может рассматриваться как управляющий объект, а нода motionPoth как типичный констрейн с возможностью анимации положений объекта на кривой.

По умолчанию, на атрибуте U Value стоят два ключа: один равен нулю в начале диапазона анимации, а второй равен единице в конце диапазона. Можно в любом кадре отредактировать или удалить эти ключи, а также поставить новые. Помните одно: вы анимируете не объект в пространстве, а объект «вдоль кривой».

Если хотите, чтобы наш анимированный Гад Ползучий быстро проползал первую половину пути, но медленно тащился на оставшемся участке, перейдите в кадр 50, задайте U Value=0.5 и поставьте ключ на этот атрибут. Это означает, что на первую половину объект потратит 50 кадров, а на вторую - 150.

Таким образом, вы можете заставить объект ездить взад-вперед или останавливаться.

В тех местах, где на атрибуте U Value стоят ключи, на кривой появляются маркеры. Они, во-первых, облегчают контроль над темпом движения вдоль пути, а во-вторых, позволяют редактировать скорость передвижения. Эти маркеры можно выбирать (проще всего с помощью Select Tool) и даже перемещать вдоль кривой с помощью Move Tool, редактируя анимацию таким образом. Для выбранного маркера можно также изменить в Attribute Editor значение времени, соответствующее данному ключевому кадру.

Маркеры можно удалять, быстро удаляя, таким образом, ключи с атрибута U Value. Откройте Graph Editor для выбранного гада.

Убедитесь в том, что анимационная кривая существует только для атрибута U Value, а атрибуты rotate и translate никаких ключей не имеют. Чтобы увидеть «мнимые» анимационные кривые для этих атрибутов, выполните в Graph Editor операцию View=>Show Result.

584

Нажмите «f» для адекватного отображения результата.

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

Деформация по пути

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

Можно, конечно, вручную создать нужный деформер, «припарентить» его к объекту и задать его анимацию в зависимости от пройденного пути. Однако специально для таких случаев в MAYA имеется операция Animate=>Motion Path=>Flow Path Object (flow «течение»), позволяющая сделать так, чтобы объект не только «ехал», но и «тёк» по пути. В Option Box этой операции есть две основные опции.

Первая, Lattice Around=Object, создает деформационную решетку Lattice вокруг объекта и позволяет изгибать сам объект в соответствии с участком пути, на котором он находится.

Вторая опция, Lattice Around-Curve, более интересна: она позволяет создать деформационную решетку вокруг пути, а объект при движении будет «пролезать» сквозь эту решетку, изгибаясь, сжимаясь или растягиваясь.

Выберите нашего твердотельного гада.

Откройте Option Box операции Animate=>Motion Path=>Flow Path Object и установите Lattice Around=Curve. В этом случае следует задать достаточно большое количество разбиений решетки, ведь она будет создана вдоль всего пути.

Установите Divisions:Front=100 и нажмите Flow.

585

Вдоль пути появится «коридор», внутри которого яростно пресмыкается вполне гибкий

гад.

Примечание.

Созданный «Коридор» - это обычная деформационная

решетка Lat­

tice. Иногда при

выполнении

операции

Flow

Path

Object анимируемый объект «не

влезает»

в

решетку

и деформируется

некорректно.

В этих

случаях нужно

просто

выбрать

в

Outliner саму решетку ffdlLattice

и

соответствующую

ей «базовую»

решетку

ffdtBase,

а

затем отмасштабировать

их

обеих

так,

чтобы

объект

полностью

помещался

внутри

«коридора.

 

 

 

 

 

 

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

Выделите в Outliner решетку ffdlLattice и базовую решетку ffdl Base. Возьмите Scale Tool и растяните обе решетки по вертикали, пока деформация не станет корректной.

586

Чтобы «вползание» в решетку отрабатывалось корректно, следует выбрать решетку, открыть Attribute Editor и указать в закладке ffd1, как должен вести себя объект вне решетки.

Установите Outside Lattice=All.

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

Сохраните сцену (snakeM.otionPath.ma)

587

Некоторые практические замечания по использованию анимации по пути

Если вы будете запускать по пути камеру или направленный источник света, имейте в виду: локальная ось Z этих объектов смотрит «назад». Поэтому если вы хотите, чтобы камера ехала по пути объективом вперед, следует указать в атрибутах motionPath, что Front Axis= Z, и включить опцию Inverse Front. При запуске по пути «следящей камеры» следует выключить опцию Follow, чтобы «освободить» атрибуты rotate и организовать слежение с помощью Aim Constrain.

Кстати, проложить путь для анимации объекта можно, не создавая предварительно кривую. Достаточно воспользоваться операцией Animate=>Motion Paths=>Set Motion Path Key. Если передвигать объект в нужное положение и выполнять эту операцию, то MAYA будет «выращивать» путь вслед за объектом. Надо только не забывать перемещаться в нужный кадр перед установкой очередного ключа.

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

Очевидно, что кривая, по которой движется объект, может быть анимирована любым известным вам способом. В том числе с помощью морфинга Blend Shapes.

Иногда возникает задача запуска по пути не обычных объектов, а системы частиц. Для этого существует скрипт, создающий множество локаторов, окружностей, expression и goalобъектов. Этот скрипт запускается из основного меню операцией Effects=>Curve Flow, и перед его запуском нужно выбрать только одну кривую. Для тех, кого не устраивает производительность или качество этого эффекта, могу порекомендовать воспользоваться плагинами Stroika Dynamics компании Kolektiv (www.kolektiv.com).

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

Для сплайновых поверхностей достаточно создать «кривую на поверхности» (curve on sur­ face) и запустить объект по ней. Благодаря тому, что такие кривые «вшиты» в поверхность, объект всегда будет оставаться на поверхности, даже при деформациях последней.

Для полигональных сеток задача прокладывания пути по поверхности немного усложняется. Для сохранения истории можно скопировать некоторое количество ребер с помощью операции Du­ plicate Surface Curves. Затем соединить их в кривые и, натянув на них поверхность типа Loft или Square, свести задачу к предыдущему случаю. Однако выглядит это довольно громоздко.

Можно также воспользоваться динамикой волос и посадить на полигональную сетку одиночный «волос». Его (follicle) можно использовать как управляющий объект для Point и Orient Constraint. Движения по поверхности можно задавать, анимируя атрибуты U/V Parameter ноды fol­ licle для этого волоса.

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

588

Здесь, наверное, следует сразу начать с терминологических комментариев. Английский глагол constrain переводится как «принуждать», «сдерживать» и даже «заключать в тюрьму». Существительное constraint переводится как «ограничение», «принуждение» и «тюремное заключение». Применительно к майской тематике, эти значения подходят, мягко говоря, плохо. Володя Забелин посоветовал мне неплохой теоретический термин «согласование» (в смысле: согласование поворотов, размеров, позиций). Он очень хорошо отражает суть именно майского подхода и в качестве глагола очень удобен, однако использовать его для обозначения соответствующих объектов (то бишь «согласователей») не слишком, скажем так, ловко. «Ограничители», «связи», «удержатели»? Это плохо отражает суть дела и к тому же путается с другими майскими понятиями (попробуйте перевести «Aim Constraint» двумя словами, и вы поймете, о чем я).

Поэтому я оставил это существительное без перевода и просто перенес его из уже существующего, устного использования в письменное. Но вот довольно лихой глагол, то есть «приконстрейнить», я буду стараться применять как можно реже: в общем, можно выкрутиться при помощи фраз типа «нацелим верхушку объекта А в центр объекта Б с помощью Aim Con­ straint». Объекты, выбранные в качестве ограничивающих или согласовывающих движение, я буду называть управляющими объектами, а объект, чье движение согласуется или ограничивается

управляемым.

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

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

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

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

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

Применение, освоение и эффективное применение констрейнов требует некоторой

589

«инженерности» мышления. Когда я впервые увидел хорошо известную конструкцию под названием Reverse Foot для управления ногами персонажа, я всерьез задумался над тем, в какой же извращенноизобретательный ум могла прийти такая логика использования костей и констрейнов. Если вы собираетесь сконструировать довольно сложную систему или механизм, рекомендую сначала набросать его функциональную схему на бумаге. Если вы знакомы с теоретической механикой (самой страшной дисциплиной среди естественных наук), это дает вам огромное преимущество в сборке и подготовке моделей к анимации.

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

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

Вот пример. Создайте сферу и куб, раздвиньте их в пространстве. Выберите сферу, затем куб и выполните Constrain=>Point.

Куб тут же «прилипнет» к центру (пивоту) сферы и в дальнейшем будет автоматически двигаться вместе с ней.

Попытки передвинуть сам куб ни к чему не приведут он «прибит» к сфере. Хотя может свободно и независимо от сферы поворачиваться и растягиваться.

Секундочку! Но ведь если взять и соединить с помощью Connection Editor все атрибуты translate сферы и куба, то результат будет идентичный. Так в чем же разница?

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

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

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

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

Добавьте в предыдущую сцену еще пару объектов, например, тор и конус. Выберите их, а затем выберите уже «приконстрейненный» куб.

И снова выполните Constrain=>Point.

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

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

Если выбрать куб, то в Channel Box можно обнаружить ноду pCube1_pointConstraint1, имеющую атрибуты offset, и три атрибута, отвечающие за вес каждого управляющего объекта.

590

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