Прежде всего, всегда заданы начальные условия. Их можно задать вручную, просто расположив объекты в первом кадре надлежащим образом, либо сохранив состояние объектов в любом другом кадре как начальное.
А дальше МАУАрассчитываеттраекторию объектов в каждом кадре на основании информации о положении объектов в предыдущем кадре.
Примечание. Я говорю «положение» объектов, имея в виду, конечно, позиции и скорости объектов. Корректнее говорить о «состоянии» объектов, пусть это и будет слишком психоаналитически.
То есть, чтобы знать о том, где объект будет находиться в сто первом кадре, MAYA должна знать, где объект находился в предыдущем, сотом кадре. В свою очередь, чтобы узнать положение в сотом кадре, ей нужна информация из девяносто девятого и т.д. Таким образом, чтобы рассчитать положение объекта к сто первому кадру, MAYA должна последовательно просчитать все предыдущие сто кадров.
Отсюда следует набор несложных законов.
Закон динамики 1.
Скорость воспроизведения анимации должна быть всегда равна Play Every Frame.
![](/images/openglorg10/openglorg10-273.png)
Действительно, если MAYA в режиме воспроизведения real-time начнет «ронять» кадры, расчет траекторий в пропущенных кадрах производиться не будет, и последующие за ними кадры будут вычисляться с ошибкой. При пропуске большого количества кадров это приводит к совершенно неадекватным результатам. Этот закон нарушается чаще всего, и первое, что надо проверить, когда появляются «глюки» при работе с динамикой - это скорость воспроизведения анимации. Коварство заключается еще и в том, что если скорости перемещения небольшие, а сцена не сильно тяжелая, пропуск кадров при проигрывании анимации вызывает лишь незначительное отклонение траектории от аналогичной, но просчитанной в каждом кадре. Но при рендеринге (где траектория просчитывается в каждом кадре) позиции объектов будут слегка отличаться от наблюдаемых в окне камеры. Иногда этим можно пренебречь, иногда - нет.
Поэкспериментируйте.
Искусственно утяжелите сцену с цепочкой шаров.
Например, установите для loft атрибут sectionSpans равным 200.
Проиграйте сцену в режиме realtime, остановитесь в районе пятисотого кадра, запомните его номер, верните sectionSpans в единицу, сдублируйте поверхность.
Теперь снова проиграйте анимацию сначала, но в режиме Play every frame. Остановитесь в том же кадре и сравните результат.
Закон динамики 2.
Анимация должна воспроизводиться всегда только вперед.
Попытки проиграть анимацию назад ни к чему не приводят. MAYA запоминает несколько предыдущих кадров, но сделать расчет движения назад уже выше ее возможностей. Дело в том, что численные методы, лежащие в основе расчета траекторий и используемые Rigid Body Solver, не работают «вспять». Еще раз: положение объекта в текущем кадре вычисляется на основе информации о предыдущем кадре.
Примечание. Некоторым пытливым умам, читающим эту книгу, наверное, посчастливилось закончить школу и даже поступить в технический институт. Те из них, кто доучился курса до третьего, могут смутно помнить названия «численные методы», «метод Эйлера», «метод Рунге-Кутты» и совсем жуткие «методы Адамса». Да, это все из той же оперы. В Attribute Editor для Rigid Body Solver вы даже можете выбрать, какой метод использовать при расчетах и увеличивать точность за счет измельчения шага по времени для борьбы с большими скоростями.