Рубрики
3D мир SOFTWARE

Скелетная анимация в Blender

Данная заметка посвящена анимированию трехмерных моделей в программе Blender методом скелетной анимации и последующий экспорт в формат glTF

Введение

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

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

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

Содержание заметки:

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

Построение скелета (риггинг)

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

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

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

В программе Blender скелетная структура называется «арматура» (armature).

Начальная поза модели

В трёхмерной анимации и риггинге существуют две основные позы, используемые в качестве исходных точек для моделирования и анимации персонажей: А-поза (A-pose) и Т-поза (T-pose). Эти позы имеют ключевое значение на начальных этапах создания персонажа и риггинга, так как они определяют начальное положение костей и упрощают процесс привязки меша к скелету. Оба подхода обеспечивают создание симметричного рига. Поза модели с опущенными руками наименее предпочтительная, так как кость руки может оказывать влияние не только на вершины руки, но и на вершины туловища.

В Т-позе руки персонажа располагаются горизонтально и параллельно земле, образуя букву «Т». Тело стоит прямо, а взгляд направлен вперёд. Данная поза обеспечивает удобный доступ ко всем частям тела для риггинга и назначения весов кожи.

В А-позе руки персонажа опущены и слегка отведены от тела, образуя букву «А». Эта поза является более естественной и расслабленной по сравнению с Т-позой. Данная поза зачастую предпочтительнее для скиннинга, так как создаёт более естественные деформации кожи, особенно в области плеч и подмышек, где при движении может возникать большое напряжение. Помимо этого данная поза занимает меньше места из-за частично опущенных вниз рук.

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

Пример двух поз изображен на рисунке 1.

Рисунок 1 — Модель в разных позах (А — слева, Т — справа)

В приложенном файле модели используется А-поза.

Типовые кости в скелете человека

Рассмотрим основные типовые кости, которые обычно используются в риггинге 3D моделей человека:

  • кости позвоночника (spine) — эти кости формируют основу позвоночника, обеспечивая поддержку тела и гибкость, они часто разделяются на несколько сегментов:
    • шейный (neck),
    • грудной (chest или rib),
    • тазобедренный (hips или pelvis);
  • кости головы (head) — включают кость черепа и, иногда, отдельные кости для челюсти (jaw или chin), губ (lips) и глаз (eyes), что позволяет анимировать движения рта и выражения лица;
  • кости ключицы (clavicle) — это кости, которые расположены между плечами и грудью, обеспечивая подвижность плечевого пояса и соединяя руки с костями спины;
  • кости рук (arms):
    • плечевая кость (upper arm или shoulder) — между плечевым и локтевым суставами,
    • предплечье (lower arm, forearm или elbow) — между запястьем и локтем,
    • ладонь (palm или wrist) и пальцы:
      • большой (thumb),
      • указательный (index или point),
      • средний (middle),
      • безымянный (ring),
      • мизинец (pinky);
  • кости ног:
    • бедро (upper leg или thigh) — кость между тазом и коленом,
    • голень (lower leg или shin) — кость между коленом и стопой,
    • стопа (foot).

Данный набор костей не является обязательным, но достаточным для качественной анимации тела. Конечный набор костей определяется задачами конечной анимации.

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

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

  • точка и номер (Bone.001);
  • нижнее подчеркивание и номер (Bone_001).

Для симметричных костей (рук, ног, ключицы) следует добавлять в конце суффиксы:

  • точка и заглавная буква стороны (Bone.R или Bone.L);
  • нижнее подчеркивание и заглавная буква стороны (Bone_R или Bone_L).

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

Создание скелета

В программе Blender есть три режима работы с арматурой (скелетом):

  • объектный режим (object mode) — взаимодействие со всеми костями скелета;
  • режим редактирования (edit mode) — режим добавления, удаления и изменения свойств костей (используется для построения скелета);
  • режим позы (pose mode) — режим, в котором модель следует за костью на основании весов (используется для анимации).

Создание арматуры

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

Убедимся, что 3D-курсор расположен в нуле координат: комбинацией клавиш Shift+C или комбинация Shift+S, Курсор в центр мировых координат (Cursor to World Origin).
Так же убедимся, что центр модели находится на 3D-курсоре: выделив модель — меню Объект (Object), Задать центральную точку (Set Origin), Центр объекта к 3D-курсору (Origin to 3D-cursor).

