super1 发表于 2021-11-21 13:26

游戏开发中的Pose Matching

前言:

国内外游戏开发教程中很少见到关于Pose Matching的分析,但是Pose Matching在3A游戏开发过程中又是特别重要的一个功能点,顽皮狗,EA,Square Enix等在某些演讲中都提到过,我是由于内部演讲Motion Matching的需要,把一些周边项的功能点也同步讲下,所以收集了一些网上的资料并加以总结,后面如果有其他资料我再加以补充。
正文:

在处理游戏动画时,大部分的时间其实是在处理动画间的Transition(过渡),处理Transition有很多种办法:
创建Transition动画并添加到状态机中将两个动画强行Blend并设置一个足够长的时间Inertialization Blend给动画标记上sync point markers,按照phase进行blendPose Matching 我们要讲到的基于大量动画数据的Motion Matching

Pose Matching的原理很简单,就是计算两个Pose某些骨骼(一般都是左右脚踝)位置和速度的相似性,计算结果为一个Weight值,Weight越小说明相似性越高。当需要从当前Pose过渡到动画A时,动态计算当前Pose与动画A每帧Pose(想灵活的话可以设置采样间隔)的Weight值,找出Weight最小动画帧的时间StartTime,从计算出来的StartTime开始过渡。
实现Pose Matching的话一般都是在Editor下进行属于预处理,可以利用Animation Modifier或者写C++ Pose Matching节点时,在保存时进行预处理操作等,预处理操作主要是提取每个Pose某些骨骼的速度和位置信息等。
Pose Matching用途也很广泛,简单就是start+Loop的使用,Start最后一帧和Loop首帧不用完全脚步对齐,利用Pose Matching可以很容易在Loop中找到最合适的开始帧;Pose Matching还有一个好处就是不用强制要求动画师必须把动画的末尾Pose设置为指定Pose(这个仁者见仁),有一点的灵活性吧;还有就是Pose Matching候补动画可以为多个,从多个动画中选出最合适的那个动画;因为动画不是强制从第一帧开始过渡的,所以玩家可能会更快地完成Transition,随之进行角色的掌控,对于操控手感来讲会有很好的提升(Transition动画不用完整地看完才能角色操控)。
我做了一个Pose Matching的示例。我们有两个Stop动画,一个Stop动画首帧是左脚在空中,另一个动画首帧是右脚在空中。因为你不可能知道玩家选择停步的时候脚的情况,所以在状态机中固定死选择某个Stop动画都是不对的。


https://www.zhihu.com/video/1435935971334811648
上面是Stop动画始终用Left Feet Up时的情况,可以看到如果停步时左脚在上,表现是良好的,但如果停步时右脚在上,那么表现是很怪异的。


https://www.zhihu.com/video/1435939688079478784
同样的道理,上面是Stop动画始终用Right Feet Up时的情况,可以看到如果停步时右脚在上,表现是良好的,但如果停步时左脚在上,那么表现也是会抽抽的。
我们利用Pose Matching把两个Stop动画都放到候选列表里,当停步时Pose Matching知道当前的Pose情况,跟两个Stop进行Pose比较选择最合适的动画以及动画帧进行过渡。


https://www.zhihu.com/video/1435939739580530689
《FF7重置版》在演讲中也提到了相关的使用,当做扩展阅读吧!






https://www.zhihu.com/video/1434838610566205440

参考资料:

Joakim Hagdahl:you-should-be-matching-poses
UE4 Locomotion Anim System - Stop Transitions
Pose Matching – Motion Symphony
Multi-Pose Matching – Motion Symphony
FF7重置版动画技术笔记 | 风蚀之月

ainatipen 发表于 2021-11-21 13:28

写的不错,点赞鼓励鼓励~

闲鱼技术01 发表于 2021-11-21 13:37

[耶][耶]

xiaozongpeng 发表于 2021-11-21 13:47

有趣~
[调皮]

rustum 发表于 2021-11-21 13:51

轻量级的motion match~
页: [1]
查看完整版本: 游戏开发中的Pose Matching