假设我有一个框架,其中包含可以奔跑和行走的角色,当然,请保持静止。
我是否认为动画混合是通过在运行时生成动态动画在这些动画之间平滑过渡的过程?
如果是这样,如何运作的基本理论是什么,我将如何实施?
假设我有一个框架,其中包含可以奔跑和行走的角色,当然,请保持静止。
我是否认为动画混合是通过在运行时生成动态动画在这些动画之间平滑过渡的过程?
如果是这样,如何运作的基本理论是什么,我将如何实施?
Answers:
角色动画混合更为通用,可用于:
基本思想是,对于两个具有不同动画剪辑的相同骨骼,对于每个关节旋转,都需要计算中间值。动画剪辑以旋转表示。因此,如果要获得准确的结果(即使使用欧拉角),则不应该使用线性插值。例如,您可以使用slerp,但是存在更复杂的解决方案。
这是具有复杂解决方案的复杂问题。基本上,如果您有两个动画剪辑A和B:
如果您有兴趣,建议您先阅读本文,以便您可以更好地理解困难所在:http : //graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf
它不是最新的,但很容易阅读。
我希望这有帮助。最好的祝福。
首先,我假设您正在谈论骨架动画(尤其是3D图形),因为动画混合几乎只适用于骨架动画。如果您谈论的是基于2D子画面的动画(您未在问题中指定),那么您几乎会忘记动画混合。
有了这个...
我是否认为动画混合是通过在运行时生成动态动画在这些动画之间平滑过渡的过程?
这就是这个词的意思,是的。但是,“生成动态动画”这一短语有点误导;这让我想到了过程动画,而这与您正在做的事情不完全相同。
“动画混合”是当您在两个动画剪辑之间切换时,通过使用两个动画中的一些动画来使一个剪辑的权重增加而另一个剪辑的权重下降。这最适合骨骼动画,因此,将每个关节的旋转设置为两个不同动画剪辑中该关节动画之间的中点,并且每个剪辑的权重会随着时间变化。也就是说,您需要计算每个关节的旋转,如下所示:
rotCombined = weightA*rotA + weightB*rotB
现在,虽然动画混合最适合骨骼动画,但您也可以使用顶点动画(例如MD2)。这更多是历史记录,因为很少有现代游戏引擎使用顶点动画,但是您可以以相同的方式设置顶点位置,作为两个不同动画中顶点位置之间的权重。如果两个动画太不同,则可能会导致看起来有些怪异的插值(例如,网格的某些部分塌陷或内翻),而骨骼动画则确保了网格的各个部分保持完整。