Для создания арматуры и первой кости требуется находится в объектном режиме и вызвать меню Добавить (Add) или комбинацией клавиш Shift+A, выбрав пункт Арматура (Armature). Данное действие создаст простую арматуру на 3D-курсоре с одной костью, как изображено на рисунке 2.

Рисунок 2 — Новая арматура с одной костью

Сейчас кость отображается с проверкой буфера глубины и может быть перекрыта моделью. Для решения данной проблемы на выделенную арматуру (в объектном режиме достаточно кликнуть по кости, если выделение слетело) в панели настроек справа необходимо выбрать подпункт Data (зеленый человечек) и включить отображение Спереди (Show, In Front). Дополнительно можно включить отображение имен костей (Show, Names) для напоминания о необходимости задавать имена. Пример включение данных параметров изображен на рисунке 3.

Рисунок 3 — Пример включение параметров отображения для костей имен и поверх моделей

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

В данном меню можно выбрать способ отображения кости — Показывать как (Display as). По умолчанию стоит Восьмигранник (Octahedral), который удобен тем, что наглядно показывает где у кости голова (head) — широкая часть, а где хвост (tail) — узкая часть. В примере будет использоваться отображение по умолчанию.

Построение скелета

Перейдем в режим редактирования (при выделенной арматуре). И переименуем нашу кость в тазобедренную (hip), нажав клавишу F2.

В первую очередь для персонажей выстраивается позвоночник, для этого есть два подхода:

  1. уменьшить первую и экструдировать (extruding) новые кости (клавиша E);
  2. увеличить кость и подразделить её на части (subdivide).

У отдельной кости может быть выбраны:

  • голова — клик по шарику широкой части;
  • хвост — клик по шарику узкой части;
  • вся кость — клик по восьмиграннику.

Для изменения размеров кости доступны несколько способов:

  • перемещение головы или хвоста с помощью инструмента Перемещение (Move), который доступен на панели инструментов слева или клавишей G;
  • масштабирование всей кости с помощью инструмента Масштабирование (Scale) или клавишей S;
  • изменение положения головы и хвоста кости через панель Трансформация (Transform), которую можно вызвать кнопкой N.

Поворот кости без изменения размеров производится с помощью инструмента Вращение (Rotate) или клавишей R.

Примечание: панель Трансформация (Transform) так же позволяет вращать кость вокруг своей оси.

Эти два подхода имеют свое влияние на связанные кости. Для примера возьмем три кости и опробуем разные подходы к масштабированию, результат представлен на рисунке 4.

Рисунок 4 — Пример масштабирования костей

Рассмотрим первый подход в построении позвоночника:

  1. отмасштабируем тазобедренную кость (hip) одним из рассмотренных ранее способов;
  2. поставим её в нужное положение;
  3. повернем камеру в положение сбоку от персонажа, так как не сдвиг по оси X не требуется;
  4. с помощью клавиши E экструдируем новые кости из хвоста имеющихся, устанавливая необходимое положение и не забывая задавать имена костей.

Пример такого подхода изображен на рисунке 5.

Рассмотрим второй подход в построении позвоночника:

  1. поднимем и отмасштабируем кость на размер всего туловища и головы;
  2. выбрав кость целиком в меню, вызываемом правой кнопкой мыши, выберем Subdivide, который разделит кость пополам (оставив выделение на обоих);
  3. повторим разделение ещё раз, что даст 4 кости, которые нужно переименовать;
  4. повернем камеру в положение сбоку от персонажа, так как не сдвиг по оси X не требуется;
  5. сдвигая голову и хвост костей расположим позвоночник в нужных местах.

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

Повернем камеру на лицо персонажа. Из хвоста «Spine.003» экструдируем кость ключицы (clavicle) до середины плечевого сустава, задав имя «Clavicle.L«. Из неё экструдируем плечевую кость до локтевого сустава, назвав её «UpperHand.L«. Из плечевой кости экструдируем кости предплечья до запястья с именем «LowerHand.L«. Остатось только сделать кость ладони, которая будет носить имя «Palm.L«. Теперь требуется выровнять кости в руке, так как они расположены вдоль оси Z. Процесс создания костей левой руки изображен на рисунке 7.

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

