После этого, с помощью операции EditPolygons=>Extrude, превратите тарелку в другой вид посуды, например, в рюмку или бутылку. Вся анимация «устаканивания» будет успешно унаследована новой формой.

Сохраните сцену (plateFinal.ma). И попытайтесь отказаться от навязчивых мыслей о дальнейших усовершенствованиях.

Скорость объекта. Использование expressions для ориентации объекта по направлению движения. Работа с динамическими атрибутами Если перемещение объекта анимировано по ключам, никакой информации о скорости объекта у нас нет. Мы можем лишь узнать позицию объекта в каждом кадре. С помощью expressions можно вычислить скорость, ускорение и другие «динамические» свойства объекта, анимированного «традиционным» способом. Эти свойства можно затем использовать, например, для автоматического разворота объекта «носом» по направлению движения (то есть необходимо только проанимировать положение объекта по ключам, а вращение будет получаться автоматически).

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

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

Добавьте к конусу три динамических атрибута (Modify=>Add Attribute), назовите их oldX, oldY, oldZ.

Создайте довольно примитивный expression:

pConel .oldX=pCone1 .translateX;

pConel .oldY=pCone1 .translateY;

pConel .oldZ=pCone1 .translateZ; Пока этот expression абсолютно бесполезен, ибо просто копирует текущее положение конуса в дополнительные атрибуты в каждом кадре. Однако если мы допишем некоторые формулы перед этими строками, то сможем использовать «старую» позицию конуса перед тем, как она обновится.

Создайте локатор.

Допишите в expression еще три строчки:

locatorl ,translateX=pCone1 .oldX;

locatorl .translateY=pCone1 .oldY;

locatorl .translateZ=pCone1 .oldZ;

pConel ,oldX=pCone1 .translateX;

pConel .oldY=pCone1 .translateY;

pConel .oldZ=pCone1 .translateZ; Как следует из этих незамысловатых формул, локатор будет всегда отставать от конуса ровно на один кадр.

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

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

Таким образом, если мы заставим конус «смотреть» на локатор, он будет всегда ориентирован «по скорости», то есть поворачиваться по направлению движения. Проще всего это сделать с помощью Aim Constraint.

Выберите локатор, затем конус и выполните Constrain=>Aim Constraint с параметрами по умолчанию. Чтобы конус повернулся «макушкой» от локатора, задайте в Channel Box для объекта pConel_aimConstraint1 значение offsetZ=90. Опять «подергайте» за конус и убедитесь, что он теперь поворачивается макушкой по ходу движения.

Задача решена. Осталось, как обычно, навести блеск.

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


⇐ вернуться назад | | далее ⇒