3dsMax. Инверсная кинематика. Урок 1

3dsMax. Инверсная кинематика. Урок 1

Инверсная кинематика является основой, на которой строится персонажная анимация. Она работает совсем не так, как прямая кинематика, — в режиме инверсной кинематики потомки приводят в движение родительские объекты. Потомок, который вызывает трансформации других объектов по законам инверсной кинематики, называется либо эффектором (Effector), если он расположен в середине иерархической цепочки, либо конечным эффектором (EndEffector), если он представляет собой конечный объект этой цепочки. Через эффектор манипулируют всей иерархической цепочкой. При этом преобразование конечного эффектора обеспечивает трансформацию всех объектов иерархической цепи по законам инверсной кинематики, а изменение положения простого эффектора приводит к тому, что положение объектов, стоящих по иерархии ниже его, меняется по законам прямой кинематики, а объектов с более высокой иерархией — по законам инверсной кинематики.

В качестве примера откройте файл Robot7.max. из архива Robot7.zip. Иерархическая цепь объектов здесь уже создана. Чтобы ее увидеть, на главной панели инструментов нажмите на кнопку Schematic View (Open)  — в нашем случае конечными эффекторами иерархической цепочки будут самые нижние в иерархии объекты Foot_R, Foot_L, Hand_R, Hand_L, Head (см. рис. 1).

Рис. 1. Иерархическая структура робота

Установите режим инверсной кинематики. Для этого на панели Hierarchy откройте вкладку IK (Инверсная кинематика) и нажмите на кнопку Interactive IK (Интерактивная инверсная кинематика). Выделите объект Center и сместите его в сторону — вместе с ним точно так же сместятся и все остальные объекты. Теперь выделите, например, объект ChamferCyl001 и переместите в любую сторону его — это приведет к изменению положения ряда других объектов. Положение объектов, стоящих по иерархии ниже перемещаемого объекта (в нашем случае это объекты Sphere008, ChamferCyl003, Sphere009 и Hand_L), будет меняться по законам прямой кинематики, поэтому их взаимное положение не изменится. Положение объектов с более высокой иерархией (Sphere002, Breast) будет меняться по законам инверсной кинематики (рис. 2).

Рис. 2. Непредсказуемое поведение объектов

Обратите внимание, что при перемещении объекта ChamferCyl001 положение и ориентация ряда объектов меняются непредсказуемым образом. Это связано с тем, что по умолчанию для объектов, управляемых посредством эффектора, допустимы любые варианты перемещения и вращения, хотя на практике они могут трансформироваться только каким-либо определенным образом. При инверсной кинематике эти проблемы регулируются на вкладке IK панели Hierarchy с помощью параметров, задаваемых в свитках Sliding Joints (Скользящие соединения) и Rotational Joints (Вращательные соединения).

Кроме того, в системе можно определить объект, который будет играть роль ограничителя. Terminator (Ограничитель) — это последний объект системы инверсной кинематики, начиная с верхнего уровня, который не подвергается влиянию при движении дочернего объекта. Для определения ограничителя достаточно выделить объект и в свитке Object Parameters установить для него флажок Terminator.

Выделите объект Sphere007, перейдите на вкладку Hierarchy | IK и включите команду Interactive IK. В свитке Object Parameters установите флажок для опции Terminator. Передвиньте теперь объект ChampherCyl002 в любую сторону — объект Sphere007 и все стоящие в иерархии выше него, останутся неподвижными (рис. 3).

Рис. 3. Объект Sphere007 определен в качестве ограничителя

Решатели инверсной кинематики

Существуют четыре метода, основанные на применении решателей инверсной кинематики (IK-решателей) (рис. 4):

Рис. 4. Решатели инверсной кинематики
  • HI Solver (History Independent IK Solver) — независящий от предыстории решатель инверсной кинематики. Скорость работы этого решателя не зависит от числа кадров анимации. Он наиболее подходит для персонажной анимации систем объектов Bones (Кости), а также для анимации любых других цепочек связанных объектов;
  • HD Solver (History Dependent Solver) — зависящий от предыстории решатель инверсной кинематики. Его также можно применять к системам объектов Bones, а также к любым другим цепочкам связанных объектов. Зависимость от предыстории означает, что чем длиннее анимационная последовательность кадров, тем дольше этот решатель рассчитывает анимацию. Он хорошо подходит для анимации механических устройств, особенно со скользящими деталями;
  • IK Limb Solver (Решатель инверсной кинематики для анимации конечностей) — не зависит от предыстории и рассчитан только на работу с двумя костями иерархической цепи. С его помощью можно анимировать руки и ноги персонажа;
  • SplineIK Solver (Решатель инверсной кинематики на основе сплайна) — использует сплайн для определения кривизны последовательности костей или других связанных объектов. Каждой вершине сплайна назначается вспомогательный объект, с помощью которого вершину можно передвинуть. Удобен для анимации позвоночников, вытянутых тел типа хвостов, гусениц, щупалец или змей.

Рассмотренные решатели преобразуют иерархические последовательности объектов в цепи (IK-цепи), упрощающие управление элементами иерархии по законам инверсной кинематики. В окнах проекций цепи инверсной кинематики (IK-цепи) выглядят как ряд перекрестий и линий, соединяющих начало и окончание конкретной IK-цепи. Выбирают эти элементы щелчком по перекрестию или инструментом Select by Name, а редактируют через панель Motion.

IK-решатели различаются между собой разными методами преобразования IK-цепей при расчетах.

Анимация с использованием решателя HI Solver

Рассмотрим простейший пример создания анимации с помощью решателя анимации HI Solver. Снова откройте файл Robot7.max и выделите объект ChamferCyl004. Затем на главной панели инструментов выполните команду Animation | IK Solvers | HI Solver, после чего щелкните мышью на объекте Hand_R. В результате будет создана цепь инверсной кинематики IK Chain001 от объекта ChamferCyl004 до объекта Hand_R. В опорной точке объекта Hand_R будет создано перекрестие, или целевой объект IK Goal (Целевой объект решателя) (рис. 5).

Рис. 5. Создание цепей инверсной кинематики

Выделите объект IK Chain001 и переместите перекрестие, или целевой объект IK Goal, в любую сторону, и вы заметите, что на этот раз поведение робота стало более предсказуемым. Обратите внимание, что при движении все объекты цепи остаются в плоскости, созданной элементами цепи. Аналогичным образом создайте еще три цепи инверсной кинематики — для левой руки и для обеих ног (см. файл Robot8.max в архиве Robot8.zip).

Совместно с решателем HI Solver параметр Terminator не используется.

Активизируйте режим автоматической генерации ключевых кадров Auto Key и обычным образом анимируйте робота, перемещая объекты IK Chain001, …, IK Chain004. Визуализируйте полученную анимацию (см. файл Robot9.max из архива Robot9.zip).

3dsMax. Инверсная кинематика. Урок 1: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *