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

Ускорение/торможение падения твердых тел Первый пример из динамики твердых тел. Пример очень прост - домино падает на плоскость под действием силы тяжести (scaleBodyDynamicsStart.ma). Если вам лень открывать сцену, сделайте подкупающую новизной прыгающую сферу по плоскости.

Домино бодро падает на плоскость, но предположим, что по условиям “технического задания” вся сцена - от начала падения до полной остановки - должна занимать строго определенное время, например, 100 кадров. (При производстве рекламных роликов или телевизионных заставок такое жесткое нормирование времени, отпущенного на спецэффект - весьма распространенное явление.) Однако сцена падения получилась продолжительностью в 160 кадров. Как быть?

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

Можно преобразовать динамическую сцену в анимацию по ключевым кадрам (bake simulation), и к полученным анимационным кривым движения кубика применить технологию искажения времени, но и этот путь не лишен недостатков. Во-первых, мы лишаемся всех динамических законов, и становится проблематичным внесение исправлений в сцену (как то, пожеланий режиссера, типа “Вот бы кубик прыгал повыше и повеселее!”). Во-вторых, после “испекания” может потребоваться дополнительная обработка полученных анимационных кривых, например, Эйлерова фильтрация кривых вращения. Наконец, этот путь просто неэлегантен.

Гораздо более плодотворной представляется идея изменить внутреннее (локальное) время самой динамической системы. В случае твердых тел это внутренне время следует искать в атрибутах “решателя” (Rigid Body Solver) - именно он отвечает за создание динамической анимации.

Откройте Solvers=>Rigid Body Solver и обратите внимание на атрибут currentTime - это и есть локальное время динамической системы, и именно с этим атрибутом следует поработать.

Атрибут currentTime не свободен, то есть имеет связь с другим атрибутом ( о чем свидетельствует желтый цвет поля атрибута). Но нас это не должно пугать. Воспользовавшись Hypergraph мы легко можем определить, что интересующий нас аттрибут напрямую связан с timel. outTime, то есть с глобальным временем системы.

Разорвите эту связь прямо в Attribute Editor (правая кнопка мыши - Break Connection), а затем в поле аттрибута currentTime введите строку:


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