该文章出自https://www.youtube.com/watch?v=tNw9lD2PW3U,讲者为Jose Villarroel。
首先是查询,查询会做两件事,第一件事是获取游戏中人物的运动轨迹作为查询目标,第二件事是获取当前运动匹配动画所对应的人物运动轨迹。如下图,蓝色线为目标运动轨迹,黄色线是当前动画所对应的运动轨迹。
其次是动画数据库,我们需要收集很多动画,然后设定他们的参数,系统会根据当前目标轨迹选择最接近的动画。
最后输出结果。
这个工程会随着引擎的主要版本更新而更新,带来一些新的内容。Epic Games注重创造高质量的动画,那些社区的教程和文档可以帮助您了解到大约70%有关动画的知识与技能,而剩下的30%在这个优秀的案例工程和这次分享中。不过需要注意的是,这个工程并不是一个完整的游戏,没有UI,没有打怪升级,没有华丽的特效,我们会专注于探讨游戏动画方面的内容。最后我们希望这个工程是灵活且高可塑性的,并且我们已经发现其实有很多开发者已经在自己的项目中使用这个工程内的一部分内容了。
首先我们创建一个动画蓝图,搞两个节点,Motion Matching(运动匹配)和Pose History(姿势历史记录),并且在姿势历史记录节点中打开Generate Trajectory(生成轨迹)。
然后新建一个Pose Search Schema(姿势搜索模式)。这个资产是用于定义运动匹配系统是根据什么参数去选择匹配的动画的。
在界面中我们可以看到,这个默认的搜索模式是根据运动轨迹与脚的速度与位置进行动画的选择。
然后我们使用这个新建的搜索模式新建一个数据库,把蹲伏动画丢进去(别忘了Idle动画)。
接着找到我们控制的角色CBP_SandboxCharacter,给角色Mesh设置新建的动画蓝图,并且在动画蓝图中设置好运动匹配的Database,然后就可以在PIE中看看效果。效果还是自己体验与观察最好,所以我们十分推荐您跟着我们的文章进行设置,一步步了解该案例工程中一些好玩的东西。
这个案例工程中,角色可以跳跃,可以翻越障碍,可以目视前方移动,也可以朝向速度移动等等。我们在Debug这些动画时,一般会用到Rewind Debugger(倒回调试器)。这个工具可以在Tools → Debug中找到。如图,戳开这两个按钮,这个工具就会在PIE启动时自动录制,在退出时自动停止,并且第一次选择好的被观察的对象在下一次启动时会自动选择并录制。
我们在PIE运行时可以选择物体进行倒带录制,然后暂停,通过拖动这个Rewind进度条可以达到倒带的效果。可以看到红框处显示了角色正在使用哪些动画,并且我们可以在红框左侧的动画列表中直接点进对应的资产编辑器。
如果进入对应的动画蓝图,我们还会发现,这个动画蓝图里显示的姿势也是和现在倒带状态中的一模一样。这样就很方便我们调试我们的运动匹配动画了。
我们可以看到在姿势历史记录节点,它收集这些骨骼的信息去为动画做过渡平滑等工作。
我们可以在工程示例动画蓝图中看到一个函数Generate Trajectory,这个函数是手动生成轨迹用的。刚刚我们在使用Pose History的时候是启用了Generate Trajectory的,也就是说这个节点会帮我们自动生成轨迹。而手动生成就意味着我们可以修改轨迹,让输入轨迹与动画轨迹进行适当的混合,即便是在没有太多动画数据的情况下也能做出很棒的效果。我们还可以通过世界碰撞生成运动轨迹,这个可以帮助我们处理跳跃在空中与落地时的运动匹配。
这个可以帮助我们获取轨迹信息存起来,在动画蓝图的其他地方使用。比如混合移动、停止和转身。
我们再看看这个Motion Matching节点,这里有一个执行函数叫做On Motion Matching State Updated,会在Motion Matching找到适合的动画时执行。在这个函数中,我们能获取当前选择的动画的相关数据,然后给其他地方使用。比如我们可以获取当前运动匹配的动画速度,让我们的蒙太奇配合它的速度混合与播放;或者获取当前Data Base并判断我们是否需要在这个状态下使用IK或其他一些东西。
别忘了看看上面那个On Update函数,这个可以帮助我们实时更新当前Motion Matching所使用的Data Base。在这个示例工程中使用了Chooser来对Data Base进行选择。
顺带一提,Chooser是虚幻5.4的Beta插件,他可以帮助我们根据输入进来的参数进行判断与选择。Chooser还可以再叠Chooser,根据需求输入参数,根据参数进行选择。
并且最重要的是Chooser适配上述提到的Rewind Debugger,也就是说我们可以在倒带中知道Chooser的选择情况。
在Rewind Debugger中,我们可以看到Motion Matching选择动画时所对应的Cost,然后选择Cost最低的那个动画播放。并且在勾选了Channels Breakdown我们就可以看到不同通道贡献的Cost多少,方便对搜索模式进行参数调整。
还有一个叫Pose Search Block Transition,这个意味着数据库将不会过渡进这一段动画,但是可以从这一段动画过渡到其他动画。
3.7 跨越障碍
我们打开这个跨越障碍数据库中的一个蒙太奇资产,我们又会发现一些新的Notify State:Pose Search Motion Matched Branch In。这个State将会标记这段动画为:其他动画可以在这段动画中做混入。然后我们就可以使用Motion Warping调整翻越障碍时所需要的根运动,所以这个工程是不止使用了Motion Matching的,还有一些UE5动画工作流生态中的其他东西。
在做翻越动画时,肯定需要碰到一个东西的边缘点,而这个边缘点也是可以喂到Pose Search Schema(姿势搜索模式)中的。我们可以通过接口将信息传到自定义的Heading Channel和Position Channel中,让Pose Search干剩下的工作即可。
混合堆栈实际上很像一个状态机,但混合堆栈更像,一个状态混合到下一个状态,再混合到下一个状态,前面已经混合完成的动画就会被自动去除,一层一层推进。我们十分推荐您在自己的项目中试试混合堆栈,可以通过Blend Stack和Chooser Player两个节点构建一个简单的混合堆栈。
假如我们双击Motion Matching节点,也会发现它也是一个混合堆栈。我们可以在里面执行一些动画处理操作,比如根据当前动画获取曲线值,决定是否启用Orientation Warping。
我们还可以调整角色的朝向,我们将会通过提供的朝向值(这个朝向值来自于运动轨迹预测)修改Root Motion中的旋转朝向。Steering有插值,所以可以做缓慢的旋转动作。这个节点适合用在一些运动转向与原地转身的情况,不过这个节点还是实验性的,可能会导致一些意想不到的问题。
关于Root Bone偏移,有一个实验性节点叫Offset Root Bone。这个节点可以对角色的根骨骼进行一定的偏移,以适应落脚点,但是不会影响胶囊体,这就意味着角色在某些情况会穿模到墙壁中。
运行时重定向已经出了有一段时间了,这个功能还没有完善,所以我们在使用自己的角色尝试这个功能时可能会出现问题。关于如何在这个示例工程使用自己的角色,我们只需要仿照工程内的其他重定向角色的IK重定向资产以及角色蓝图制作自己的资产即可。
6.提高可用性体验。我们将会永远专注于对于动画工具集的更新,我们会倾听来自社区的不同意见改进我们的各种内容与工具。
结语
Epic Games开发团队专注于提供高质量的游戏内容与工程案例,这次的游戏动画案例工程也不例外。希望5.4推出的Motion Matching工具与文章分享的相关知识能够帮助到您制作出高质量的动画与游戏。最后还是再次推荐您前往Epic Launcher下载这个游戏动画案例工程进行体验、学习、研究与实践。祝创作愉快,工作顺利。
近期焦点
扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”获得更多虚幻引擎的授权合作方式和技术支持。
长按屏幕选择“识别二维码”关注虚幻引擎
“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。