动画过渡方案

1、动画停步时,如果需要体现出制动感没有滑步,并匹配左右脚、即将落地和抬起等情况使其自然过渡。

除了距离匹配(Lyra方案) 或 使用 通过曲线IK锁定(ALS方案)之外,还有其他方案吗, 既能减少动画师k帧的动画量,也能实现这种效果?

<br/>

2、官方的motionmatch插件是很好的方案,但保证细节和效果,需要的动画量太大了。

如果想要尽可能减少制作动画的成本,又要保持效果和过渡细节,在动画设计和制作上有什么建议和规范?

<br/>

<br/>

我认为滑步产生的主要原因一个是动画表现速度(包括移动和方向)和角色Capsule速度不一致。尤其动画速度不线性不规则,这往往通过Distance Matching或者RootMotion来解决;二是动画混合产生的中间姿态不能匹配角色速度,比如跑-停,包括旋转到停等,这些通常减少混合时间不易察觉,但混合时间久了问题明显。增加中间姿态(动画)可以减少混合时间,但随着动画姿态的增加,状态机逻辑越来越复杂不好维护。Motion Matching我认为可以理解为使用更多动画姿态下更加高级的一种自动状态机。因此天然的可以减小以上两种情况下产生的滑步。

关于Motion Matching动画资源多,比较重的担忧,其实Fortnite目前全平台(包括手机)都使用了Motion Matching,项目对动画内存预算也很紧,而且动作也快。因此使用了不少方法来实现使用比较少的动画产生流畅动画效果,包括减少滑步。

  • 没有长动画,使用短动画,并且易于互相连接混合的动画,来减少整体内存开销。易于混合连接表现在比如各个动画脚底位置,速度会有一个一致性
  • 创建多个Databases,使用游戏逻辑驱动切换调用;这些Database可以有不同的复杂度,以及连贯性。比如用来区分“转向”动作与“启动-停止”、“待机”、“跑步循环”等动作;区分高端和低端平台的设置
  • Motion Matching本身对有限动画资源能产生比较好的结果做了改进。比如动画混合使用了blendstack 节点,而不是惯性混合,避免快速切换动画的情况下产生高频率动画碎片化,导致惯性混合阶段的抖动等瑕疵
  • 之后再使用程序动画做进一步的修正。用于弥补动画数据不足和提升角色动作的真实性和流畅性。比如capsule和选定动画速度有差别,使用Stride Warping和Play Rate Scaling结合方式;还定义了一些Blend Profiles用来更细腻的控制两个选择动画混合的速度,同时减小下半身动画混合过渡期来减少滑步。此外,通过方向扭曲(orientation warping) ,将所选动画的姿态向用户输入轨迹的方向进行微调,从而提高运动路径的准确性与响应性。这个行为是在blendstack里对各个动画序列预先做掉了
  • 最后还有些参数微调来优化表现。比如 Continuing Pose Bias增加当前姿态权重等等

这个视频其中一部分提到了以上的一些做法

另外之前其他开发者也有一些各自经验分享仅供参考