Скажем, у меня есть рамки с персонажами, которые могут бегать и ходить и, конечно же, стоять на месте.
Правильно ли я считаю, что смешивание анимаций - это процесс плавного перехода между ними путем создания динамических анимаций во время выполнения?
Если да, то какова основная теория того, как это работает, и как бы я ее реализовал?
Ответы:
Смешивание анимации персонажей является более общим и может использоваться для:
Основная идея заключается в том, что для двух одинаковых скелетов с разными анимационными клипами для каждого совместного вращения вы вычисляете промежуточные значения. Анимационные ролики представлены с поворотами. Поэтому линейная интерполяция - это не то, что вам следует использовать, если вы хотите получить точные результаты (даже если вы используете углы Эйлера). Вы можете использовать Slerp, например, но существуют более сложные решения.
Это сложная проблема со сложными решениями. В основном, если у вас есть две анимации, клипы A и B:
Если вам интересно, я предлагаю вам начать с чтения этой статьи, чтобы вы могли лучше понять, в чем заключаются трудности: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf
Он не самый современный, но его легко прочитать.
Надеюсь, это поможет. С наилучшими пожеланиями.
источник
Прежде всего, я предполагаю, что вы говорите о скелетной анимации (особенно 3D-графике), поскольку смешивание анимации в значительной степени применимо только к скелетной анимации. Если вы говорите о 2D-спрайтовой анимации (вы не указали в своем вопросе), то вы можете забыть о смешивании анимации.
С этим из пути ...
Это в значительной степени то, что означает этот термин, да. Однако эта фраза «создание динамических анимаций» вводит в заблуждение; это напоминает процедурную анимацию, и это не совсем то, что вы делаете.
«Смешивание анимации» - это когда вы переходите между двумя анимационными клипами, используя бит обеих анимаций, при этом вес одного клипа увеличивается, а вес другого клипа уменьшается. Это лучше всего работает с скелетной анимацией, так что вращение каждого соединения устанавливается в средней точке между анимацией этого соединения в двух разных анимационных клипах, причем вес каждого клипа меняется со временем. То есть вы бы вычислили вращение каждого сустава примерно так:
rotCombined = weightA*rotA + weightB*rotB
Теперь, когда смешивание анимации лучше всего работает со скелетной анимацией, вы также можете сделать это с анимацией вершин (например, MD2). Это скорее историческое примечание, потому что лишь немногие современные игровые движки используют анимацию вершин, но вы можете установить позиции вершин таким же образом, как взвешивание между позициями вершин в двух разных анимациях. Это может привести к некоторым странно выглядящим интерполяциям (например, части меша сворачиваются или выворачиваются наизнанку), если две анимации слишком разные, тогда как скелетная анимация гарантирует, что различные части меша остаются целыми.
источник