6. 插值方法:线性liner(),平滑ease()
我们已经学习了怎样利用表达式来缩放参数值的范围,只需要简单的乘除运算就可以了---例如将旋转参数范围(0~360)缩放到不透明度参数范围(0~100),但是这不是唯一的方法,AE提供了一套内置的插值算法进行参数之间的转换:
linear(t, t_min, t_max, value1, value2)
ease(t, t_min, t_max, value1, value2)
ease_in(...), ease_out(...)
这些语句看起来很复杂,因为语句中包含很多参数:
t 当前参数,例如旋转参数,不透明度参数或者是你所选择的其他变量,该参数必须是一维的,该参数为必选参数。
t_min 当前参数范围的下限,该参数为可选参数,如果参数范围的下限或上限被忽略掉了,那么AE会将参数的范围定义在0~1之间。
t_max 当前参数范围的上限,该参数为可选参数。
value1 目标参数范围下限,当t≤t_min时,表达式返回该值,该值几可以是一维标量也可以是二维向量,与value1的维数相同,该参数为 必选参数。
value2 目标参数范围上限,当t≥t_max时,表达式返回该值,该值几可以是一维标量也可以是二维向量,但是如果该值与value1 的维数 不同,AE会自动以value1 值为标准进行匹配,该参数为必选参数。
通过下面的例子让我们来了解一下该语句的含义:
linear(time, 0, 5, 0, 360);
通过上面的学习,我们应该将这个语句理解为,时间的变化范围是0到5,目标参数的范围是0到360,整个变化过程是线性的。如果将该表达式应用到图层的旋转属性上,那么你会发现图层在前5秒内完成了一周的旋转。
应用该表达式后,图层在第五秒停止旋转,这就是与我们前面介绍的直接手写公式time/5*360最大的区别,插值算法自动在当前参数与目标参数之间采样范围极值。
另外一个区别就是你可以设置不同的插值算法:ease(),ease_in()和ease_out()。这些插值算法与同名的关键帧插值算法(通过关键帧助手菜单设置)的作用相同。利用这些插值算法可以为数值转换计算提供一个更自然的运算过程,从而得到更流畅的变化效果,仅仅使用前面介绍的手写公式是做不到这一点的。
看看下面的动画,体会一下不同的插值算法(所有的图层使用相同的参数,只是插值算法不一样):
点击这里下载:
示例: 滚动栏
现在让我们使用这种简单的方法来快速完成一个例子,我们将制作一个滚动栏的动画。首先我们需要建立两个图层,一个文本区域图层和一个滚动栏图层。我们要为文本图层的轴心点加入表达式,因为这样可以保证我们可以操纵图层的位置属性(当图层滚动时位置属性仍然不会改变)。
记住一定要在一个方向上控制轴心点以得到正确的滚动效果,在这个例子中我们将对轴心点做垂直方向的运动以使文本区在合成窗口中上下滚动。为了使滚动的范围最大,也就是文本区域全部实现滚动,我们将轴心点的Y值范围设置为0到图层的高度,也就是我们的目标参数值为:
value1=0
value2=height
至于当前参数范围,我们将其设置在到合成窗口的高度之间,我们需要在顶部与底部空出几行以得到更好的效果。假如合成窗口的尺寸为320×240,那么就将当前参数范围设置在25至215之间,当滚动栏在Y轴上从25运动到215时,文本区将开始滚动。
t_min=20
t_max=220
当然,当前参数就是滚动栏的Y轴坐标:
t=this_comp.layer("Scroll").position[1]
将几条语句综合起来,加以恰当的变量名称,我们就得到了下面的表达式:
scroll_y=this_comp.layer("Scroll").position[1];
scrolled_amount=linear(scroll_y, 20, 220, 0, height);
最后我们将scrolled_amount的值放到一个二维数组中,让文本图层的轴心点X轴坐标保持不变,最终的表达式为:
scroll_y=this_comp.layer("Scroll").position[1];
scrolled_amount=linear(scroll_y, 20, 220, 0, height);
[anchor_point[0], scrolled_amount];
最后效果如下 (只为滚动栏Y轴的位置属性设置关键帧):
上面的表达式只要稍加改动就可以实现水平滚动的效果,如果将该表达式应用到3D图层的旋转属性上,就可以制作出三维滚动旋转效果:
下载如下: