背景
Motion Matching 的发展
motion matching技术是最近新兴的角色动画系统的技术,主要解决不同动画序列之间的过渡。其核心思想是,建立一个庞大的小序列数据库,当需要进行动作的过渡时,算法计算出未来一小段时间的姿势、速度、轨迹等你所考虑的指标,然后在数据库中搜索相匹配的动画序列,然后将其播放。在实际使用的时候,可以根据需求调整匹配的具体形式,如速度的权重要大,轨迹的权重可以小一点等等。同时,可以所有动作序列进行分类,然后可以根据需求限制搜索空间。
那么显而易见的是,只要数据库的序列足够丰富,对动作之间的过渡进行人工干预的情况就会变少。因此,基于此技术可以非常方便的搭建其一个动画系统。但目前这种也有其局限性,比如对于一些非 locomotion 的动作来说,如何得到丰富的的小序列是比较困难的。以格斗游戏为例子,对于同一个连招,按下按钮的持续时间、按键之间的间隔不同会影响角色的动作快慢、力量感等等。而这些动画越是具有张力、艺术性,在现实世界就越难做出了,也就难以使用动作捕捉。而这部分还是会使用传统的方法来实现,比如动画师通过操纵骨骼、蒙皮来生产关键帧等等。当然,还有一些其它问题,比如当数据库的序列过多时,搜索算法就很容易成为性能瓶颈。
本文主要介绍 Holden 等人利用深度学习技术来去除Motion Matching的运行时数据库 。
总体框架
论文作者根据 Motion Matching 的流程,找到三个地方使用深度学习来优化,分别是搜索、动画数据,动画播放。
以一个最基础的motion matching运作流程为例,当一个特征(姿势、速度、轨迹等)被输入后,利用 k-nn 算法找到数据库中临近的一个特征,然后再根据找到对应的动画(即一个键值对),最后不断播放下一帧直到有新的输入进来。
Decompressor
作者首先对数据库这一部分下手,使用自编码的技术来压缩动画序列的数据库(但还保留了特征的数据库)。具体做法如下
- 将编码到隐变量,然后将和对应的特征一起作为Decoder的输入解码,得到
- 计算,计算梯度,优化网络参数
这个算是比较常用的自编码套路。当网络训练好后,我们就可以将对应的储存起来,也就是压缩到了。现在我们从存储变成了存储,这样就达到了压缩动画序列的数据库了。在使用的时候,只需要额外的将经过Decompressor网络生成对应的即可。但现在还是存在两个数据库和,接下来我们讲如何去掉运行时的这两个数据库,变成无数据库的技术。
Stepper
为了在运行时除去和两个数据库,同时还有保证可以正常工作,我们需要考虑一个问题:如何知道下一帧的动画?这就是一个典型的预测问题了。
文中介绍了一个名为 Stepper 的方法,用于计算下一帧的,然后就能计算出下一帧的了。具体做法如下
- 对于一个窗口为的动画,我们需要预测,那么
- 首先赋值
- 利用网络预测
- 然后赋值
- 如此进行完窗口,得到
- 计算,梯度,优化网络
这个步骤的思想类似于 motion matching 中的搜索算法,即根据当前的输入,寻找符合预期的一段动画序列。
一旦网络训练好后,我们可以将当前的喂给网络,得出,然后加回去后得到下一帧的,之后再使用Decompressor就能得到下一帧的动画
但现在还有一个问题:由于我们需要通过外部输入的来控制动画,那么就不可避免的需要用k-nn搜索算法找到最近的,这时候依旧需要运行时的特征数据库。我们在接下来的一节介绍,如何除去运行时的特征数据库
Projector
到目前位置,因为外部的特征的输入,我们无法避免地需要运行时特征的数据库。关键点在于我们需要找到和最近的,因此可以想象,如果我能通过计算出,那么问题就解决了。
论文介绍了一个名为Projector的方法,在训练中利用k-nn搜索算法来使得Projector的作用和搜索算法类似。具体如下
- 对特征数据集中的加入一定的噪声,得到,模拟外部的特征输入,但仍在的附近,
- 利用搜索算法找出最近的特征的下标
- 使用网络计算出预测值
- 计算以及距离关系
- 计算梯度、优化网络
训练过程,使得了Projector拥有直接计算输出邻居的能力。一旦网络训练完成,我们就能直接根据外部输入特征,算出来,从而避免了临近算法需要运行时的特征数据库。