分享

AE表达式简介(三)...

 spring1099 2011-06-20
参数值范围:



当使用表达式中的拾取线来建立参数之间的关系时,AE会自动纠正由于错误的维数匹配导致的错误,但是这种纠正之后的表达式并不意味着就是你所需要的,物理错误是避免了,但是逻辑错误仍然会影响你的创作。

在这里特别强调一下,有时候你需要调整当前参数值以匹配目标参数。例如,在前面的例子中我们使用图层的旋转属性来控制图层的不透明度属性,你会发现当旋转属性达到100度时,不透明度属性就达到了上限,但是我们想要的效果是当图层完成一个周期的旋转时其不透明度回到原来的值,我们就需要调整参数范围以达到我们的需要。

缩放参数范围值的方法很简单,可以利用公式(当前连接参数/当前连接参数范围上限=目标连接参数/目标连接参数范围上限),还是使用上面的例子来说明,我们需要将旋转参数的范围(0~360)缩放到不透明度参数的范围(0~100),所以我们就需要为不透明度加上表达式:

rotation / 360 * 100,从而就达到了我们需要的效果,不透明度在0~360度范围内变化:

用这个简单的小技巧可以完成很多期望的效果。例如,使用一个轮胎的素材作为图层,我们就可以利用该图层的位置属性来驱动图层的旋转属性,我们只需缩放位置属性来为旋转属性建立正确的连接表达式,因为轮胎每旋转360度就会移动一个周长的距离,所以我们应该这样书写表达式:     rotation=distance/circumference*360:

插值方法:



线性liner(),平滑ease()

我们已经学习了怎样利用表达式来缩放参数值的范围,只需要简单的乘除运算就可以了。例如将旋转参数范围(0360)缩放到不透明度参数范围(0100),但是这不是唯一的方法,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会将参数的范围定义在01之间。

t_max 当前参数范围的上限,该参数为可选参数。

value1 目标参数围下限,当tt_min时,表达式返回该值,该值可以是一维标量也可以是二维向量,与value1的维数相同,该参数为
必选参数。

value2 目标参数范围上限,当tt_max时,表达式返回该值,该值几可以是一维标量也可以是二维向量,但是如果该值与value1 的维数不同,AE会自动以value1 值为标准进行匹配,该参数为必选参数。

通过下面的例子让我们来了解一下该语句的含义:

linear(time, 0, 5, 0, 360);通过上面的学习,我们应该将这个语句理解为,时间的变化范围是05,目标参数的范围是0360,整个变化过程是线性的。如果将该表达式应用到图层的旋转属性上,那么你会发现图层在前5秒内完成了一周的旋转。

应用该表达式后,图层在第五秒停止旋转,这就是与我们前面介绍的直接手写公式time/5*360最大的区别,插值算法自动在当前参数与目标参数之间采样范围极值。

另外一个区别就是你可以设置不同的插值算法:ease(),ease_in()ease_out()。这些插值算法与同名的关键帧插值算法(通过关键帧助手菜单设置)的作用相同。利用这些插值算法可以为数值转换计算提供一个更自然的运算过程,从而得到更流畅的变化效果,仅仅使用前面介绍的手写公式是做不到这一点的。

示例: 滚动栏
现在让我们使用这种简单的方法来快速完成一个例子,我们将制作一个滚动栏的动画。首先我们需要建立两个图层,一个文本区域图层和一个滚动栏图层。我们要为文本图层的轴心点加入表达式,因为这样可以保证我们可以操纵图层的位置属性(当图层滚动时位置属性仍然不会改变)。

记住一定要在一个方向上控制轴心点以得到正确的滚动效果,在这个例子中我们将对轴心点做垂直方向的运动以使文本区在合成窗口中上下滚动。为了使滚动的范围最大,也就是文本区域全部实现滚动,我们将轴心点的Y值范围设置为0到图层的高度,也就是我们的目标参数值为:

value1=0value2=height

至于当前参数范围,我们将其设置在合成窗口的高度之间,我们需要在顶部与底部空出几行以得到更好的效果。假如合成窗口的尺寸为320×240,那么就将当前参数范围设置在25215之间,当滚动栏在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图层的旋转属性上,就可以制作出三维滚动旋转效果:


缓存参考对象:

相当于临时变量

前面我们已经讲解了如何使用拾取线来建立简单的表达式,有时候你不想也不能通过这种方式来建立表达式。例如,你不可以将拾取线拖动到屏幕中不可见的参数上(图层宽度或者是持续时间等)。

在这种情况下,你就需要建立一个缓存参考对象,这要比使用拾取线复杂的多,因为你需要理解一些Javascript的语法,刚接触到这种方法时也许会感到很困难,一旦我们理解了一些术语后,我们就会感受到建立参考对象的方便之处。



对象:

简单的说对象就是一个容器,每一个对象都可以包含其他的对象、属性和方法。

例如,AE中的一个合成就是一类物体,每一个合成中都可以包含有其他的对象,像图层或者诸如持续时间和宽度等属性。AE中的所有元素对于我们来说都是很熟悉的——合成、图层、不透明度等等,他们或者属于对象或者属于对象包含的物体。

因为对象可以包含其他的对象,所以说对象存在层级结构,位于最高层级上面的对象叫做全局对象。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多