天天看点

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

作者:GameRes游资网

以下文章来源于腾讯游戏学堂 ,作者腾讯游戏学堂

导语:在今年的游戏开发者大会(GDC 2024)上,来自腾讯游戏的专家持续带来前沿分享,围绕AI、渲染、跨端游戏开发、动画等游戏技术应用及游戏制作,引发同业关注。本文为“MotorNerve:一种使用机器学习的角色动画系统”分享的图文版干货内容。

分享嘉宾:

李松南 腾讯互娱天美F1工作室Machine Learning Team副总监

廖宇辰 腾讯互娱天美F1工作室资深引擎开发

大家好,我是来自腾讯游戏的廖宇辰。我和我的同事李松南将与大家分享我们如何在角色动画中应用机器学习。让我们开始吧!

本次分享的主题MotorNerve是一个使用机器学习的角色动画系统的名字。我们期望使用机器学习技术来提升动画效果、生产效率和运行性能

我们有一个非常有才华的团队,也非常感谢团队成员的付出。这里我要介绍下天美J1F1工作室,是我和松南所属的工作室。MotorNerve这项技术也会被应用在工作室的产品中例如QQSpeed和NFS:Mobile。

一、Motion Matching

好了,让我们深入我们的演讲!演讲将分为两个部分:一部分是基于改进的Learned Motion Matching的行走动画,另一部分是基于我们自研的动画间补技术的交互动画。

以下是第一部分的大纲:首先,我将介绍一些基于Motion Matching的动画优化方法和工具。然后,我将讨论Learned Motion Matching 和 Base Motion Matching(或简称为LMM和BMM),并解释为什么我们在Motion Matching中使用机器学习。最后,我将分享一些我们为性能优化所做的工作。

众所周知,Motion Matching是一项很成熟的技术,通常用于Locomotion。这里有两个我们完成的Locomotion Demo,可以看到动作很连贯流畅。为了实现这样的效果,我们实现了一些方法和工具来打磨动画。接下来我会简单谈谈如何实现他们。

我们都知道Motion Matching在运行过程中会在不同的动画片段中来回切换,从而影响动画的完整度和连续性。所以我们在Motion Matching的算法中增加了一些策略,例如允许增加动画跳转时的cost,或者跳转时屏蔽附近的帧等等,来避免不合理的动画跳转让整个动画更流畅。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

另外玩家操作角色移动的时候,大多数情况下动画与逻辑的轨迹是会有一定误差的。比如这个视频里,黄色的是玩家操作的目标轨迹,红色箭头是MM匹配出来的动画的轨迹,还是偏差比较大的。我们实现了一套动态轨迹修正的功能,可以自动修正动画的轨迹让他贴近玩家操作的目标轨迹,绿色箭头就是结果。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

另外我们提供了强大的编辑功能和调试工具来帮助我们快速完成动画的打磨工作。右边是我们的调试工具,能够录制每一帧并且显示Motion Matching的匹配细节,帮助我们快速分析出让动画表现更好的办法。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

前面介绍了我们如何打磨动画表现,接下来让我们来谈谈我们为什么要使用机器学习。使用传统的Motion Matching(我们称之为 Base Motion Matching)可以进行快速的开发迭代,但如果放在游戏运行时则有一个不可忽视的问题就是:高品质的动画会需要巨大的动画量,从而带来很高的内存占用,这通常是不可接受的。

而基于机器学习的Learned Motion Matching则可以很完美的解决这个问题,但LMM的缺点是开发困难。每次你简单修改了一些参数并且想看结果都必须等模型训练,通常需要花费数个小时甚至更多,所以我们应该怎么办?一个可行的办法是我们在开发阶段使用BMM,并且在运行阶段使用LMM。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

所以有一个很重要的事情就是LMM和BMM的动作表现必须一样,为此我们做了大量的工作。可以看到这个视频,左边是LMM,右边是BMM,几乎看不出区别。另外我们也测了一些客观数据以及做了主观双盲实验,都说明我们的LMM的表现能对齐BMM。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

另外之前的LMM方案无法实现曲线和Notify功能,这会导致很难实际应用在游戏中。我们实现了这个功能,能自动处理动画曲线和notify。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

