Основы смешивания анимации

23

Скажем, у меня есть рамки с персонажами, которые могут бегать и ходить и, конечно же, стоять на месте.

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

Если да, то какова основная теория того, как это работает, и как бы я ее реализовал?

SirYakalot
источник
1
Я считаю, что это просто линейная интерполяция между каждой из костей от последнего кадра одной анимации до первого кадра другой.
анонимно
Или линейная интерполяция с плавным шагом, если вы хотите средневзвешенное значение (:
Густаво Масиэль
@ Gustavo-Gtoknu ты можешь объяснить больше о том, что ты только что сказал?
SirYakalot
Вы делаете линейную интерполяцию в альфа-канале обоих кадров, которые должны быть смешаны, в противоположность другого. как в зависимости от времени. Вы можете сгладить или использовать средневзвешенное значение в интерполяции, чтобы получить другой эффект.
Густаво Масиэль

Ответы:

18

Смешивание анимации персонажей является более общим и может использоваться для:

  • Вычисление плавных переходов между 2 клипами;
  • Создание совершенно новых анимаций из существующих (возможно, более двух одновременно);
  • Достижение IK-подобного поведения;
  • и т.п.

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

Это сложная проблема со сложными решениями. В основном, если у вас есть две анимации, клипы A и B:

  • Если А и В совершенно разные (смешанный прыжок и плавание), то, скорее всего, у вас будут странные / забавные результаты;
  • Если A и B похожи (два анимационных клипа при ходьбе), вы должны сначала синхронизировать их, чтобы смешать их, например, когда обе левые ноги лежат на земле.
  • и т.п.

Если вам интересно, я предлагаю вам начать с чтения этой статьи, чтобы вы могли лучше понять, в чем заключаются трудности: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

Он не самый современный, но его легко прочитать.

Надеюсь, это поможет. С наилучшими пожеланиями.

Korchkidu
источник
5

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

С этим из пути ...

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

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

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

rotCombined = weightA*rotA + weightB*rotB

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

jhocking
источник
Когда вы говорите, что не можете сделать это с 2D-графикой, вы имеете в виду спрайт-анимацию? Я пытаюсь выяснить, как смешивать некоторые 2D-анимации, созданные в mecanim, на основе положения и поворота отдельных частей тела, но я не понимаю, почему это невозможно только потому, что они 2D.
Маллардз
Потому что нет способа генерировать новые кадры в спрайтовой анимации. В 3D-анимации отдельные изображения не создаются заранее.
Джокинг
Я понял, но 2D-анимация не должна основываться исключительно на изменении всего спрайта. Вы можете составить объект из нескольких спрайтов и анимировать их вращение и положение и т. Д. Я пытался выяснить, как это сделать, когда прочитал ваш ответ, и ваша первая строка меня огорчила :(! Но, к счастью, получается, что это очень это легко сделать в Unity, и я представляю, что не сложнее, чем 3D-смешивание для тех, кто
катает
1
ах да, я имел в виду спрайт-анимацию, я отредактирую свой ответ
jhocking