Скелетная анимация, прямая и инверсная кинематика

Автор: Юрий Ильин

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

Никто, однако, не считает зазорным изучать анимацию годами, натыкаясь на каждом углу на справедливость поговорки «Век живи — век учись».

Если в общем, то скелетная анимация — это анимирование 3D-фигуры посредством относительно небольшого количества управляющих элементов, и внешне и по принципу работы, напоминающие скелет — или строение марионетки.

Как он «изготавливается», мы рассматривали в статье «Риггинг». От того, насколько разумно и правильно риггинг был выполнен, зависит и результаты первых попыток анимировать что-либо. Если иерархия костей сделана как надо, то и поведение цепочки, равно как и привязанных к ней вершин, будет «жизнеподобным». Ошибки же могут привести к совершенно нелепым последствиям: ноги могут «уехать» за голову, например.

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

Существуют два основных типа планирования движения «скелета» — это прямая кинематика (Forward Kinematics - FK) и инверсная, или обратная кинематика (Inverse Kinematics — IK). Их также выбирают на этапе риггинга, — впрочем, этот процесс от скелетной анимации вообще неотделим.

Итак: создадим отдельно взятую цепочку «костей» — без добавления мяса пока что. Все операции осуществляются в пакете Blender3D, скриншоты, стало быть, тоже оттуда.




Видим четыре кости, где первая - «родительская», все последующие — находятся в последовательной иерархической зависимости от предыдущих.

В случае если мы используем прямую кинематику, то при попытке сдвинуть какие-либо звенья (кости) ниже уровнем, чем родительская, приведут к тому, что двигаться будут только нижестоящие:



Повернули кость 2, вместе с ней повернулись (но остались на одной прямой) кости 3 и 4.

Это прямая кинематика: перемещение старших по иерархии костей приводят к тому, что перемещаются и младшие.

При использовании обратной кинематики алгоритм получается ровно противоположный:




Задав режим автоматического выбора инверсной кинематики (Blender делает вид, что подбирает оптимальный вариант, и иногда вполне успешно), сдвигаем самую младшую в иерархии кость 4; вся цепочка послушно изогнулась.

Звено цепочки, изменение положения которого приводит к изменению положения других звеньев, называется effector (существует диковинный перевод «влиятель», но как на самом деле это слово переводить?..).



Подвигали кость 3. Звенья 1-2 поменяли своё положение, а 4 — осталось на одной прямой со звеном 3. Кость 3 теперь является effector'ом, и всё, что находится ниже его по иерархии подчиняется алгоритмам прямой кинематики.

Инверсная кинематика применяется главным образом там, где требуется точное расположение конечного звена в нужной точке (например, чтобы при ходьбе ноги персонажа не «проскальзывали» по поверхности или не утопали в полигонах, изображающих твердь земную).

Самое же важное — это грамотная расстановка ограничителей (constraints) для подвижных элементов на этапе риггинга. Конечности модели персонажа должны вести себя «в разумных антропоморфических пределах», например, чтобы колени не прогибались не в ту сторону или пальцы рук не заворачивались за запястье.

Далее начинается процесс автоматизации движений — тут всё делается так же, как и при обычной анимации. Задаются ключевые кадры для отдельных управляющих элементов, и они тащат за собой все остальные. При этом анимационные пакеты вполне могут регистрировать ключевые положения только для индивидуальных костей, для всех звеньев разом или для отдельных их групп. При этом генерируются кривые движения/вращения/масштаба для каждого элемента, участвующего в анимации. Современные пакеты, разумеется, предоставляют в избытке средства, позволяющие экономить на усилиях — например, «глобализовать» управление сразу множеством элементов, группируя их более-менее удобным способом. На скриншоте ниже представлено всё рабочее окно Blender с активированными Action Editor и Timeline Editor.

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

Ну, и напоследок, добавим, что если целью стоит сделать не «реалистичную» анимацию, а стилизацию под анимацию рисованную, то необходимо иметь в виду пресловутые 12 принципов, заложенные диснеевскими аниматорами.

С прискорбием придётся констатировать, что глубокое понимание того, как работать с анимацией в общеми и прямой и обратной кинематикой в частности, можно получить лишь по изучению мануалов (а в руководстве к Blender3D соответствующие разделы занимают более полутора сотен страниц) — и долгих экспериментов.

просвещение
Разделы:
Рубрики:
Популярное: