动画融合基础


23

假设我有一个框架,其中包含可以奔跑和行走的角色,当然,请保持静止。

我是否认为动画混合是通过在运行时生成动态动画在这些动画之间平滑过渡的过程?

如果是这样,如何运作的基本理论是什么,我将如何实施?


1
我相信这只是从一个动画的最后一帧到另一个动画的第一帧的每个骨骼之间的线性插值。
匿名

或使用平滑步长进行线性插值,如果您需要加权平均值(:
Gustavo Maciel

@ Gustavo-Gtoknu您能解释一下您刚才所说的更多吗?
SirYakalot

您可以在要反转的两个帧的alpha中进行线性插值。两者都是时间的函数。您可以使步长平滑或在插值中使用加权平均值来产生不同的效果。
Gustavo Maciel '02

Answers:


18

角色动画混合更为通用,可用于:

  • 计算2个剪辑之间的平滑过渡;
  • 从现有的动画中创建全新的动画(可能同时超过两个);
  • 实现类似IK的行为;
  • 等等

基本思想是,对于两个具有不同动画剪辑的相同骨骼,对于每个关节旋转,都需要计算中间值。动画剪辑以旋转表示。因此,如果要获得准确的结果(即使使用欧拉角),则不应该使用线性插值。例如,您可以使用slerp,但是存在更复杂的解决方案。

这是具有复杂解决方案的复杂问题。基本上,如果您有两个动画剪辑A和B:

  • 如果A和B完全不同(混合跳跃和游泳),那么您可能会得到奇怪/有趣的结果;
  • 如果A和B相似(两个行走的动画剪辑),则必须先同步它们,例如在左脚都在地面上时将它们融合。
  • 等等

如果您有兴趣,建议您先阅读本文,以便您可以更好地理解困难所在:http : //graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

它不是最新的,但很容易阅读。

我希望这有帮助。最好的祝福。


5

首先,我假设您正在谈论骨架动画(尤其是3D图形),因为动画混合几乎只适用于骨架动画。如果您谈论的是基于2D子画面的动画(您未在问题中指定),那么您几乎会忘记动画混合。

有了这个...

我是否认为动画混合是通过在运行时生成动态动画在这些动画之间平滑过渡的过程?

这就是这个词的意思,是的。但是,“生成动态动画”这一短语有点误导;这让我想到了过程动画,而这与您正在做的事情不完全相同。

“动画混合”是当您在两个动画剪辑之间切换时,通过使用两个动画中的一些动画来使一个剪辑的权重增加而另一个剪辑的权重下降。这最适合骨骼动画,因此,将每个关节的旋转设置为两个不同动画剪辑中该关节动画之间的中点,并且每个剪辑的权重会随着时间变化。也就是说,您需要计算每个关节的旋转,如下所示:

rotCombined = weightA*rotA + weightB*rotB

现在,虽然动画混合最适合骨骼动画,但您也可以使用顶点动画(例如MD2)。这更多是历史记录,因为很少有现代游戏引擎使用顶点动画,但是您可以以相同的方式设置顶点位置,作为两个不同动画中顶点位置之间的权重。如果两个动画太不同,则可能会导致看起来有些怪异的插值(例如,网格的某些部分塌陷或内翻),而骨骼动画则确保了网格的各个部分保持完整。


当您说无法使用2D图形执行此操作时,您是说基于精灵的动画吗?我试图找出如何根据人体各个部位的位置和旋转来混合在mecanim中创建的一些2D动画,但是我不明白为什么不能仅仅因为它们是2D而就不可能。
mallardz 2014年

因为无法在Sprite动画中生成新帧。在3D动画中,不会提前生成单个图像。
鸣叫

我明白了,但是2D动画不必仅基于更改整个精灵。您可以用多个精灵组成一个对象,并对其旋转和位置进行动画处理。当我阅读您的答案时,我试图找出方法,而第一行让我很伤心:(!但幸运的是,事实证明这非常容易在Unity做和我想象比3D混合没有更多的困难,那些谁推出自己的发动机。
mallardz

1
啊,是的,我的意思是基于图片的动画,我将编辑我的答案
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.