{"id":14284,"url":"\/distributions\/14284\/click?bit=1&hash=82a231c769d1e10ea56c30ae286f090fbb4a445600cfa9e05037db7a74b1dda9","title":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u043d\u0446\u044b \u0441 \u0441\u043e\u0431\u0430\u043a\u0430\u043c\u0438","buttonText":"","imageUuid":""}

Инверсная кинематика в Unity с Animation Rigging

Что такое IK:

Инверсная кинематика (Inverse Kinematics, IK) — это метод анимации, который позволяет управлять движением конечностей персонажа (таких как руки, ноги, голова) путем установки позиции и/или ориентации конечности, а затем автоматического вычисления соответствующих угловых значений суставов, необходимых для достижения заданной позиции или направления. Это особенно полезно для создания естественных и реалистичных анимаций, так как позволяет персонажу реагировать на окружающую среду и изменения в ней. То есть движения основываются не на управлении каждой костью отдельно, а скорее на управлении лишь одной костью, и автоматическом расчете позиций и поворотов остальных костей. Для того чтобы реализовать это в Unity существует специальный пакет — Animation Rigging.

Сценарии использования инверсной кинематики:

IK полезна во многих сценариях при разработке игр:

● Анимация рук при взаимодействии с объектами: В играх, где персонаж может взаимодействовать с различными объектами (например, открывать двери, поднимать предметы) , использование IK позволяет анимировать руки персонажа таким образом, чтобы они естественно и реалистично подстраивались под форму и положение объекта.

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

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

● Пересечение объектов: В играх, где персонаж может взаимодействовать с различными объектами в окружении (например, садиться на стул, перелезать через препятствия) , IK позволяет реализовать плавные и реалистичные анимации пересечения персонажем объектов.

● Работа с оружием и инструментами: В играх с системой управления оружием или инструментами (например, стрельба из лука, управление мечом) , IK помогает анимировать движения рук персонажа таким образом, чтобы они корректно взаимодействовали с оружием и сохраняли реализм.

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

● Анимация выражений лица: Использование IK для анимации выражений лица позволяет создавать более живые и эмоциональные анимации персонажей, такие как мимика, подмигивания, улыбки и т. д.

Основная часть:

Установка:

Для того чтобы установить интересующий нас пакет, необходимо перейти в PackageManager и в разделе Unity Registry найти пакет Animation Rigging, после чего нажать на кнопку Install.

Bone Renderer Setup:

После установки пакета вверху окна Unity, среди вкладок появится вкладка Animation Rigging, в ней есть несколько пунктов. Мы рассмотрим самые наиболее часто используемые.

Начнем с Bone Renderer Setup. Это инструмент позволяет включить прорисовку рига прямо в Unity, что является очень удобным при работе с инверсной кинематикой.

Для того чтобы его применить, для начало в иерархии необходимо выбрать рутовую кость скелета, который мы хотим прорисовать, после чего нажать на кнопку Bone Renderer Setup во вкладке Animation Rigging.

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

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

Rig Setup:

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

После этого, в той же вкладке Animation Rigging, необходимо нажать на кнопку Rig Setup. Это добавит в иерархию нашего персонажа объект Rig 1, а на объект с аниматором компонент Rig Builder, в котором будет находиться ссылка на Rig 1. Как вы уже могли догадаться, таких объектов может быть несколько, благодаря чему в дальнейшем можно переключаться между разными сетапами инверсной кинематики.

Делается это при помощи компонента Rig, в соответствующем объекте и изменения переменной Weight, которая определяет то насколько конкретный Rig влияет на персонажа. Как вы уже могли догадаться, все дальнейшие компоненты, реализующие саму IK будут привязываться именно к этому Rig’у.

Multi Aim Constraint:

Вся IK в данном пакете реализуется при помощи так называемых Constraints, это компоненты, которые содержат различные настройки для тех или иных целей. Сегодня мы рассмотрим два самых наиболее часто используемых из них и начнем с Multi Aim Constraint. Он используется для нацеливания какой-либо кости на целевой объект. То есть он будет полезен при создании механики поворота головы персонажа на точку интереса, либо же при анимировании прицеливания.

Для начала создадим вот такую нехитрую иерархию.

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

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

1. Constrained object — это собственно сама кость, с которой мы будем работать. В данном примере я хочу настроить поворот головы персонажа, соответственно указываю здесь кость шеи.

2. Aim Axis и Up Axis — это оси нашей кости. Поскольку они могут быть сбиты необходимо вручную указать куда направлена наша кость.

  • Aim Axis — это ось в направлении которой, должен быть направлен взгляд персонажа.
  • Up Axis — это ось в направлении которой смотрит верхушка кости.
  • Для того чтобы определиться с тем куда какие оси направлены, надо выбрать кость и посмотреть на нее в окне сцены.

В моем случае отлично видно, что Aim Axis — это “-Y”, а Up Axis — это “-X”.

3. Source objects — в этом массиве содержатся объекты, на которые должен быть направлен взгляд персонажа.

- Для начала такой объект нужно создать, обязательно дочерним от самого констрейнта.

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

- После этого мы перетаскиваем созданный объект в Source Objects, где рядом с каждым таким объектом тоже можно настраивать вес.

4. Для дальнейшей настройки Offset необходимо запустить сцену и посмотреть куда направлена кость. В моем случае взгляд направлен не на красный шарик Target, а куда-то влево и вверх от нужной мне точки. Для решения данной проблемы и предусмотрены оффсеты.

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

5. Constrained Axes — это просто оси по которым будет осуществляться поворот кости, по умолчанию он осуществляется во всех плоскостях

6. Теперь когда мы будем перемещать наш Target, персонаж будет поворачивать голову вслед за ним, но что будет если мы уведем Target за спину персонажа? Правильно — он повернет голову на 180 градусов, не совсем естественное поведение, согласитесь? Для того чтобы этого избежать существуют Min Limit и Max Limit. Вот как это выглядит до установки лимитов:

И так это выглядит после установки Min Limit на -90, а Max Limit на +90, разница весьма ощутима.

Chain IK Constraint:

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

Root — это кость от которой цепь будет начинаться

  • Root — это кость от которой цепь будет начинаться

  • Tip — это кость на которой цепь будет заканчиваться

Я хочу создать цепь от плеча, до кисти, поэтому указываю соответствующие кости в этих разделах.

  • Что такое Source Object мы уже обсудили, поэтому не будем здесь подробно останавливаться на этом. Отмечу, лишь, что в данном констрейнте может быть только один Source object, поэтому и настройка веса у него отсутствует.
  • Остальные настройки не так интересны и в целом их как правило можно просто оставить по умолчанию, однако отмечу:

○ Tip Rotation Weight — параметр который отвечает за то насколько кончик нашей цепи, в данном случае кисть, будет повторять поворот source object, я часто ставлю этот параметр на 0, так как он очень ситуативен

○ Chain Rotation Weight, своего рода аналог общего веса, отвечает за то насколько начальный объект цепи будет копировать ротейшн source object

И вот результат, благодаря таким нехитрым манипуляциям, мы можем легко управлять рукой персонажа, просто перемещая объект Target.

Заключение:

В этой статье мы рассмотрели основные принципы настройки Animation Rigging и два наиболее часто используемых констрейнта. Конечно этот пакет охватывает куда больше возможностей, но уже даже только с этим можно создавать прекрасные процедурные анимации для своих игр. И мы обязательно рассмотрим эту тему подробнее в будущих статьях. Надеюсь этот материал был интересен и полезен для вас, а я на этом прощаюсь, до новых встреч!

0
1 комментарий
Катерина

чёрт, кажется, я парочку челленджей пропустила) Спасибо за подборку!

Ответить
Развернуть ветку
-2 комментариев
Раскрывать всегда