【Nuke教程】Nuke中使用表达式快速修改动画曲线

16 六月, 2014
397
1

翻译:桃子

大多数合成师对时间线变化颇为头疼。这儿有几个表达式,当处理时间修饰符的时候表示会很有帮助。(frame holds,time offsets,time warps······)

1、冻结动画的某一帧(FrameHold)

曲线表达式(frame)是最简单的一个, 最有效的时间协调方式就是用表达式。他的意思是“在此帧利用这个动画的值(曲线)”。
这个能被用在任何的动画按钮上,但是它在3D运算符上是最有用的,因为不能简单地附加一个FrameHold节点给它们。
这儿有几个很常见的场景:你有一个插图和一个 matchmoved 相机,想要建立一个所述插画的静止帧到投影上。你可以建立一个相机副本,然后删除它的动画,使其成为一个静态的可选择的框架。或者基于一个单独的FrameHold,使用表达式来动态地冻结相机动画,你想选择一个不同的帧来作为你的投影以后可以做更改。
上述设置,通过使用下面在投影相机上的任何动画按钮能够被简单地实现:

frameHold_exp

相同的表达式能够被用在投影标签上以显示框架所有被使用的时间,就像这样:

labelHold

2、偏移时间动画 (TimeOffset)

这种工作方式几乎和前面的相同。比方说你有一个适配你的序列的摄像机。现在,在你的序列上你偏移了序列的时间。你仍然可以通过曲线(frame+offset)表达,动态地引用相机动画。
例如这样:

timeOfsset timeOffset_exp3、变速动画(TimeWarp, OFlow, F_Kronos)

同样,使用相同的表达式语法,一个可被参考的重置时曲线,以同样的方式来重新定义动画就如你的镜头。
下面是使用重置时间数据的例子,从时间变速节点到一个重置时间变换节点的动画:

timeWarp如果你使用OFlow or F_Kronos,你将需要分别参考”timingFrame”和 “frame”按钮,而不是查找按钮。另外,OFlow 和 F_Kronos可以使用两种不同的方法来描述一个重置时间:查找曲线(原始 frame)或者整理速度。如果你想不管是用哪种方法都可以使用你的表达式去工作,你需要包含一个条件这样就可以有同时处理。只要你喜欢,这样你就可以在你的 OFlow或者 F_Kronos上工作,和确保你的动画曲线带动起来改变现状。

以下就是表达式会怎样去呈现的所有的三种类型的节点:

timeWarp_options

4、反转变速曲线(使用”inverse” 表达式取消变速)
假设你有一个变速的曲线你需要去得到反转。比如,你的动画(或跟踪)已经重新定时跟踪,现在重新定时改变。理想情况下,你想要取消从第一个重定时是申请的曲线,然后重新应用。
这里至少有两种方式能够让你完成:
拿以前定时的曲线,通过执行编辑>移动倒转的曲线编辑器···然后切换曲线的x和y值。从这里开始,你可以把这个“倒曲线”给你的动画曲线,如“重定时动画描述”。
使用内置“inverse”的表达方法。如果你仍然想改变原始曲线,这是一种理想的方式。然而,牢记“逆”的方式只能是在曲线上,积极地在任何地方引出。换句话说,它仅适用于曲线/重新定时,在只增加帧数的情况下(也就是说,没有向后定时,ping-pongs,或者任何地方随着时间的帧数下降)
使用反转的方法,仅仅用到曲线。逆转,或者nodename.knobname.逆转,nodename.knobname包含了一种动画曲线,就如这样:inverseTimeWarp

5、在某一点上找到一个曲线的斜率/速度 (expression 表达式导数)

导数的表达式能够适用于动态图形,或者任何场景,你想要动画处理某些事物就建立在动画曲线的“speed”上。想象一下,你有一个变速曲线,你想要做一些创意分级就如你的剪辑减慢/加快。或者,你一直在跟踪对象(比如,一根魔杖),然后你想要它变快变亮。或者,你在做一个轮子动画,然后你想要它在屏幕上移动时旋转速度变快。你拿到了图片。所有这些例子,导数表达式都能够驾驭。
怎样使用它:
语法是曲线。导数,在当前的frame中,导数会回归到原始的曲线倒数。这就是当前帧和下一帧之间的曲线变化值有多大价值的表现。下图给出了更好的解释:

derivative2

所以,使用曲线表达式。导数在曲线之上,你得到一帧1到9,0帧是10,-2帧是11到14,然后0再次15帧.
在任何其他按钮上,他是由你来使用这些值,然后根据需要进行修改(规范它们,它们的规模)
导数表达式能够取两个可选值,用以下的一个语法:

[box style=”tip”]curve.derivative(frame)
curve.derivative(n, frame)[/box]

帧是我们计算导数的框架,默认为当前帧。你可以使用类似的曲线。例如,导数(1,帧-5)得到这个曲线的一阶倒数和5帧的延迟。
—n代表了n阶倒数。默认是一(对第一个导数),但是你能够设置为2,返回2阶导数。二阶导数可以描述为一阶导数的导数。均值的一个好的比喻:一辆移动的车,第一个导数将沿着时间的位置信息变化(=速度),第二个导数速度沿着时间变化(=加速)。所以,如果你想做一个而非速度的加速动画,尝试第二个导数。
6、找到一个曲线的平均值 (整合表达式)
在位置a和b之间的曲线整合通常被描述为下方a到b的曲线区域。积分也经常被用于寻找一个函数(曲线)之间两个点的平均值。这种方式能够很快的处理一个复杂的曲线,所以让我们看看再nuke中如何去获得两帧之间的曲线平均值:
有一个曲线产生闪烁效果。就如这样:
RandomCurve现在你想知道0帧到100帧之间的曲线变化平均值。你能够用以下的句法来表达:

[box style=”tip”]curve.integrate(first frame, last frame)/(number of frames)[/box]

这个能够在“第一帧”和“最后一帧”之间精确地计算曲线整合。这个结果将两个帧之间进行聚合,或者一下的曲线的这个曲线区域。所以,用帧的总数目来进行分离,我们就能够得到平均值。用例子上的曲线,表达式就如以下你看到的:
Average