欢迎光临散文网 会员登陆 & 注册

面向AE编程之左右滑动动画制作

2023-07-07 15:25 作者:ijxhshs  | 我要投稿

本教程灵感来源:


有的时候我们会有需要做类似传送带动画的需求。对于文本或形状图层而言,ae内置了一个中继器功能,可以直接对他们进行克隆,这样就不用复制一大堆图层再手k关键帧了。然而,对于其他大多数图层却不能使用中继器,要解决这个问题,可以建立一个空对象,把它放到合成的最顶层,然后在图层的位置属性输入以下表达式:

按ctrl+d复制几层,就能看见图像整齐地排列在一行。这样就只需对空对象的位置属性打关键帧,就可以控制所有图片的移动了。

代码第一行的位置属性其实并不需要手打,表达式输入框左边有个螺旋型的图标,按住它并拖动到你想要的属性,松开鼠标,属性所对应的代码就自动出现在表达式中了。

图层的位置属性在平面图层中是由两个值组成的,第一个对应坐标x,第二个对应坐标y,代码第三行中在位置属性后加[0]就是取坐标x的值。


index属性是AE自带的,它的值等于这一图层的序号(也就是图层左边的那个数字)。于是每个图层都与上一层图层的x轴位置相差固定的数值。


但这个代码还存在一点问题:如果后期需要修改这些图层的间隔,就要修改所有图层的表达式。在没有脚本辅助的情况下,这就需要把所有图层删掉,修改表达式后再重新复制,实在太麻烦了。于是我们可以在空对象图层上添加一个滑块控制效果,并用滑块控制distance变量的值,将表达式修改为:

这样在修改间距的时候,只需要修改滑块的值,就能很方便地做出调整了。一个良好的习惯是:对所有可能在之后进行调整的参数,都用滑块来控制。这可以减少大量调整的时间。


但这还不是我们的终点。倘若我想让图片运动到画面边缘时自动缩小,阁下该如何应对?这就需要一个名叫sampleImage的函数了。adobe对这个函数的说明如下:


sampleImage(point, radius = [.5, .5], postEffect=true, t=time)

返回类型:数组 [4]。

参数类型:point 是数组 [2],radius 是数组 [2],postEffect 是布尔值,t 是数值。

对图层的颜色和 alpha 通道值进行采样,并返回指定点距离内像素的平均 alpha 加权值:[red, green, blue, alpha]。如果 postEffect 为 true,则采样值是渲染图层上的蒙版和效果后的图层的值;如果 postEffect 为 false,则采样值是渲染蒙版和效果前的图层的值。输入值 point 位于图层空间中;点 [0,0] 是图层中左上角像素的中心。输入值 radius 指定样本中心到采样矩形的边缘的水平和垂直距离。默认值会对一个像素采样。

可能这看起来有点抽象,但我们只要知道,只要告诉这个函数取样点的位置,它就能输出这个点附近的rgba值(大小从0到1)。于是我们可以制作一张中间为白色,两侧为黑色的图片,用这张图片的亮度信息(此处可直接用rgb的平均值替代)控制图片缩放的大小,就能让图片运动到边缘时自动缩小了。


要制作这样的图片,我们可以用两个纯色层,各加上一个梯度渐变效果,一个在左侧渐变,一个在右侧渐变,然后混合模式改为“较深的颜色”。效果如下图所示:

然后可以ctrl+alt+c打一个预合成,就能用来控制图层的缩放了。控制图层缩放的表达式如下:

将预合成设置为不可见,就大功告成了。为了动画运动得更加自然,还可以对缩放大小进行非线性插值,还可以对位置进行补偿,让图片缩小时离其他图片更近一点。但这就不在本教程的讨论范围内了。


最后补充上期教程的一个知识点:其实AE中还有另一种方法控制表达式更新的频率,只需要利用posterizeTime函数,在表达式开头输入:

这样就能不仅仅只控制随机表达式的更新频率了。


面向AE编程之左右滑动动画制作的评论 (共 条)

分享到微博请遵守国家法律