为步行周期动画设置“运动”动画的常用方法


13

我刚刚在Blender艺术家论坛上发布了此内容,然后才意识到我可能会从更多针对游戏开发的读者那里得到更好的响应,因此为发布而道歉!出于正确的原因:)

我是一名程序员,尝试使用Ogre为行走游戏项目的角色设置动画。我在Blender中做了一个非常简单的步行周期,并将其导出到Ogre,它的运行效果还不错。好的,我的意思是它可以工作,但脚踩会很糟糕。这是因为我只是对Blender中的原位行走(在原点)进行了动画处理,当然我不知道对应的“行走速度”,所以当我在游戏中移动角色时,动作不会必须与动画中脚的运动相匹配。

所以我的问题是:这种事情的正常做法是什么?在工作中,我们使用Maya,并且动画师可以为表示角色“位置”的特殊“ moveTrans”节点设置动画(或让导出器根据根节点的移动为其生成动画),然后游戏可以读取此内容知道动画移动角色的速度。因此,在Maya文件中,角色将向前走一个周期,并且这个额外的节点将与它们并拢。在开放源代码领域,我还没有看到这样的东西,而且Ogre Exporter脚本中肯定没有提供类似的东西。您通常会为此做什么?


1
以下是对该概念的一些精彩解释的讨论:blog.wolfire.com/2011/08/…–
Ben Hymers,

Answers:


10

有两种方法可以执行此操作:根运动或“用代码编写”。

使用root运动,您基本上可以完全按照“ moveTrans”节点的建议进行操作。您可以使用该对象的运动来确定回放步行循环的速度。您可能可以进行某种反向查找,以确定是否要在位置X处需要位于哪个帧。但是根部运动的真正优势在于,要获得真实逼真的动画,您需要考虑运动不是真正的线性路径这一事实。真实的人会随着时间的推移以可变的速度移动,或者也许他们在左右晃动一点,等等。

Mixamo在使用Unity进行根运动控制方面做了一个很好的例子。这里有一个视频:http : //vimeo.com/12052874

现在,根运动确实有其缺点。尝试使“步行”动画在楼梯上工作时,它可能会变得棘手(理想情况下,您将有一个单独的楼梯/梯子爬升动画,并为此动画进行所有移动)。我也不太确定IK到底如何发挥作用。

现在,从编程的角度来看,“以代码形式”进行操作要容易得多。我建议您首先确保您所有的单元都是一致的。例如,在Maya中,一个单位为1米。然后,让您的艺术家对角色行走进行动画处理(完成向前移动)。使用它可以计算动画的速度,并在没有前进速度的情况下导出动画。用它来计算回放动画的速度。因此,如果以1倍速播放动画的速度为5 m / s,并且您想让播放器以7 m / s速度运行,则只需以7/5 = 1.4倍速播放即可。如果您的模型按比例放大或缩小,则将动画播放速率乘以比例的倒数。半身高的家伙将必须以两倍于1倍规模的家伙的速度移动两倍的速度。


我没有见过Mixamo的Root Motion计算机,也没有听说过它,所以感谢您的链接和解释!因此,基本上就像我想的那样,可以在构建时或运行时显式对其进行动画处理或自动生成它。我想我必须自己在导出器脚本中编写代码。我现在非常困惑的一件事是,运动会在一个周期的过程中发生变化-您究竟如何从游戏玩法中推动运动?现在,“以5m / s的速度移动”意味着其他...方向改变对于AI来说将是一场噩梦!也许最好使用步态运动?
本·海默斯

跑出角色;在将其标记为接受之前,我将稍等一下,以获取更多意见。感谢您的回答!
本·海默斯

对于根部运动,您不能直接控制播放器的速度。实际上,您只能控制动画速率的播放,然后让动画直接控制正向z值。我给出的5m / s示例是解决脚部滑动的传统方法,即试图使回放速率与您的移动速度匹配并假设速度恒定。
四分

作为一名游戏程序员,这听起来像是一场噩梦:)将动画师置于与动画一样重要的移动速度控制之下?不用了,谢谢!我更喜欢提取信息,以便可以将其取反并根据移动速度(而不是相反)来设置动画播放速度。这就是为什么非线性运动使我困惑的原因,也许这是反过来做的一个很好的理由。
Ben Hymers,

Gah,诅咒Stack Exchange在尝试开始新行时输入了评论...我要说的是,即使让动画来推动运动,对于AI人物来说仍然是个问题。如果他们试图逼近某个点,但是他们的运动动画从一侧到另一侧突然倾斜(例如,这是一个醉酒的交错动画)怎么办?他们怎么知道面对哪个方向?
本·海默斯
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.