В рамках данной заметки по построению скелета низкополигональной модели анимация пальцев рассматриваться не будет.

Перейдем к построению ног. В режиме редактирования арматуры в меню Добавить (Add) или комбинацией клавиш Shift+A, выбрав пункт Одиночная кость (Single Bone). Переименуем её в «UpperLeg.L» и размещаем её так, чтоб голова кости (широкая часть) начиналась там, нога должна вращаться. Следующую кость экструдируем до стопы, назвав её «LowerLeg.L«, осталось сделать только кость стопы с именем «Foot.L«. Важно заложить небольшой угол в колене по аналогии с локтем для корректной работы инверсной кинематики. Пример костей ноги представлен на рисунке 8.

Кость с названием «UpperLeg.L» не имеет родителя и будет двигаться отдельно от скелета. Для подобных соединений необходимо установить связь с родителем с сохранением взаимного расположения. Для этого выделим кость бедра «UpperLeg.L» (стала желтой), а затем, удерживая клавишу Shift, выделим будущего родителя (теперь родитель желтый, а потомок оранжевый). В меню Арматура (Armature) — Родитель (Parent) — Сделать родителем (Make) или нажав комбинацию клавиш Ctrl+P выбираем пункт С сохранением взаимного расположения (Keep Offset). Такая связь отображается черной пунктирной линией. Пример установки связи с сохранением взаимного расположения изображен на рисунке 9.

Теперь в распоряжении находится половина скелета, которую можно симметрично отразить. Для этого выделим все кости скелета в режиме редактирования и в меню Арматура (Armature) выберем пункт Симметризовать (Symmetrize). Все кости, которые имеют окончание «.L» будут симметрично отражены относительно оси X, а в их названии окончание будет заменено на «.R«. Пример вызова меню симметрии изображен на рисунке 10, а на рисунке 11 представлен итоговый результат.

Рисунок 10 — Пример вызова меню симметрии
Рисунок 11 — Итоговый результат построения скелета для лоуполи модели

Привязка к модели (скиннинг)

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

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

Важное замечание: сумма весов обычно нормирована (т.е. влияние всех костей не должно быть больше 100%).

Для упрощения задачи привязки можно использовать автоматическое распределение весов. В объектном режиме выбираем сначала модель, затем арматуру, используя клавишу Shift (порядок важен). Если все верно, то модель будет отмечена оранжевым цветом, а арматура желтым. В меню Объект (Object) — Родитель (Parent) или комбинацией клавиш Ctrl+P, выбрав пункт Арматурная деформация — С автоматическими весами (Armature Deform — With Automatic Weights). Пример автоматической привязки костей к модели изображен на рисунке 12. Такой вид привязки автоматически распределяет веса для костей, влияющих на вершины. Для низкополигональных моделей обычно хватает автоматического распределения весов.

Рисунок 12 — Пример автоматического распределения весов

Если автоматическое распределение весов по каким то причинам использовать нельзя — следует выбрать опцию С пустыми группами (With Empty Groups) в меню на рисунке 12. Способ С весами оболочек (With Envelope Weights) основан на концепции, что каждая кость в арматуре имеет вокруг себя невидимую оболочку. Эти оболочки могут быть настроены по размеру и форме, и они определяют область влияния кости на модель. Вершины внутри оболочки или близко к ней получают более высокий вес, что означает большее влияние соответствующей кости на эти вершины.

Проверить результат автоматической привязки можно выбрав скелет и перейдя в режим Позы (Pose Mode) — движение отдельных костей будет приводить к движению модели. Пример проверки результатов автоматической привязки изображен на рисунке 13.

Рисунок 13 — Пример проверки автоматического распределения весов на кости спины

По рисунку 13 можно заметить, что в режиме позы при выбранном инструменте перемещения происходит поворот кости вокруг заданных осей. Это обусловлено тем, что кости строго привязаны к родителям и не могут изменять свой размер в данном режиме. Но данное поведение не распространяется на кости, которые имеют родителя с сохранением взаимного расположения — для них инструмент трансформации будет изменять положение. Пример изображен на рисунке 14.

