
- •Лекция 5. Анимация
- •12 Приемов художников Disney для оживления анимации
- •Типы анимации.
- •Главный принцип анимации в maya
- •Общие принципы и внутреннее устройство анимации в maya
- •Защита от анимации
- •Скорость воспроизведения анимации
- •Анимация по ключам
- •Режим Auto Key
- •Работа с ключами в Attribute Editor
- •Основы работы с Graph Editor.
- •Dope Sheet - альтернативный графический редактор
- •Иерархическая анимация. Слоеная анимация
- •Типы ключей. Breakdowns
- •Короткие вставки. Inbetweens
- •Анимация по пути
- •Пресмыкание по пути
- •Редактирование анимации по пути
- •Деформация по пути
- •Порядок работы с констрейнами. Их устройство и отличия от других видов связи между объектами
- •Типы констрейнов. Их общие и уникальные атрибуты
- •Смешивание анимации - старый добрый подход
- •Борьба с переворачиванием
- •Совместимость констрейнов.
- •Удаление и добавление дополнительных управляющих объектов
- •Работа с весами.
- •Констрейны как потенциальный источник циклов в дереве зависимостей
- •Пример использования констрейнов. Конструирование карданной передачи
- •Порядок создания expressions
- •Разница между скриптами и expressions. Порядок выполнения expressions
- •Примеры использования expressions. Часы
- •Приручение Expression Editor
- •Примеры использования expressions. Телескопическая антенна
- •Циклические движения. Устаканивание с помощью expressions
- •Скорость объекта. Использование expressions для ориентации объекта по направлению движения. Работа с динамическими атрибутами
- •Коленвал.
- •Операция Set Driven Key. Формула произвольной гибкости
- •Интеллектуальный шлагбаум
- •Управление множеством атрибутов с помощью Set Driven Key.
- •Set Driven Key некоторые замечания
- •Порядок смешивания анимаций
- •Кватернионы, эйлеровские углы, синхронизация вращений и прочие ужасы
- •Бесплатный гхостинг, или классическая фазовка
- •Playblast: предварительный просмотр анимации
- •Работа со звуком
- •Еще раз про основной принцип анимации в maya
- •654 Книга Сергея Цыпцына
- •Типичный ритуал применения деформеров. Создание и удаление деформеров
- •Типы деформеров. Нелинейные деформации
- •Деформация частиц
- •Решетки Lattice. Free Form Deformation
- •Wrap deformer. Решетка произвольной формы. Обобщенные деформации
- •Деформеры Sculp и Wire
- •Кластеры - группирование компонент и объектов
- •Еще немного теории деформаций.
- •Порядок деформаций
- •Членство в партии деформеров. Вступление и выход из партии. Партиции и эксклюзивные деформеры
- •Окно для работы с Blend Shapes
- •Устройство объекта blendShape.
- •Совместимость форм и принцип работы морфинга
- •Последовательный морфинг
- •Морфинг групп и иерархий
- •Локальны й и глобальны й морфин г
- •Симметричный морфинг
- •Некоторые замечания по поводу лицевой анимации
- •Используйте Wrap и Wire деформеры
- •Оптимизируйте количество объектов
- •Wrap не любит изменения масштаба объекта влияния
- •Чего следует избегать при работе с Wrap-деформером
- •Wrap-деформер и параллельные деформации
- •Wrap-деформер в составе Skin Cluster-деформера
- •Wire и его dropoff-локаторы
- •Wrap для одежды
- •Wrap как непрямой скининг
Борьба с переворачиванием
Вроде бы задача решена, однако осталась неоднозначность в том, как конус повернут вокруг оси «прицеливания». По аналогии с разворотом лица к солнцу, мы никак не определили,
«каким ухом смотреть вверх».
За то, какой локальной осью смотреть вверх, отвечает атрибут Up Vector. Установите его в (1,0,0), и конус, продолжая смотреть макушкой на сферу, развернется так, чтобы его локальная ось X стремилась максимально смотреть наверх.
59 5
Таким образом, чтобы однозначно задать прицеливание одного объекта на другой с помощью Aim Constraint, вы должны определить две локальные оси прицеливаемого объекта: ЧЕМ (какой осью) смотреть на цель и ЧТО (какая ось) будет смотреть вверх.
Будет гораздо лучше, если вы будете знать, как расположены локальные оси прицеливаемого объекта, заранее, перед созданием констрейна. Это избавит вас от неожиданных сюрпризов.
Некоторые пытливые умы наверняка столкнутся с ситуацией, когда конус начнет
«перекручиваться». Поместите сферу в начало координат, а конус расположите точно над ней. Если перемещать сферу вдоль оси X, то при прохождении начала координат, конус над сферой быстро «прокручивается» вокруг линии «нацеливания». Чтобы это лучше увидеть, оттащите одну или несколько вершин на краю конуса, чтобы сделать его несимметричным.
Это вовсе не глюк и не ошибка. В данном случае MAYA делает ровно то, что от нее просят. Разберем ситуацию поподробнее.
Медленно перемещайте сферу по горизонтали и следите, как расположена локальная ось X конуса (можно для наглядности выбрать конус и включить отображение локальных осей: Display=>Component Display=>Local Rotational Axes).
Конус, в соответствии с полученными указаниями, пытается направлять свою локальную ось X вертикально вверх. Когда сфера проходит через начало координат, эта локальная ось становится почти горизонтальной и в какой-то момент «переворачивается» на 180 градусов, чтобы упорно продолжать смотреть наверх. Все это совершенно корректно и предсказуемо.
Дело в том, что в некоторый момент локальная ось Y конуса смотрит строго вниз. В этот момент направление прицеливания становится параллельным вертикали. Получается, что конус должен одновременно смотреть вниз осью Y и вверх осью X. (Если конус находится снизу от сферы, получается, что он должен смотреть вверх обеими локальными осями, X и Y.). С точки зрения математики возникает особая точка, или сингулярность, а с точки зрения «нормальных людей» возникает вопрос: как этого избежать, как заставить конус не прокручиваться?
Именно в этом конкретном случае, когда направление прицеливания конуса проходит через вертикаль, надо просто использовать для ориентации вместо направления вверх направление вбок. До сих пор мы предполагали, что локальная ось X должна смотреть вверх, не задумываясь, а почему, собственно, «вверх». Оказывается, за направление, к которому стремится ось, заданная через атрибут Up Vector, отвечает атрибут World Up Vector. По умолчанию он равен (0,1,0), то есть определяет направление «вверх».
Измените значение World Up Vector на (0,0,1). Конус станет смотреть своей локальной осью X «вбок», вдоль направления мировой оси Z. Чтобы вернуться к предыдущей ориентации, но
596
с данным значением World Up Vector, надо очевидно изменить атрибут Up Vector на (0,0,1), чтобы конус смотрел «вбок» своей осью Z.
Теперь конус не «прокручивается», когда сфера проходит через начало координат. Таким образом, при использовании Aim Constrain вы должны также держать в уме будущее возможное расположение объектов и стараться избегать ситуации, когда ось «прицеливания» будет проходить через направление, заданное с помощью World Up Vector. Если нацеливаемый объект будет
«рыскать» в поисках цели в горизонтальной плоскости, то в качестве «верха» вполне годится World Up Vector=(0,1,0). Если направление прицеливания в процессе анимации будет проходить через вертикаль, определите World Up Vector как направление, через которое никогда не пройдет линия прицела.
Примечание. Нельзя задавать одинаковое значение для атрибутов Aim Vector и Up Vector. В этом случае вы будете разворачивать объект одной и той же осью и «на цель» и «вверх».
Примечание. Атрибуты Aim Vector и Up Vector могут задавать не только локальные оси объекта с помощью «круглых» значений типа (0,1,0) или (1,0,0), но и могут определять произвольное направление «внутри» объекта, которым он должен смотреть с нужном направлении. Но это скорее экзотика, чем правило.
Предвижу вопросы о том, а как быть в произвольном случае, когда заранее не известно расположение цели и «целящегося» объекта. Для любителей самых общих случаев могу предложить следующее решение.
Вместо того, чтобы определять фиксированное направление «вверх» или «вбок» для ориентации объекта после прицеливания, можно создать дополнительный объект и дать указание целящемуся объекту смотреть одной из своих осей не вверх, а на этот объект. В гуманитарных терминах это прозвучит так «Смотреть лицом на солнце и при этом макушкой на зонтик (фонарь, самолет)».
Создайте с сцене с конусом локатор. Наверняка его имя будет locatorl .
Выберите конус и в атрибутах pCone1_aimConstraint1 установите World Up Type=Object Up. Это значит, что вместо «верха» будет использоваться направление на некоторый объект.
Задайте имя этого объекта (locator1) в поле World Up Object.
После этого конус развернется своей локальной осью Z (определенной в Up Vector) в направлении локатора.
Задайте снова Up Vector равным (1,0,0), и конус развернется к локатору своей осью X, продолжая смотреть на сферу.
597
Таким образом, теперь у вас есть полное управление тем, как будет вести себя конус в процессе -слежения - за сферой. Вы можете контролировать, куда смотрит «лицо» конуса, а также, куда направлена его «макушка». В процессе анимации следует избегать ситуаций, когда сфера, конус и локатор оказываются на одной линии. Это несложно сделать, просто анимируя положение локатора.
Очень часто Aim Constraint применяется для ориентации камер или источников света в нужном направлении. При создании такой «следящей камеры» следует учитывать, что локальная ось Z для источников света и камер направлена «назад», поэтому в качестве Aim Vector для них следует выбирать (0, 0, -1), а в качестве Up Vector (0,1,0).
Подводя итог разговора про Aim Constraint, хочу напомнить, что вы должны безупречно представлять себе, как расположены локальные оси объекта. Вас не должна смущать запись типа (-1,0,0) для обозначения направления внутри объекта, противоположного локальной оси X. Вы также должны помнить, что объект может поворачиваться в сторону цели различными способами, поэтому необходимо уточнять, куда смотрит не только его «лицо», но и «макушка».
Совет. Атрибуты offset при использовании Aim Constraint чудовищно удобны. Мало того, что они позволяют анимировать небольшое собственное -рысканье- объекта. В ситуации, когда объект -смотрит- на цель не той локальной осью, вместо возни с переопределением Aim Vector и Up Vector, можно просто развернуть (или точнее -довернуть-) объект нужной осью на цель, добавив, -методом тыка-
90 (или -90) градусов в соответствующее значение для атрибутов offset.
Geometry Constraint
Следующие три типа констрейнов согласуют объект не с положением или вращением управляющего объекта, а с его формой.
Первый из них, Geometry Constraint, позволяет «посадить» объект на поверхность или кривую и ограничить его движение только в пределах этой кривой или поверхности.
Следует четко понимать, что этот констрейн не прикрепляет «намертво» объект к фиксированной точке на поверхности. Вы можете свободно перемещать объект и анимировать его положение. MAYA будет пересчитывать его позицию как ближайшую точку на поверхности. Если передвигать саму управляющую поверхность, то объект будет скользить по ней, пытаясь остаться на месте, но следуя наложенным ограничениям.
Этот констрейн удобен для анимации движений объекта вдоль поверхности. Он имеет только атрибуты, определяющие вес управляющей поверхности или кривой.
Примечание. Для того, чтобы намертво закрепить объект в фиксированной точке поверхности, имеются многочисленные способы, описанные в главе про изнанку MAYA.
Normal Constraint
Данный констрейн позволяет развернуть объект так, чтобы он смотрел вдоль нормали к заданной поверхности. Управляемый объект только разворачивается вдоль нормали, но остается на месте и не перемещается на поверхность. Поэтому Normal Constraint и Geometry Constraint часто используют вместе.
Читая выражение «смотрел вдоль нормали», вы должны сразу понимать, что в этом случае необходимо задавать значения того, какой осью объект должен смотреть вдоль нормали и какой осью он должен смотреть наверх. Он имеет такие же атрибуты, как и Aim Constraint, и требует четкого понимания, как расположены локальные оси внутри управляемого объекта.
Совет. Атрибуты offset при использовании Normal Constraint удобны для разворота
598
объект а нужной локальной осью вдоль нормали. Кроме того, вы можете использовать Normal Constraint для ориентации объекта не только вдоль нормали, но и вдоль касательной в поверхности. Ориентация объекта в касательной плоскости также может настраиваться атрибутами offset.
Tangent Constraint
ЭТОТ констрейн используется для ориентации объекта вдоль направления касательной к выбранной кривой. Он не работает с поверхностями в качестве управляющих объектов. Используется редко. Имеет атрибуты и идеологию, аналогичные Aim Constraint.
Совет. Гораздо проще закрепить и развернуть объект по касательной к кривой с помощью анимации по пути. Закрепить объект на поверхности этим же способом можно, создав кривую на поверхности (для сплайнов) или сдублировав полигональное ребро. Полученную кривую можно использовать для анимации по пути, с сохранением истории моделирования и принадлежности такой кривой к поверхности.
Pole Vector Constraint
Констрейн с таким устрашающим названием предназначен для весьма специальных целей. Если вы создали цепочку из костей и сделали для нее IK Handle, то при сгибании такой цепочки (пусть это будет рука или нога), локоть (или колено) сгибается в каком-то, не всегда удобном направлении. Для того, чтобы четко определять, куда будут смотреть локти или колени согнутых с помощью инверсной кинематики конечностей, существует Pole Vector Constraint.
От том, что Pole Vector является атрибутом объекта типа IK Handle и задает плоскость, в которой двигается кинематическая цепочка из костей, читайте с разделах про скелетоны и инверсную кинематику.
Очевидно, что управляемым объектом в этом случае будет объект IK Handle, причем только с определенным типом вычисления инверсной кинематики, а именно Rotation Plane IK Handle. Управляющим объектом, как правило, выбирается локатор.