- •Лекция 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 как непрямой скининг
Циклические движения. Устаканивание с помощью expressions
Представьте себе крутящуюся на столе тарелку, точнее последнюю фазу ее движения, перед тем как она, дребезжа, затихнет на столе. Или раскачивающуюся, но не падающую бутылку, которая постепенно «устаканивается» и перестает вращаться. Попробуем изготовить формулу для описания таких вращений, ибо количество ключей, необходимых для задания такого движения, совершенно не вдохновляет на использование ключевой анимации. Но сначала немного общих принципов описания циклических движений с помощью expressions.
Циклические движения описываются обычно с помощью функций sin() и cos(), задающих перемещения по двум любым координатам. Например, создайте полигональный куб и сделайте для него простой expression:
pCube1.tx = sin(time);
624
После этого куб начнет перемещаться в плоскости XY по окружности единичного радиуса. Чтобы увеличить радиус, следует просто домножить каждую функцию на свой коэффициент. В теории колебаний он называется амплитудой.
Если амплитуды колебаний по каждой координате разные, получится эллипс, а не окружность. Кроме амплитуды, существует еще частота колебаний, определяемая коэффициентом, на который умножается время.
Если частота колебаний по каждой координате разная, окружность превратится в различные
«циклоиды» и вместо периодической траектории вы получите довольно экзотические колебания. Для того, чтобы колебания постепенно затухали, необходимо, очевидно, чтобы амплитуда плавно уменьшалась со временем.
«Классический» способ состоит в использовании экспоненциальной функции с отрицательным аргументом
Более интуитивно понятный способ заключается в делении амплитуды на величину, пропорциональную времени, чтобы добиться линейного убывания амплитуды с временем.
Добавление единицы необходимо здесь для того, чтобы точно определять амплитуду в нулевой момент времени, а заодно для того, чтобы избежать деления на ноль.
Заметьте, что координата Z остается совершенно свободной. Вы можете задать спиралевидное движение, заставив ее равномерно увеличиваться. Это можно сделать с помощью двух ключей или же дописать в expression еще одну строку
Теперь вернемся к тарелке на столе.
В новой сцене создайте полигональный цилиндр.
Сожмите его по вертикали до состояния «тарелки» и приподнимите немного (trans- lateY=0.5).
625
Теперь поверните цилиндр на 30 градусов вокруг оси Z. Его край коснется «земли».
Тут пытливые умы сообразят, что радиус цилиндра равен единице и что угол в тридцать градусов был взят не с потолка, а в результате сакральных вычислений, заключающихся в следующем: если радиус цилиндра (равный единице) это гипотенуза прямоугольноготреугольника, а положение его центра по вертикали катет (равный 0,5), то угол напротив этого катета должен быть равен 30 градусов, ибо синус от 30 градусов равен в точности 0,5.
Давайте напишем expression, который будет вычислять угол поворота тарелки в зависимости от высоты, так, чтобы она всегда касалась «земли».
Откройте Expression Editor и создайте новый expression:
Загадочная функция asind - это арксинус (функция, обратная синусу), возвращающий значение в градусах (буква d на конце это от degree).
Теперь, если вы будете таскать тарелку вверх-вниз, она всегда будет касаться одним краем земли.
Теперь попробуем закрутить тарелку.
Оказывается циклические выражения, упомянутые выше, применимы не только к перемещениям, но и к любым другим атрибутам. Чтобы заставить, например, циклически поворачиваться нашу тарелку, можно просто написать формулу:
Две косые черты - знак комментария, и все, что следует за ним до конца строки, при выполнении expression игнорируется.
Сейчас тарелка весело вращается вокруг вертикальной оси, наклоняясь на 30 градусов. Для угла наклона у нас уже есть формула, осталось подставить ее вместо числа 30. Используем для этого переменную:
Теперь тарелка вращается под нужным углом в зависимости от высоты ее центра (не задирайте пока тарелку выше единицы).
626
Число 5 в формулах задает частоту колебаний. Эта частота должна возрастать по мере того, как тарелка опускается на «землю», а у самой земли тарелка должна неистово дребезжать.
Зададим формулу для вычисления частоты колебаний в зависимости от высоты центра тарелки, то есть от значения атрибута translateY.
Теперь, если высота центра близка к единице, то тарелка вращается с прежней частотой, приблизительно равной 5, а если опускать тарелку, то ее вращение стремительно ускоряется. Это можно увидеть, и не запуская анимацию, а лишь «таская» тарелку вверх или вниз. Добавление числа 0.01 необходимо для того, чтобы избежать деления на ноль, когда центр тарелки вдруг опустится на «землю».
В принципе expression готов. Для того, чтобы анимировать «устаканивание» тарелки, вам достаточно поставить ключи на атрибут translateY. Это даст вам возможность уложить ее на землю именно так, как, по-вашему, должны вести себя фотореалистические тарелки. Она может подниматься и опускаться столько раз, сколько вам нужно. Если вы до того прониклись революционными идеями процедурной анимации, что не можете более ставить ключи, можете дописать в expression дополнительную строчку для анимации translateY, например
Однако тогда вам придется дополнительно останавливать вконец обезумевшую тарелку. Наведем некоторый блеск и подготовим тарелку к дальнейшей анимации. «Блеск»
заключается в том, что надо отследить возможное возникновение математических ошибок (типа деления на ноль) и «вывести наружу» некоторые коэффициенты для дополнительной ручной анимации частоты вращения.
Во-первых, функция арксинус не может принимать в качестве аргумента значения больше единицы (ведь синус в мирное время больше единицы не бывает).
Поэтому надо проверить значение translateY и принять меры.
Во-вторых, если значение translateY равно нулю, это означает, что тарелка полностью
«легла» на землю. По существующей формуле частота колебаний ($speed) будет равна 500. Однако, к счастью, значение амплитуды $аmр, вычисляемой через арксинус, будет в этом случае равно нулю.
627
В-третьих, вы можете также сделать проверку и задать, что будет происходить, когда тарелка уйдет под землю, то есть translateY станет меньше нуля. Однако я предлагаю избавить себя от этой головной боли и задать в Attribute Editor нижний предел перемещений по оси Y равным нулю.
В-четвертых, число 5.0 следует вывести наружу в виде атрибута объекта, для того, чтобы можно было вручную задавать замедление или ускорение вращения.
Выберите цилиндр, добавьте к нему атрибут speed:
Теперь вы можете ставить ключи на атрибут speed, управляя скоростью вращения.
В-пятых, дальнейшие улучшения практически безграничны. Вы можете добавить также горизонтальные смещения центра цилиндра - для пущей реалистичности:
Коэффициент 100.0 также можно вывести наружу в виде атрибута объекта.
Наиболее пытливые умы могут придумать формулу вращения вокруг оси Y, чтобы обеспечить
«непроскальзывание» (хотя реальная тарелка как раз активно проскальзывает). Не забудьте только поменять порядок вращений в Attribute Editor на Rotate Order="yxz".
Сохраните сцену (plate.ma).
628
Если вы хотите еще немного поиграть с тарелкой, поставьте ключи на атрибут translateY:
После этого, с помощью операции EditPolygons=>Extrude, превратите тарелку в другой вид посуды, например, в рюмку или бутылку. Вся анимация «устаканивания» будет успешно унаследована новой формой.
Сохраните сцену (plateFinal.ma). И попытайтесь отказаться от навязчивых мыслей о дальнейших усовершенствованиях.