Рисунок 14 — Разница в поведении инструментов для костей с сохранением взаимного расположения

Такой подход к заданию анимаций называется прямой кинематикой (forward kinematics, FK). Прямая кинематика подразумевает, что влияние трансформаций костей распространяется только на потомков, что может быть не удобно для конечностей персонажа. Для упрощения задания поз может быть использована инверсная кинематика (Inverse Kinematics, IK), которая рассматривается в следующем разделе.

В некоторых ситуациях автоматическое распределение весов работает не совсем корректно. Например у данной модели после автоматического распределения весов наблюдается влияние ключичной кости (clavicle) на голову (head): при повороте плеча происходит искажение вершин в районе щеки. Если влияние на шею в целом допустимо при учете анатомии, то деформация лица в данной ситуации не желательна. Пример проблемы изображен на рисунке 15. Существует несколько путей решения данной проблемы:

  • добавление кости шеи (neck) — добавит свое влияние и исключит влияние ключицы на голову;
  • ручное распределение весов:
    • увеличение вклада кости головы на вершины головы;
    • уменьшение вклада костей ключицы на вершины головы.
Рисунок 15 — Пример влияния ключичной кости (clavicle) на голову (head) при повороте плеча

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

Выбрав модель в объектном режиме (object mode) становится доступным режим рисования весов (weight paint). В этом режиме выбранная модель окрашивается в сине-красный диапазон в зависимости от весов, где синий — минимальное влияние (0), а красный — максимальное (1). Данный режим направлен на работу в подпункте Data, который расположен в панели настроек справа (три зеленых квадратика, соединенные линиями). В данном разделе присутствуют группы вершин (vertex groups) На рисунке 16 изображен пример доступа к этому меню.

Рисунок 16 — Пример доступа к вершинным группам

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

Для манипуляций с весами доступны следующие инструменты:

  • рисование (draw) — позволяет «рисовать» кистью веса на меше;
  • размытие (blur) — сглаживает переходы между весами, создавая более плавные градиенты и устраняя резкие границы;
  • усреднение (average) — распределяет веса равномерно по выбранной области, помогая уравновесить различия в весах;
  • размывание (smear) — растягивает веса из одной области в другую, помогая создать более естественные переходы веса;
  • выборка веса (sample weight) — позволяет выбрать вес с определенной точки меша (пипетка) и использовать его для рисования и корректировки в других областях.

Для устранение проблемы, изображенной на рисунке 15 окрасим нижнюю часть головы с максимальным весом (1.0) для группы вершин Head и минимальным весом (0.0) для групп вершин Clavicle.R и Clavicle.L. Результат перекраски весов изображен на рисунке 17.

Рисунок 17 — Изменение весов головы (head) и ключицы (clavicle) путем рисования

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

Файл с результатами работы на текущем этапе — прямой кинематикой, можно скачать по ссылке.

Инверсная кинематика (IK)

Как было замечено в предыдущем разделе — есть два вида кинематик при задании поз персонажа:

  • прямая кинематика (forward kinematics, FK);
  • инверсная кинематика (inverse kinematics, IK).

Прямая кинематика — это метод, при котором движение цепочки костей (например, руки или ноги персонажа) управляется последовательно от «корня» к «конечности». В FK, анимация начинается с первой кости в цепочке (например, плеча), и движение передаётся по цепочке до самой конечной кости (например, пальцев). Аниматор регулирует угол каждой кости в цепочке, что приводит к движению следующей кости. Этот метод идеально подходит для движений, где важен контроль последовательности, например, при махе рукой.

К достоинствам прямой кинематики можно отнести предсказуемость — поскольку каждая кость управляется отдельно, аниматор имеет полный контроль над движением.

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

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

К плюсам данного метода можно отнести экономию времени и эффективность.

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

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

Рассмотрим создание инверсной кинематики на примере руки нашего персонажа. Создание инверсной кинематики начинается с применения модификатора к кости, в режиме позы (pose mode) скелета (арматуры, armature). Такая кость с примененным модификатором называется конечной костью для конечности, к которой применяется инверсная кинематика.