好了,现在来谈谈性能。Learned Motion Matching算法虽然在内存方面令人满意,但CPU耗时方面不太理想,这也导致了很难应用在游戏项目中。我们对LMM的推理架构进行了改进,使用独立于帧率的步进器和非线性策略,使得性能得到了很大提升,并且让同一个模型能够应用在不同的帧率下。可以看到右边的视频中,模型都是在30FPS下训练的。原始的LMM模型在60FPS下无法正常工作,而MotorNerve则可以。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

另外我们还实现了批处理推理优化,能够使得多人同屏的情况下节约最高50%的CPU开销。这是我们的demo,实现了160个角色在单线程的情况下达到60FPS。很酷对吧?

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

这就是第一部分的内容,我们讨论了如何使用机器学习来打造一个令人惊叹的Locomotion动画系统,可以实现流畅、高质量的动画并具有出色的性能。接下来由我的同事李松南为大家介绍第二部分关于交互动画的内容。

二、Motion In-Betweening

现在,让我们深入探讨第二部分的内容,即可以用于生成过渡动画的间补技术。如果您对动画和机器学习有一些经验,那么这将很容易理解。

以下是大纲:首先,我将介绍什么是动画间补以及为什么我们在游戏开发中需要它。然后,我将介绍动画间补方法的分类,我们的方法属于哪个类别,它是如何工作的以及为什么它比其他方法更好。最后,我将介绍它在我们的交互和位移系统中的应用。

首先,什么是动画间补?在左侧的图像中,橙色姿势是关键帧,可以由动画师手动设置。而蓝色姿势是由我们的动画间补算法生成的。简单来说,动画间补算法是一种可以根据一些关键帧生成中间动画的方法。这些关键帧相对较稀疏,因此使用线性插值不会得到很好的质量。

如今,动画间补算法大多基于机器学习。为了生成高质量的中间动画,它需要从大量的动画数据中进行学习。右侧的视频显示了我们的方法的结果,这是浙江大学和腾讯游戏的合作作品,发表于SIGGRAPH 2022。蓝色姿势是由我们的方法生成的。您可以看到动作质量很高,过渡很平滑。

好的。那么为什么我们在MotorNerve项目中使用动画间补?在视频游戏中,我们可以使用动画间补的至少两种场景。第一种是交互动画的过渡,第二种是位移动画的过渡。

在本演讲的第一部分,我的同事介绍了位移动画。行走是角色活动的重要组成部分。但除了行走之外,角色还可能需要进行交互,即与环境中的物体或其他角色进行互动。为了实现这一点,通常我们需要一个过渡,将角色的状态从位移转变为交互。我们可以使用动画间补来进行这个过渡,如左图所示。

第二,行走本身具有不同的状态,例如行走、奔跑、冲刺、朝不同方向移动等等。我们可以使用动画间补来生成这些不同行走状态的过渡,如右图所示。在后面讨论应用时,我将详细介绍。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

首先,让我介绍一下动画间补方法的分类。从现在开始,我将使用MIB作为动画间补的缩写。一般来说,有离线MIB方法,可以在DCC工具中离线生成动画,如右图所示。输入是当前帧f1和目标帧fn。离线方法一次性生成所有中间帧,如图所示,这通常需要很长时间,因此无法实时在游戏中使用。另一方面,我们还有在线方法,可以逐帧生成中间帧。如果模型足够高效,它可以实时在游戏中使用。我们的方法属于这个类别。它具有相对较低的复杂性,因此既可以在线在游戏中使用,也可以离线在DCC工具中使用。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

这是我们方法的概览图。简单来说,它以当前帧、目标帧和这两帧之间的差异作为输入,并在潜在空间中生成下一帧的特征。然后使用解码器解码特征,生成下一帧的姿势。然后将输出帧用作输入帧,重复这个过程,直到结束。

我们使用变分自编码器将下半身的运动编码到潜在空间中,然后在这个高质量运动的潜在空间中进行采样。这是我们的方法比其他方法实现更高质量的关键因素,尤其是在减少脚滑动方面。我们可以比其他方法减少50%的脚滑动。受时间限制,我认为我无法清楚地解释这个复杂的图表,特别是对于不熟悉深度学习的观众。如果您对细节感兴趣,请参考我们的论文,如下所列。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

