Инверсная кинематика в Blender

Обновлено:

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

Однако существует и обратная, то есть инверсная кинематика (inverse kinematics) — ИК (IK), когда изменения подчиненных элементов в определенной степени меняет положение старших в иерархии. Так, если вытянуть руку ладонью вниз, затем развернуть кисть ладонью вверх, то вместе с ней повернутся вокруг своей оси предплечье и на небольшую величину плечо.

Другой пример — поднятие предмета с пола. Ведущей здесь можно считать кисть, так как на ней сосредоточено внимание. Мы не думаем, как у нас отведено плечо в каждый момент времени, под каким углом к нему следует располагать предплечье, чтобы движение кисти соответствовало нужной траектории. И плечо, и предплечье двигаются вслед за кистью.

По идее влияние обратной кинематики должно быть меньше, чем прямой. Иначе следовало бы задуматься о неверной установки связей подчинения. Так плечевой сустав выступает родителем, потому что при поворотах в нем будет меняться положение локтевого сустава. Но сгибание-разгибание локтевого сустава не ведет к изменению положения плеча.

В Blender для создания инверсной кинематики обычно используют специальный для этих целей ограничитель костей и, если необходимо, ряд дополнительных настроек. Характерной особенностью ограничителя инверсной кинематики является то, что он влияет на множество звеньев (трансформирует их, изменяет). Рассмотрим как это работает на схематичной модели руки, состоящей из трех основных элементов — плеча, предплечья, кисти.

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

Установка связи между группами вершин меша и костями арматуры

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

В Blender для быстрого добавления ограничителя инверсной кинематики используется комбинация клавиш Shift + I. В режиме позы выделим кисть и нажмем горячие клавиши. В появившемся меню выберем вариант Target New Empty Object | Цель: новый объект-пустышка.

Добавление ограничителя инверсной кинематики с привязкой к пустышке в Blender

Итак, теперь у кисти появится ограничитель. Им будет выступать пустышка. Пока останемся в режиме позы и изучим, как будет теперь вести себя рука.

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

Влияние перемещения главной кости на остальные звенья при инверсной кинематике

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

Чтобы движение все-таки запускалось от кисти (например, вы кидаете мяч, стоя на месте), надо перемещать пустышку. Для этого придется перейти в объектный режим и выделить ее там.

Установка позы с помощью целевого объекта пустышки в инверсной кинематике

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

Позирование в режиме позы затруднительно, если в инверсной кинематики в качестве цели (target) используется другой объект (пустышка)

Если не просто настраивается поза, а создается анимация, это неудобно. Ключевые кадры потребуются и для костей арматуры, и для пустышки, надо будет соотносить их между собой.

Поэтому чаще в качестве объекта-ограничителя (управляющего звена) используют не пустышку, а отдельную кость той же арматуры. Перед тем, как выполнить изменения, найдем ограничитель, который мы добавили через Shift + I. Вместо использования горячих клавиш мы могли бы сделать это через вкладку Bone Constraints | Ограничители кости редактора свойств. Здесь и находится уже добавленный.

Настройки ограничителя IK (inverse kinematics)

Перейдем в режим редактирования арматуры. Вытянем из кисти следующую кость, назовем ее "Рукоять", отвяжем от цепи (можно и отодвинуть), убрав у нее родителя на панели Relations | Отношения. Также можно просто нажать Alt + P и очистить родителя.

Создание несвязанной кости-цели

Кроме этого, для этой вспомогательной кости необходимо отключить опцию Deform | Деформация, чтобы она не деформировала сетку персонажа при движении.

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

Цель ограничителя инверсной кинематики кость самой арматуры

Отметим некоторые настройки IK-ограничителя. Вы уже могли заметить, что от кончика кости, к которой применяется ограничитель (в нашем случае — это кисть), к корню главной кости проходит пунктирная линия. Она обозначает длину цепи, на которую распространяется инверсионная кинематика. По умолчанию конечным звеном является первая в иерархии. Это обозначается числом 0 в параметре Chain Length | Длина цепи. Если установить там значение 2, то в инверсионную кинематику, то есть в зависимость от движения кистью, будет вовлечено только предплечье. Вы получите сгибание исключительно в локтевом суставе, в то время как плечо будет оставаться на месте. Цифра 3 в нашем случае не будет отличаться от нуля, так как соответствует плечу, то есть максимальной длине данной цепи.

В большинстве случаев инверсная кинематика требует Pole Target | Цель колена, в качестве которого также обычно используют пустышку или еще одну управляющую кость. Этот контроллер указывает, куда должны быть направлены локти или колени персонажа. При этом обычно требуется регулировка параметра Pole Angle | Угол полюса. Кроме этого, цель колена привязывают как дочерний объект к одной из основных костей персонажа, чтобы она автоматически двигалась вместе с телом персонажа, благодаря чему сами колени будут корректно поворачиваться в нужную сторону при перемещении, избавляя аниматора от необходимости вручную двигать контроллеры коленей.

Если включить флажок Rotation | Вращение, то положение кисти будет меняться не только от перемещения рукояти, но и от ее поворотов.

Influence | Влияние контролирует процент влияния ограничителя на объект, в данном случае позволяет уменьшить зависимость от объекта-цели (target). Кисть будет как бы отставать от своей цели. Движение кисти будет менее значительным, чем перемещение рукояти.

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