Maya动画变速工具

前言

前段时间朋友接了个外包,实拍的原始素材在nuke里进行了变速,而一些cg动画在原素材中已经制作完成,
需要一个工具对maya文件中动画进行相同的变速来匹配变速后的素材。

其实变速的原理和实现并不是特别复杂,不过繁复的数值计算需要借助脚本来实现。

然后借着节假日的最后一天,写了这个变速工具。
这篇文章简单的记录下过程,并把它分享给需要的朋友。

变速的方式

变速实际上是对原始素材的抽帧和补帧,
而对于我们来说,最需要知道的是:
变速后的每一帧,对应的是原始素材中哪一帧画面。

比如,知道变速后的1001帧,是原本的1005帧,
这样把1005帧的动画复制到变速后的1001帧,
就可以完成了这一帧的匹配。

为了得知变速后的对应原始帧,我们可以用这样一个验证方式。
首先用软件输出一个这样的(纯数字)序列帧。

然后套上变速节点进行观察。
在Nuke中常用的变速节点有RetimeOFlowKronos等。

首先使用retime节点做最简单的倍速变速
这里为范围1001-1100的序列帧做一个1.9倍的变速,
filter就默认使用box。

点击变速后的每一帧,可以看到对应的图像。
比如变速后的1025帧的图像为原始1046和1047的融合。

然而每个变速节点又有几种不同的变速方式,
这里的retime节点就有noneboxnearest三种方式。
尝试不同的变速方式能看出,有的是直接进行取整,有的是会融合前后帧。

通过这些尝试和观察,对于直接的倍数变速,推导出这样一个公式:
起始帧 + (变速后的帧数指数)*倍数 - 倍数
注意:这里指数是指变速后序列的第几帧。

比如变速后的1035帧的指数就为35。(起始帧为1001帧的情况下)
把上述的公式带进去可以得到结果:
1001 + 35*1.9 - 1.9 = 1065.6

针对于retime节点,不同的变速方式它的取值为:

  • none:直接去小数取整
  • box:四舍五入后,融合前后帧
  • nearest:有小数,直接进一位取整

说完了倍数变速,对于OFlow,Kronos和TimeWarp节点进行曲线变速的情况下,可以直接通过观察这里的值进行结果判断:

如图所示,变速后的1059帧对应原始的1081帧,Frame里的值为1080.562。
再次尝试不同变速方式,总结出不同变速方式的求值结果:

  • timeWarp
    none: 直接去小数取整
    nearest:四舍五入取整
    box:根据小数点的值,画面融合

  • oFlow
    motion:根据小数点的值,画面融合
    frame:四舍五入取整
    blend:根据小数点的值,画面融合

  • Kronos
    motion:根据小数点的值,画面融合
    frame:四舍五入取整
    blend:根据小数点的值,画面融合

通过上述的方法,我们就可以得到这样一个变速信息文件:

左侧为变速前帧数,右侧为对应的原始素材帧数,中间用空格隔开。

变速工具

工具我放在了github上,直接下载使用即可。

https://github.com/lingyunfx/MayaCameraRetime

使用步骤:
1.选择变速信息文件(txt格式)

2.选择变速方式,支持motion,frame,none三种类型。
blend可以使用motion进行变速,nearest可以使用frame方式。

3.点击run按钮,工具会对maya中所有的动画进行变速。
(保险起见,最好在操作前进行文件保存)

这篇文章就到这里,如果觉得文章还不错,可以关注这个公众号支持一下作者thx!