在MotorNerve中,我们在两个方面扩展了论文的方法。我们增加了轨迹控制和帧数预测。

对于轨迹控制,我们不仅可以设置目标帧的姿势,还可以使角色沿着特定轨迹移动。在左侧的视频中,我们仅使用一个帧和一个轨迹来生成这个奔跑序列。

对于帧数预测,我们开发了一种方法,根据当前帧和目标帧的姿势来预测要生成的帧数。直观地说,如果目标帧与当前帧相距较远,我们应该生成更多的中间帧,否则如果目标帧接近当前帧,我们应该生成较少的中间帧。

除了距离之外,其他因素如角色面朝方向、移动速度等也会影响中间帧的数量。在右侧的视频中,您可以看到如果我们使用固定数量的中间帧,运动是不稳定的,即有时过慢,有时过快,有时看起来像角色在努力摆姿势给摄影师拍照。另一方面,如右侧所示,如果我们能够预测出适应输入的合理数量的中间帧,生成的运动更加自然。

接下来,让我介绍一下MIB的应用。第一个应用是为交互式动画生成过渡。过渡是从当前的行走姿势到即将播放的交互式动画之间的过渡。

当我们按下按钮开始交互时,角色通常处于行走状态,可能处于任何姿势。通常,我们可以使用动作混合来生成这个过渡,但混合的动作往往线性化,因此不自然。会出现很多脚滑动的问题。从编程的角度来看,您可能需要手动设置一些入口点,这很麻烦。相反,我们可以使用MIB来生成过渡动作。如视频所示,它可以用于各种角色与物体的交互,例如坐在椅子上、拾取物品、打开门、打开盒子等等。脚滑动较少,过渡自然。您几乎无法注意到哪部分是过渡动作。

在这些视频中,我们实时在游戏中使用MIB。在PC上,生成一帧大约需要1毫秒的时间。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

我们还在动作构建器中实现了我们的MIB方法,以离线生成过渡动作。这个视频展示了从静止到打开门姿势的过渡结果。

MIB的另一个应用是用于行走过渡,准确地说,是生成与轨迹匹配的行走动作。除了循环动画,如静止循环、行走循环、奔跑循环等,还有更多的动画是这些循环动画之间的过渡,用于将角色过渡到不同的状态,例如从静止到行走,从行走到奔跑,或者改变移动方向。

在Motion Matching中,这些位移动画与控制轨迹的匹配非常重要,否则就会出现滑步的问题。在运动捕捉过程中,演员尽力按照预定的舞蹈动作表来跟随轨迹,但只能近似地跟随轨迹。因此,需要进行后期处理来微调这些位移动画,这需要耗费时间。正如之前提到的,我们的MIB方法可以生成与轨迹匹配的角色动画。因此,我们可以使用MIB来生成那些与预定轨迹不匹配的动画。

MotorNerve:一种使用机器学习的角色动画系统【GDC 2024】

作为一个实验,我们要求演员在运动捕捉舞台上自由表演,而不是严格按照舞蹈动作表来执行。然后,我们使用这些运动捕捉动画来训练我们的MIB模型。最后,使用我们的MIB模型生成与控制轨迹匹配的位移动画。我们的DCC工具可以在短时间内生成大量的位移动画,其中大多数动画具有高质量的运动效果。在下面的视频中,我们比较了使用MIB动画和使用混合动画进行转向运动的效果。可以看到,左侧的角色具有腿部在地面上踩踏等细节动作。

好的,这就是第二部分的内容。我们做个总结:首先,MIB是一种基于深度学习的运动生成方法。其次,我们可以使用MIB来生成交互和位移的运动过渡。最后,由于我们的MIB方法具有高效的时间性能,我们可以直接在游戏中使用MIB,还可以在DCC工具中使用MIB生成离线的过渡动画。我们相信,基于机器学习的运动生成方法在游戏开发中将在不久的将来发挥越来越重要的作用。

继续阅读