1、表达式简介 在详细讲解表达式之前,我们先总体了解一下 AE 中元素之间的关系,据我所知在 AE 中 主要有五种方法建立元素之间的关系: 关键帧:即使元素间没有必然的连接关系,你也可以通过设置关键帧来为它们建立联系。这 是最普通的一种连接关系,这种方法也是最灵活的,但是很不利于修改和调试。 合并嵌套: 你可以将几个图层一起放置于一个新合成中,这很像其他应用程序中的成组操 作,一种将多层素材元素作为单独素材处理设置的方法。 父子连接: 不用嵌套为图层建立层级关系的方法,在父子连接关系中任何应用于父层级的 变化都会立即影响子层级,而针对子层级的设置不会影响到父层级。 动力学脚本: 像表达式一样,动力
2、学脚本是 AE 中内置的简单功能,动力学脚本可以为当 前图层创建基于另一个图层或属性的关键帧。例如,你可以使用动力学脚本令一个图层模 拟另一个图层的位置变化。美中不足的是,使用动力学脚本建立的元素间关系只是暂时的, 仅当脚本执行时才会起作用,在后面的设调整中,针对一个图层的改变不会反映在另一个 图连接层上,除非重新应用动力学脚本。 表达式: 表达式很类似于动力学脚本,不同的是表达式会保持始终使能,只要应用表达式 之后,任何关键帧都会永久保持与之的连接关系。 在这几种连接关系中,表达式的功能最强大,但是学习起来有一定的难度,需要一定的毅 力。 使用表达式的时机 使用表达式为图层建立动态连接是一种
3、非常方便高效的方法。 从父层级中仅仅复制一个参数. 有些时候,你只想从一个图层中复制一个参数,而不是一 整套父子连接图层关系。 例如, 两个图层建立了父子联接, 利用父子联接建立的图层关 系中子层级会继承父层级的位置与旋转属性。而应用表达式建立的图层关系,子图层只会 继承父层级的一个属性,而其旋转属性由于未被联接到旋转属性,所以该参数不会改变。 通过使用表达式你不用设置任何关键帧就可以为参数设置动画。 你可以使用表达式为存在的关键帧增加随机性,这种方法非常巧妙,它保留了原始的关键 帧设置。使用表达式建立的随机性效果可以轻松的切换表达式的使能状态,不会影响原始关 键帧。 通常情况下使用其他方法可
4、以实现的效果就不要使用表达式,AE 具有强大的工具和功能 来实现各种各样的效果。例如,使用父子连接可以实现的效果就不需要再使用表达式。表 达式功能的确很强大,但是它不是万能的,而且精心书写表达式后还要维护表达式。 解析表达式 简单的说表达式就是为特定参数赋予特定值的一条或一组语句,最简单的表达式就是一个 数值:6; 当然了,这种表达式的用处不是很大,常量通过调整参数的值来实现就可以了, 像下面这种变量表达式用处会更大:rotation; 当执行该语句时,AE 的表达式会自动计算当前图层当前时间的旋转参数值,返回的值会赋 予表达式连接的参数值。 如果表达式应用于图层的不透明度属性,那么该图层的不
5、透明度 属性会随着旋转属性同步变化,当旋转三十度的时候,图层不透明度也会被设置为 30%。 AE 中的表达式以 Javascript 语言为基础,Javascript 包括一套丰富的语言工具来创建更复杂 的表达式,当然包括最基本的数学运算:opacity*10; 意思就是当前图层在当前时间的不透明度参数乘以 10,因为不透明度参数的值阈是 0100,所以该表达式的之余就是 01000,该值将赋予表达式连接的任何参数。 等号的位置 也许你认为表达式应该是这种形式, “position=rotation”,AE 中的表达式不需要使用等于号 将其赋予参数,为参数添加表达式的时候,直接将计算出来的结果
6、赋予参数。当然,你也 可以在表达式中使用等于号,为参数赋变量值。 表达式、参数值一一对应 一句表达式控制一个参数,因为一句表达式仅连接在一个参数上,它仅将值赋予该参数。 例如,你不可以使用一句表达式来同时修改一个图层的位置和旋转值;你只有创建两个区 分开来的关键帧,一个连接到位置属性上,另一个连接到旋转属性上。 多行表达式 表达式可以以多条语句的形式来组织书写。 当表达式由多条语句组成的时候,最后一行语句所计算出来的值将赋予表达式连接的参数, 如下面的表达式: offset=30; ralph=rotation+offset; ralph; 该表达式组将会使图层的旋转值设置为当前时间的旋转值加
7、上 30 度。 为参数加入表达式 有两种方法为选择的参数加入表达式,一种方法是在时间轴选择参数后, 从动画菜单中选择增加表达式;另一种方法 是按住 ALT 键的同时鼠标左键单击参数左边 的马表,快速为参数加入表达式。 加入表达式后,你会发现时间轴发生了变化: 首先,在参数名称的左侧多了一个带有“=” 的按钮,单击该按钮来切换表达式的使能状态。 其次,参数值变为红色,表示该参数由表达式控制,手动编辑该参数将失效。 第三,在参数名称的右边增加了并排的三个图标(稍后讨论) 。 最后,在时间轴中增加了一个表达式编辑区域,该区域可以通过下拉箭头来改变显示范围。 单击第一个图标按钮会在时间轴窗口中打开表达
8、式的变化图表,从中你可以观察到参数值 的变化曲线和参数变化的加速度。如果表达式影响到元素的运动路径,那么合成窗口中显 示的路径曲线也会发生变化。 第二个图标按钮是拾取线一个帮助你书写表达式的工具,只需要简单的将拾取线拖动到另 一个参数上面,就可以为当前参数与拾取的参数建立动态连接关系,在后面的教程中详细 讲解拾取线的功能。 第三个按钮是表达式结构下拉菜单,使用该菜单可以方便的参考 AE 的表达式语言,使用 该菜单可以清晰的看到表达式所影响的属性和元素。 拾取线 使用拾取线可以方便的建立参数间的连接表达式: 例如,为图层的不透明度添加表达式,然后拖动拾取线到图层旋转参数上就会为不透明度 与旋转参
9、数建立动态连接,现在再为旋转参数设置关键帧,会同步影响到不透明度属性: 如果你将拾取线拖动到同一合成不同图层的属性参数上,那么 AE 就会创建一个稍微复杂 一点的表达式,表明与哪一个图层的属性建立动态连接: this_comp.layer(“Solid 1“).opacity 这个表达式首先指明合成(“this_comp“ ), 然后指明该合成中的图层(“solid1“),最后指 明该图层被用于建立连接的属性(opacity) 。 顺便说一句,拾取线没有什么特别神奇的地方,可以说它仅仅起到自动将连接的属性名称 及其所属合成与图层添加到表达式文本区。你也可以亲自手写表达式,但是这种方式远远 不及
10、拾取线方便准确,特别是当需要编写较复杂的表达式时,拾取线的高效快捷更是体现 的淋漓尽致。 向量、阵列、维数、索引 有时候你会发现通过拾取线创建的表达式看上去好象在重复参 数,例如,如果你将位置参数的拾取线拖动到旋转参数上,你就会得到如下表式: rotation, rotation; 因为位置属性有两个参数(X、Y 坐标)而旋转属性只有一个参数,建立连接关系后,表达 式自动将旋转参数应用两次分别位置属性的 X、Y 坐标参数。 由两个或三个数值来描述属性的参数组叫做向量或阵列,AE 中很多的属性参数是向量式 的,包括位置、轴心点和缩放等属性; 与阵列对应的用单个数值来描述属性的参数叫做标量式参数。
11、 向量与阵列:究竟向量和阵列之间有什么区别呢,你也许会注意到 AE 的帮助文件有时候 互用这两个单词,简单的说向量是既有大小又有方向的数字阵列,其运算结果即要考虑到 大小又要考虑到方向;阵列是一套独立元素的组合,阵列中可以包含任何元素,可以是物 体阵列,词汇阵列或者是混合阵列: ralph=10, this_layer, “bob“; 也许没有人会知道上面的这种阵列会有什么用处,但是它确实是一个正确的阵列,当然在 AE 中我们大部分时间内遇到的是数字阵列(也叫向量) 。所以,在接下来的描述中,当谈 论到通用的概念和操作应用时,我们使用阵列来描述;当涉及到特殊的数字阵列时我们用 向量来描述。 索
12、引:对于阵列来说,你可以使用阵列名加上包含数字的中括号从阵列中提取需要的单一 元素,例如:position0; 这种表达方法叫做索引,注意在阵列中使用索引调用元素时,必须从0开始计数第一个元 素。所以,上面的表达式就返回位置属性向量中的第一个参数x 坐标,那么 position1就返回位置属性中的 Y 坐标,千万不要搞混淆了,在 AE 中虽然所有的调整都 是从1开始的,但是当使用索引时,必须从零开始计数。 建立阵列:如果要建立阵列,可以将数值以逗号分隔开放入中括号中: my_vector=10,20,30;/该表达式的意思是将一个三维数组赋予变量 my_vector,该 数组中包含三个元素分别
13、是10,20,30, 维数 :阵列中的元素个数代表阵列的维数,例如上面的 my_vector 是一个三维数组,位 置属性是一个二维数组或三维数组(转变为三维图层) 。标量式的属性如旋转和不透明度属 于一维数组(准确说单一数字或者是标量数值就是一维向量) 。 需要注意的是诸如位置、属性这样的多维数组或者是自定义的数组变量,不需要将他们的 名字写在方括号中,AE 会将其识别为数组。当要索引阵列或者是描述阵列时,需要使用 方括号。 修改阵列中的一个元素 :可以用如下的方式来书写位置表达式: position0, position1; 将位置阵列中的两个参数分别提出来后,再将他们放入同一个阵列中,看上
14、去与仅仅书写 positon 的结果相同,优点是你可以使用这种结构来修改阵列中的一个元素而不影响另外 元素,例如:top_of_layer=0; anchor_point0, top_of_layer; 在这个表达式中,阵列中的第一个元素是轴心点的 X 坐标值,第二个元素是0 ,如果将该 值赋予轴心点属性,那么轴心点的 X 值将受 AE 的控制调整,而轴心点的 Y 值将始终为 0。 当使用这种结构时要特别注意,如果将图层设置为3d 图层,就需要重新书写表达式,将位 置与轴心点 Z 轴考虑进去。例如,如果仍然使用上面轴心点的例子,但是这次将轴心点所 在的图层设置为3D 图层,AE 会自动将丢失的
15、 Z 轴坐标设置为0,这当然比出现程序错误 要强的多,但是所得到的结果未必是我们需要的,因为表达式将忽略轴心点的 Z 轴坐标的 变化。 再看另外一个例子,假如你将一个图层的位置属性复制到另外一个图层上,并且将该参数 的 Y 轴值减去100: ralph=this_comp.layer(1) ralph.position0, ralph.position1-100; 如果这时将图层设置为3D 图层,你会发现对控制图层的 Z 轴所做的任何操作丝毫不会影 响到受控图层的 Z 轴,因为表达式中没有表明 Z 轴的坐标值,AE 会自动将其设置为0。 参数值范围:当使用表达式中的拾取线来建立参数之间的关系时
16、,AE 会自动纠正由于错误 的维数匹配导致的错误,但是这种纠正之后的表达式并不意味着就是你所需要的,物理错误 是避免了,但是逻辑错误仍然会影响你的创作。 在这里特别强调一下,有时候你需要调整当前参数值以匹配目标参数。例如,在前面的例 子中我们使用图层的旋转属性来控制图层的不透明度属性,你会发现当旋转属性达到100 度时,不透明度属性就达到了上限,但是我们想要的效果是当图层完成一个周期的旋转时 其不透明度回到原来的值,我们就需要调整参数范围以达到我们的需要。 缩放参数范围值的方法很简单,可以利用公式(当前连接参数当前连接参数范围上限 目标连接参数目标连接参数范围上限) ,还是使用上面的例子来说明
17、,我们需要将旋转参 数的范围(0360 )缩放到不透明度参数的范围( 0100) ,所以我们就需要为不透明 度加上表达式: rotation / 360 * 100,从而就达到了我们需要的效果,不透明度在0360度范围内变 化: 用这个简单的小技巧可以完成很多期望的效果。例如,使用一个轮胎的素材作为图层,我 们就可以利用该图层的位置属性来驱动图层的旋转属性,我们只需缩放位置属性来为旋转 属性建立正确的连接表达式,因为轮胎每旋转360度就会移动一个周长的距离,所以我们 应该这样书写表达式: rotation=distance/circumference*360: 插值方法:线性 liner(),
18、平滑 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 当前参数,例如旋转参数,不透明度参数或者是你所选择的其他变量,该参数 必须是一维的,该参数为必选参数。
19、 t_min 当前参数范围的下限,该参数为可选参数,如果参数范围的下限或上限被忽略掉 了,那么 AE 会将参数的范围定义在01之间。 t_max 当前参数范围的上限,该参数为可选参数。 value1 目标参数范围下限,当 tt_min 时,表达式返回该值,该值可以是一维标量也可 以是二维向量,与 value1的维数相同,该参数为 必选参数。 value2 目标参数范围上限,当 tt_max 时,表达式返回该值,该值几可以是一维标量也 可以是二维向量,但是如果该值与 value1 的维数不同, AE 会自动以 value1 值为标准 进行匹配,该参数为必选参数。 通过下面的例子让我们来了解一下该
20、语句的含义: linear(time, 0, 5, 0, 360);通过上面的学习,我们应该将这个语句理解为,时间的变化 范围是0到5,目标参数的范围是0 到360,整个变化过程是线性的。如果将该表达式应用 到图层的旋转属性上,那么你会发现图层在前5秒内完成了一周的旋转。 应用该表达式后,图层在第五秒停止旋转,这就是与我们前面介绍的直接手写公式 time/5*360最大的区别,插值算法自动在当前参数与目标参数之间采样范围极值。 另外一个区别就是你可以设置不同的插值算法:ease(),ease_in() 和 ease_out()。这些 插值算法与同名的关键帧插值算法(通过关键帧助手菜单设置)的作
21、用相同。利用这些插 值算法可以为数值转换计算提供一个更自然的运算过程,从而得到更流畅的变化效果,仅 仅使用前面介绍的手写公式是做不到这一点的。 示例: 滚动栏 现在让我们使用这种简单的方法来快速完成一个例子,我们将制作一个滚动 栏的动画。首先我们需要建立两个图层,一个文本区域图层和一个滚动栏图层。我们要为 文本图层的轴心点加入表达式,因为这样可以保证我们可以操纵图层的位置属性(当图层 滚动时位置属性仍然不会改变) 。 记住一定要在一个方向上控制轴心点以得到正确的滚动效果,在这个例子中我们将对轴心 点做垂直方向的运动以使文本区在合成窗口中上下滚动。为了使滚动的范围最大,也就是 文本区域全部实现滚
22、动,我们将轴心点的 Y 值范围设置为 0到图层的高度,也就是我们的 目标参数值为: value1=0;value2=height; 至于当前参数范围,我们将其设置在合成窗口的高度之间,我们需要在顶部与底部空出几 行以得到更好的效果。假如合成窗口的尺寸为320240,那么就将当前参数范围设置在 25至215之间,当滚动栏在 Y 轴上从25运动到215时,文本区将开始滚动。可以设置: t_min=20 t_max=220 当然,当前参数就是滚动栏的 Y 轴坐标:t=this_comp.layer(“Scroll“).position1 将几条语句综合起来,加以恰当的变量名称,我们就得到了下面的表达
23、式: scroll_y=this_comp.layer(“Scroll“).position1; scrolled_amount=linear(scroll_y, 20, 220, 0, height); 最后我们将 scrolled_amount 的值放到一个二维数组中,让文本图层的轴心点 X 轴坐标 保持不变,最终的表达式为: scroll_y=this_comp.layer(“Scroll“).position1; scrolled_amount=linear(scroll_y, 20, 220, 0, height); anchor_point0, scrolled_amount;/(
24、只为滚动栏 Y 轴的位置属性设置关键帧): 如果将该表达式应用到3D 图层的旋转属性上,就可以制作出三维滚动旋转效果: 缓存参考对象:相当于临时变量 前面我们已经讲解了如何使用拾取线来建立简单的表达式,有时候你不想也不能通过这种方 式来建立表达式。例如,你不可以将拾取线拖动到屏幕中不可见的参数上(图层宽度或者 是持续时间等) 。 在这种情况下,你就需要建立一个缓存参考对象,这要比使用拾取线复杂的多,因为你需 要理解一些 Javascript 的语法,刚接触到这种方法时也许会感到很困难,一旦我们理解了 一些术语后,我们就会感受到建立参考对象的方便之处。 对象:简单的说对象就是一个容器,每一个对象
25、都可以包含其他的对象、属性和方法。 例如,AE 中的一个合成就是一类物体,每一个合成中都可以包含有其他的对象,像图层 或者诸如持续时间和宽度等属性。AE 中的所有元素对于我们来说都是很熟悉的 合成、 图层、不透明度等等,他们或者属于对象或者属于对象包含的物体。 因为对象可以包含其他的对象,所以说对象存在层级结构,位于最高层级上面的对象叫做 全局对象。 全局对象和非全局对象 要标识需要从中提取数据的属性,必须首先标定一个全局对象。 全局对象在 AE 的表达式中不需要作出任何的特定说明具有唯一的指向作用,其他的对象 均隶属于全局对象。要想指向特定的非全局对象,必须首先在其前面加上所在的全局对象 名
26、称。 还没有理解,没关系,我们用街道地址来做一个比喻,如果要邮寄一封信件,仅将收信人 地址写成92 号的话邮递服务部门就会十分迷茫,因 为在全国可能有数十万个92 号的门牌, 而你所说的究竟是哪一个呢?所以说你至少要在地址前面加上省份、城市、地区和街道, 如果你在海外还需要注明国家,至于国家的上一级就没什么说明的意义了任何国家均 在地球上是人人皆知的,那么国家就是全局对象。 因此,在 AE 中,在任何制作前你需要建立一个全局对象,就像你需要在信封上面注明收 信人所在国家的地址一样。AE 中的全局对象包括: 全局对象 返回对象类型 this_layer 普通图层,灯光图层,摄影机图 层 this
27、_comp 合成 comp(“name“) 合成 footage(“name“) 素材 time 数值 value 数值 确定了全局对象后,我们就需要设置属于该对象的次级物体、属性或者是方法,但是你又 怎么知道你所选择的属性或者是方法什么意思呢? 要查阅 AE 用户手册中的表达式部分来 进行参考设置。 首先你需要明确对象的类型,例如,“this_comp“就会返回合成对象,然后你就可以在参考表 格或用户手册中查找该类对象所包含的属性、方法或者是次级物体。所以,设置完全局对 象后,我们可以在当前合成中选择一个特殊图层: this_comp.layer(“Solid 1“) 该表达式返回当前合成中
28、叫做“solid1”的图层,如果我们仅 仅需要一个图层次级对象,那么到此就可以结束了,如果我们还需要该图层的属性或者是 事件就需要在该语句后面加上相应的参数。 让我们再来看一下语句的书写方式,javascript 语法规定全局对象与次级对象之间必须以 点号分割,以说明物体之间的层次关系。 另外,在整条语句中,除了引号中间图层名称之间可以加入空格外,其余地方不允许出现 空格。 如果你仍然感到这个语法十分麻烦,那么你还可以使用拾取线来帮助你,在表达式区域使 用鼠标选中需要物体的参数参考连接的部分使其高亮显示,然后拖动鼠标到需要建立连接 的参数上,AE 将自动插入正确的对象参考连接。 除了我们前面列
29、出的属性外,图层还包括下面的属性和方法: 图层属性或方法 返回值 维数 单位 width 数值 1 像素 height 数值 1 像素 start_time 数值 1 秒 in_point 数值 1 秒 out_point 数值 1 秒 has_video 逻辑 1 逻辑值(真 假) has_audio 逻辑 1 逻辑值(真 假) active 逻辑 1 逻辑值(真 假) audio_active 逻辑 1 逻辑值(真 假) audio_levels 属性 2 左声道 , 右声 分贝 道 index 数值 1 数值 parent 普通图层,灯光图层,摄影 机图层 source 合成货图层 ma
30、sk(index or name) 遮罩 effect(index or name) 效果 这个表格不是十分详细。可以查阅 AE 的用户手册. 这里的表格仅仅证实图层的属性可以 返回给不同对象, 甚至包括其他合成. 例如你可以建立下面的表达式: this_comp.layer(“Nested Comp“).source.layer(“Solid 1“).position 默认对象当前图层 图层参考语句看起来十分烦琐,也不便于记忆,AE 提供了默认的对象以简化最通用的参考 对象:this_layer,如果不设置任何全局对象,AE 会自动理解为针对当前图层,并且所有 的操作都从当前图层开始。这就是
31、你可以只写“opacity“而不必书写“his_layer.opacity“ 的原因。 即使你想选择当前合成中的另外的图层, 你也不能写成这种形式layer(“Layer 1“) 因为 图层不是全局对象他们是属于合成的次级对象, AE 需要知道图层所在的合成. 所以你需 要在图层前面加上合成名字:this_comp.layer(“Layer 1“) 实例应用:在第一部分的最后,我们将使用前面介绍的表达式基础部分的知识来完成一个 简单的小例子。我们将重新使用轮胎的例子,使用移动属性来控制图层的旋转属性。 首先,让我们整理一下制作思路,我们要给图层的旋转属性加上表达式,并在表达式的最 后以一个常量
32、结束,所以首先要给旋转参数加上一个表达式。 接下来,我们需要给图层的位置属性设置关键帧,以位置属性的变化驱动旋转属性的变化, 在我们的例子中,我们仅仅需要轮胎在 X 轴上移动,所以我们只需要:position0 真实的物理世界告诉我们,当轮胎移动一个周长的距离时,它将完成一个周期(360)的旋 转,在开始时我们会为设置计算公式而犯愁,还需要知道,轮胎的尺寸会影响到在一个旋 转周期内其移动的距离,所以我们需要了解轮胎的尺寸,图层的宽度。 假如轮胎的尺寸与图层的尺寸相差无几(在轮胎的周围没有空白的区域) ,我们可以使用图 层宽度来描述轮胎的直径:width; 但是我们不能直接使用图层宽度,我们需要
33、使用图层宽度来计算出轮胎的周长, circumference=width*Math.PI; 如果轮胎的宽度是100个像素,他的周长将会是314个像素, 但是如果我们改变图层缩放属性呢,再使用图层的宽度来计算轮胎的周长所得到的结果就 不会准确,为了得到更准确的计算结果,我们要利用图层 X 轴向的缩放属性来控制轮胎的 周长:circumference=width*( scale0/100)*Math.PI; 我们将图层的 X 轴缩放属性(scale0)除以100是因为缩放属性的返回值是百分比,接 下来我们就需要定义图层在 X 轴向移动的变量,在我们的例子中我们要使图层从 X 轴的零 点开始移动,所
34、以我们使用下面的表达式: distance=position0; 最后我们写出核心表达式:(distance/circumference)*360; 综合起来,我们需要给旋转属性赋予这样的表达式:circumference=width*( scale0 /100)*Math.PI; distance=position0; (distance/circumference)*360 这时再观看动画,会看到轮胎的移动与旋转已经非常的自然了,丝毫没有滑动的痕迹,还 是那句话我们可以使用手动设置关键帧来实现同样的效果,但是如果图层作加速减速运动 时,表达式的优势更是体现的淋漓尽致。 可以将这种方法应用到
35、单独的文字动画中,也可以应用到非正常运动的物体中,得到真实 的效果。 AE 几何学概述 在表达式基础部分的讲解里,我们涉及到的大部分是一些代数的应用,在 AE 的表达式中只 需要应用简单的代数学知识就可以实现很多效果,但是如果在书写表达式的时候融入几何 学知识,那么表达式的高效便捷将体现的更加淋漓尽致。简单的说,几何学就是研究图形 的空间关系的自然科学。在接下来的教程中我们将讲解一些基本的几何学公式和关系函数 以及几何学在 AE 表达式中的应用。 这部分教程结构组织得非常严谨,当你完成这部分教程的学习时,你就能基本掌握几何学 知识的实际应用,例如建立位移属性与角度属性之间的关系,进而生成和谐的
36、运动状态。 矢量包含有自己的属性,矢量既有大小也有方向。每个数字阵列定义一个矢量,数字阵列 就是矢量。 利用表达式制作一个淡入淡出效果,这是一个较常用且简单的效果,但每次都要设置透明 度的四个关键帧动画,还要输入数值。如果多个镜头都要使用淡入淡出就会很麻烦,利用 Sequence Layers 功能也可以,但还是要点几下鼠标,所以不如做一个 Presets 方便。 首先,为了方便我们不使用关键帧来设置动画,因为这样做的话,每次还要调整关键帧3和 4的位置,要知道关键帧记录的是时间轴的位置,而每次使用的素材长度是不同的。所以, 我们使用表达式,让程序去找素材的出点。 第一步,我们利用一个 lin
37、ear(t, tMin, tMax, value1, value2)函数把时间轴上素材的 出点转化为透明度变量。 为透明度添加表达式如下: linear(time,outPoint-1,outPoint, 100, 0);/其中“linear”表示线性变化, “time”是时 间, “outPoint”是素材的出点,该表达式表示素材的透明度在素材出点前一秒到素材出点从 100变化到0,这样就实现了素材的淡出效果。 同样道理,使用: linear(time,inPoint,inPoint+1, 0, 100);/这一个表达式可以使素材实现淡入效果。 淡入淡出 if(time1)军魂之恋爱国论坛以
38、宣传中国军魂,关注边关军人为宗旨,附带弘扬军队革命正气、领略部队军人风采、传播军队军旅文化,学习历史民族文化。服务于现退役军人、军嫂、准军嫂、爱军女孩和向往军营生活的各界人士等交流及讨论。* C4 q, D E L1 : S else 军魂之恋爱国论坛: 5 x- j- 7 k: / 0 y linear(time,outPoint-1,outPoint, 100, 0); if(time1)军魂之恋爱国论坛以宣传中国军魂,关注边关军人为宗旨,附带弘扬军队革命正气、领略部队军人风采、传播军队军旅文化,学习历史民族文化。服务于现退役军人、军嫂、准军嫂、爱军女孩和向往军营生活的各界人士等交流及讨论。* C4 q, D E L1 : S else 军魂之恋爱国论坛: 5 x- j- 7 k: / 0 y linear(time,outPoint-1,outPoint, 100, 0);