В нашем примере конечной костью будет являться кость левого предплечья (lower arm, forearm). Выберем данную кость и в панели настроек справа необходимо выбрать подпункт Ограничения кости (Bone Constraints), где в выпадающем списке будет доступен модификатор Inverse Kinematics. После добавления модификатора кость окрасится в оранжевый. Пример добавления данного модификатора изображен на рисунке 18.

Рисунок 18 — Пример добавления модификатора инверсной кинематики к кости предплечья

Инверсная кинематика кости использует две вспомогательные кости:

  • целевая (target) — является контрольной точкой, к которой стремится направиться конечная кость цепочки IK;
  • полюсная (pole target) — это дополнительная контрольная точка, используемая для определения ориентации сустава в IK цепочке, особенно важная для суставов, таких как колени или локти.

Когда аниматор перемещает Target, конечная кость IK цепочки следует за ней, в результате чего все кости в цепи автоматически настраивают свои углы и позиции, чтобы поддерживать правильное положение и ориентацию относительно этой цели. Целевая кость создается их хвоста (узкая часть) конечной кости. Такие кости обычно называют контроллером (controller).

Pole Target определяет, в каком направлении будет «смотреть» сгиб сустава. Это полезно для предотвращения нежелательного скручивания или неправильного сгибания в суставах. Положение Pole Target влияет на то, как сустав поворачивается вокруг оси, соединяющей начальную и конечную точки IK цепочки. Без должного использования Pole Target, аниматоры могут столкнуться с проблемами, такими как ненатуральное изгибание суставов или их непредсказуемое поведение. Полюсная кость создается из головы (широкая часть) конечной кости со смещением в сторону сгиба сустава.

Важное замечание: инверсная кинематика не требует обязательного наличия вспомогательных костей (не забудьте проверить длину цепочки/chain length — см. далее)

Перейдем в режим редактирования (edit mode) скелета, где добавим вспомогательные кости путем экструзии (extruding) — клавиша E. Для удобства можно сделать экструзию параллельной оси Y, нажав клавишу Y.

Назовем кость, экструдированную из конца кости (узкая часть, запястье) — «ArmController.L«, нажав клавишу F2. Удалим её родителя, нажав комбинацию клавиш Alt+PClear Parent. Так же необходимо отключить деформацию модели (Deform): в панели настроек справа необходимо выбрать подпункт Кость (Bone). Пример экструдированной кости-контроллера и отключения ей деформации модели представлен на рисунке 19.

Рисунок 19 — Пример кости-контроллера руки и отключение деформации модели ей

Полюсная кость будет экструдирована (клавиша E) из начала (широкая часть, локоть) конечной кости. Для удобства так же сделаем её параллельной оси Y, нажав клавишу Y. После удалим её родителя, нажав комбинацию клавиш Alt+PClear Parent. Сдвинем кость от сустава за спину (вдоль оси Y). Для неё так же необходимо отключить деформацию модели.

Вернувшись в подпункт Ограничения кости (Bone Constraints), укажем кости: целевую (Target) — ArmController.L, плюса (Pole target) — ArmPole.L. После добавления этих параметров произойдет поворот модели. На данное поведение влияет два параметра:

  • длина цепочки (chain length) — количество костей, на которые воздействует модификатор инверсной кинематики (в сторону родителя);
  • угол полюса (pole angle) — компенсация поворота полюсной кости.

Для данного примера достаточно выставить длину цепочки (chain length) равной 2, а угол полюса (pole angle) 90°. Пример настроек инверсной кинематики изображен на рисунке 20.

Рисунок 20 — Пример настроек инверсной кинематики с использованием вспомогательных костей

Теперь рукой можно управлять, перемещая вспомогательные кости. Пример такого управления изображен на рисунке 21.

Рисунок 21 — Пример управления с помощью инверсной кинематики

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

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

Проделаем аналогичные действия по настройке инверсной кинематики левой ноги относительно кости голени — LowerLeg.L. Результат изображен на рисунке 22.

Рисунок 22 — Результат построения инверсной кинематики для костей ноги

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

Осталось выделить кости и сделать симметричную копию, как это было сделано при построении скелета.

Файл с результатами работы на текущем этапе — инверсной кинематикой, можно скачать по ссылке.

Позиционирование и ключевые кадры

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

Для задания ключевых кадров в Blender используется временная шкала, расположенная в нижней части программы. Над этой шкалой можно задать текущий кадр, а так же начальный (start) и конечный (end) кадры для анимации.

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

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

Интерфейс для записи ключевых кадров представлен на рисунке 23.

Рисунок 23 — Интерфейс для записи ключевых кадров

Зададим позу скелета с помощью инверсной кинематики и запишем её в нулевой кадр. Пример позы выделенного скелета с записанным ключевым кадром изображен на рисунке 24.

Рисунок 24 — Пример начальной позы

Примечание: отменить трансформацию для кости можно комбинацией клавиш Alt+G.

Сделаем дубликат данного кадра с помощью комбинации клавиш Shift+D и расположим его на конечном кадре (90).

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

Если посмотреть на персонажа, то он выглядит слишком «монотонным» — просто машет рукой как робот. Для оживления персонажа добавим маленький поворот костей спины в районе грудной клетки, чтоб имитировать дыхание, а так же обратный поворот для головы, чтоб компенсировать задирание подбородка. На вдох выделяются с 0 по 35 кадр, а выдох заканчивается на 90 кадре.

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

На рисунке 25 представлен пример расстановки ключевых кадров для получения подобной анимации.

Рисунок 25 — Пример расстановки ключевых кадров анимации махания рукой

Сравнение персонажа с дыханием и без него изображено на рисунке 26.

Рисунок 26 — Сравнение персонажа с дыханием и без него

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

Файл с результатами работы на текущем этапе — анимацией махания, можно скачать по ссылке.

Если вам требуется записать несколько анимаций для одного объекта, то следует выбрать рабочее пространство анимаций (Animation workspace) и на временной шкале выбрать режим редактора действий (action editor). Пример изображен на рисунке 27.

Примечание: в блендере анимации в контексте набора ключевых кадров называются «действиями» (actions).

Рисунок 27 — Пример создания нескольких действий

Важное замечание: анимации лучше помечать с помощью кнопки Фиктивный пользователь (Fake user — пиктограмма щита), что обеспечит сохранение ключевых кадров при сохранении файла, даже если у них не будет объектов, которые их используют.

Экспорт в glTF

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

Рассмотрим запекание анимации махания рукой. В режиме Позы (Pose Mode) выделим кости левой руки: Palm.L, LowerHand.L и UpperHand.L. В меню Поза (Pose) — Анимация (Animation) выберем пункт Запечь действия (Bake Action). В открывшемся окне запекания анимации нас интересуют следующие параметры:

  • начальный кадр (start frame) — первый кадр последовательности (0);
  • последний кадр (end frame) — конечный кадр последовательности (90);
  • шаг между ключевыми кадрами (frame step) — интервал между расстановкой ключевых кадров (стоит выставить равным интервалу между кадрами контроллера руки — 15);
  • только для выбранных костей (only selected bones) — параметр, определяющий, что запекание производится только для выделенных костей;
  • ключевые кадры на основании финальных трансформаций (visual keying) — позволяет включать влияние обратной кинематики на запекаемые кости;
  • переписать текущее действие (overwrite current action) — данный параметр указывает, что ключевые кадры в данной анимации будут переписаны новыми, полученными в процессе запекания.

Важное замечание: есть параметр — отчистить ограничители костей (clear constraints), который отключает инверсную кинематику. Сейчас в Blender по прежнему на положение влияет обратная кинематика и если её отключить, то кости руки останутся неподвижными при наличии ключевых кадров для них.

Примечание: перед итоговым экспортом в движок, не поддерживающий инверсную кинематику, можно удалить кости-контроллеры и полюсные.

Аналогичное действие выполним для костей правой руки.

В окне экспорта модели в формат glTF следует включить экспорт анимации (Animation) и отключить подпункт сэмплирование анимаций (Sampling Animations), который запекает все анимации с заданной частотой кадров (по умолчанию каждый кадр). Такой подход может негативно повлиять на конечный движок, который сам будет интерполировать кадры.

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.