恭喜你成为UI中国推荐设计师 (详情)

您的意见是我们 UI 中国进步的动力!
点击立即反馈按钮,发表您的意见!
立即反馈
QQ群反馈
您也可以加入UI中国官方反馈群进行反馈!
群号:302892100
备注:反馈问题后@管理员能让我们及时了解您的意见

【新像素】详解AE常用的表达式

原创文章 分类: 教程 版权: 举报
605 35 15 1
2020-06-19
7.3

很多童鞋在学习AE的时候会觉得表达式很难,不知道如何使用。今天像素妹给大家分享一些常用的表达式用法,揭开AE表达式神秘的面纱,为你的动效设计加速。




表达式是AE内部基于Java Script语言开发的编辑工具,能够通过简洁的代码代替复杂的关键帧对于动画属性的控制,从而提高我们的工作效率,实现出更加流畅、真实的效果。



AE里可以打关键帧的属性前面都会有码表,我们按着Alt键+鼠标左键点击码表,就可以调出来属性的表达式输入框,接下来在里面输入想要添加的表达式就可以了。




1、time时间表达式

time表达式的写法是time*n,n表示单位时间(每秒)内,属性参数的变化量。如给图层的旋转属性添加表达式:time*90,则表示该图层每秒钟旋转90度,并且旋转会一直持续下去。


了解time表达式后,我们可以尝试着做一个时钟,画出外轮廓以及秒针、分针。将秒针图层旋转属性添加表达式time*360,分针图层旋转属性添加表达式time*6(数值可以自定义,数值大小决定了旋转的快慢)。



我们来看一下效果:



2、wiggle抖动表达式

wiggle是很常用的表达式,对物体实现随机抖动。写法是wiggle(x,y),x表示每秒钟抖动的频率,y表示抖动的幅度,即每次抖动所偏移的量。

如新建一个文本图层,调出位置属性P,给位置属性添加表达式wiggle(7,40),表示每秒抖动7次,每次抖动40个像素单位。


除了可以给位置属性添加wiggle表达式以外,还可以给别的属性添加,如缩放、旋转、不透明度等。

如果希望在单个轴向上进行抖动,我们就需要修改一下wiggle表达式的写法。举个例子,想要将动画限制在x轴抖动,抖动频率3,抖动幅度90,那么表达式为[wiggle(3,90)[0],value[1]] 。(在这里0对应x轴,1对应y轴)



3、loopOut循环表达式

loopOut表达式可以创建循环的动画效果,我们只需要做动画的开始帧、结束帧,添加表达式后动画就会一直循环运动,不用再重复打关键帧了。

基础写法是loopOut()


接下来我们使用loopOut表达式制作一个音量播放的效果,巩固一下。

我们在AE中绘制一个矩形,将矩形的锚点调整至底部中心位置,这样就可以通过缩放属性来控制单向的长短变化。调出缩放S,把约束比例锁链去掉,然后根据矩形的高度变化来打关键帧(结束帧与开始帧属性相同)。



按Alt键+左键点击缩放码表,表达式输入框内只需要写loopOut()即可实现循环效果;



用同样的方式做出其它矩形,我们来看一下效果:

进阶一些的用法,是在loopOut()括号里面写内容,如下:

loopOut(type = "cycle", numKeyframes = 0)

我们也可以在表达式语言菜单里面选择,点击表达式右侧的三角箭头——Property中进行调用。



loopOut循环表达式的类型,最常用的是“cycle”,指的是在动画的最后一个关键帧结束,然后从第一个关键帧开始循环播放。

想要做动画播放完再反向的来回循环运动,可以将括号里的cycle替换成pingpong


若想在当前动画基础上叠加循环运动,需要将括号里的cycle替换成offset


4、惯性弹跳表达式

生活中我们见过太多自由落体反弹的例子,比如篮球、乒乓球等,我们可以通过使用表达式来代替复杂的手动k帧。接下来以一个案例的形式,给大家分享一下惯性弹跳表达式Bounce,让我们可以轻而易举地实现弹跳动画。


首先我们绘制地平线,再画一个椭圆,对椭圆小球的位置属性做垂直方向的运动。



将这两个关键帧变成缓动,进入图表编辑器中调节运动曲线,保证结束帧的速度不为0(因为结束帧速度为0,添加的惯性弹跳表达式会失去效果)



接下来是重点了,Keyframe Bounce Back表达式:

e = .7;

g = 5000;

nMax = 9;


n = 0;

if (numKeys > 0){

  n = nearestKey(time).index;

  if (key(n).time > time) n--;

}

if (n > 0){

  t = time - key(n).time;

  v = -velocityAtTime(key(n).time - .001)*e;

  vl = length(v);

  if (value instanceof Array){

    vu = (vl > 0) ? normalize(v) : [0,0,0];

  }else{

    vu = (v < 0) ? -1 : 1;

  }

  tCur = 0;

  segDur = 2*vl/g;

  tNext = segDur;

  nb = 1; // number of bounces

  while (tNext < t && nb <= nMax){

    vl *= e;

    segDur *= e;

    tCur = tNext;

    tNext += segDur;

    nb++

  }

  if(nb <= nMax){

    delta = t - tCur;

    value +  vu*delta*(vl - g*delta/2);

  }else{

    value

  }

}else

  value


你没有看错,这么长都是惯性弹跳表达式的内容。表达式开头的e是弹性,g表示重力,nMax表示最大跳动次数。我们将这一大段表达式进行复制,按Alt键点击位置属性码表,将表达式粘贴到表达式输入框内,弹跳的效果就做好了~(我们可以适当调节结束帧的速度以及重力等参数,会看到不一样的效果哦)




5、random随机表达式

random表达式,可以实现随机变化的效果。写法是random(min,max),min表示最小值,max表示最大值,添加表达式后会在最小值与最大值之间随机取数值进行变化(很多人容易把random与wiggle搞混,wiggle是控制两个不同属性参数的变化)。


比如我们给矩形图层的不透明度属性添加表达式,random(50,100),图层不透明度的值会在50%~100%之间随机变化。


我们也可以给文本添加表达式,做出数字随机出现的效果。选中文本图层,找到“源文本”属性,按Alt键单击码表,输入random(5,20),表示文本会在5~20之间,随机生成数值(这时生成的数值是带有很长的小数点数字)。


为了在实际工作中更加实用,我们想要得到随机生成的整数数字,就需要使用取整表达式Math.round() ,将需要取整数的表达式放在括号内就可以了。如刚才的案例,表达式需要写为Math.round(random(5,20)),这样就可以实现随机的整数数值变化了。



6、index图层编号表达式

index指的是AE图层前面的编号,使用这个表达式可以非常便捷的做出有规律的变化效果。


先举个简单的例子,在AE中制作一个小太阳:

绘制一个椭圆和圆角矩形,将圆角矩形锚点调整至圆的中心,图中红框所示就是图层的编号。



选中圆角矩形图层,调出旋转属性R,按Alt键点击码表,表达式输入框中输入index*45



复制多个圆角矩形图层,你会发现图层边复制边旋转,转了一圈。在这个例子中,给第一个图层旋转属性添加表达式index*45,index此时为1,表示图层旋转了45度,那么在复制图层的时候,第二个图层(图层编号2)的角度就变成了90度,以此类推。



接下来像素妹给大家分享一个很有意思的index表达式拓展内容:在AE中制作3D展示效果



首先我们在AE合成中导入一张APP效果图,打开3D图层属性。新建摄像机,调节摄像机的参数,将图层顺序放在效果图的下面。



调出效果图图层的位置属性,点击位置——右键——单独尺寸,这样就可以把x、y、z位置属性分离。



对z位置属性添加表达式:index*1,这样在进行每次复制图层的时候,会在z轴方向往后移动1px,从而营造出三维厚度效果。



选中效果图图层,菜单栏——效果——颜色校正——曝光度,添加曝光效果。



在效果控件面板,降低曝光度的参数,如-0.6,使整体图片变暗。



接下来就是重头戏了,我们将效果图图层选中,复制多个,然后将第一个图层(图层编号1)的曝光度参数调回0。神奇的3D展示效果就出现了,是不是很简单方便呢?ヾ(´∀`o)




7、延迟表达式

延迟表达式在动效设计中是用的比较多的,想要做出运动物体之间延迟的效果,利用错帧虽然可以实现,只不过想要后续修改的话会比较麻烦,那么使用表达式来做是一个非常便捷的方法。



首先新建合成,绘制小球,对位置属性做动画(0s左侧,1s右侧,2s左侧)



接下来我们认识一下延迟表达式valueAtTime(t),这个表达式可以通过括号内的参数对图层效果作用的时间产生影响,实现延迟的效果。可以直接用Alt键单击位置属性码表,然后在表达式输入框中输入,也可以在表达式语言菜单中进行调用。



我们可以结合前面讲的index表达式,配合着做延迟效果。按Alt键单击位置属性码表后,在表达式输入框中的内容最右侧输入一个点.,然后输入表达式valueAtTime(time-(index-1)*0.08)。这个表达式的意思是,第一个图层动画效果不延迟,第二个图层相较于第一个图层延迟0.08s,以此类推(这里的延迟时间0.08可以根据个人需要调整)。



如果想要让图层之间有不透明度的变化,可以手动k帧,也可以针对于不透明度属性,添加表达式:

opacityFactor = .75;

Math.pow(opacityFactor,index - 1)*100



将图层复制多个,延迟的效果就做好啦,非常的好用~



除了位置属性可以添加延迟表达式,其它属性也可以,如缩放、旋转、不透明度等,我们可以发挥自己的想象力,做出很多有意思的效果。



8、弹性表达式

在动效中加入弹性效果看起来会更富有趣味性,不过在AE里手动k帧简直是要了老命的体力活,而且效果不一定好,在这里给大家介绍一下弹性表达式:

amp = .1;

freq = 2.0;

decay = 2.0;

n = 0;

if (numKeys > 0){

n = nearestKey(time).index;

if (key(n).time > time){n--;}

}

if (n == 0){ t = 0;}

else{t = time - key(n).time;}

if (n > 0){

v = velocityAtTime(key(n).time - thisComp.frameDuration/10);

value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);

 }

else{value}



首先我们绘制一个圆角矩形,将大小里的宽度、高度设置为一致,圆度调大,这样看起来就是一个圆形了。对大小、圆度属性打关键帧做出基础动画,为了视觉效果更自然,可以将大小变化的关键帧变为缓动(要注意,缓动的结束帧速度不能为0,不然弹性表达式不起作用)。



按Alt键单击大小属性码表,将弹性表达式粘贴至表达式输入框中,效果就出来啦,真的是非常友好~(弹性表达式里的amp表示振幅,freq表示频率,decay表示衰减,我们可以适当修改参数来看一下不同的效果)




最后妹儿给大家讲解一下弹性表达式与延迟表达式的综合使用,我们在前面学习到了延迟表达式的基础用法,那么如何将两个不同表达式结合呢?接下来给大家用一个简单的案例来说明:



我们在AE中绘制一个小球,调出位置属性,选中位置——右键——单独尺寸,将位置属性分离为x位置、y位置两个独立的属性。将小球进行复制,把复制的小球图层顺序放在下方。



然后对小球1(图层编号1)的x位置打关键帧,做水平方向的位移动画。选中关键帧变成缓动,同样需要注意的是结束帧的速度不能为0,需要在图表编辑器中进行调节运动曲线。按着Alt键单击小球1的x位置属性码表,将弹性表达式粘贴在表达式输入框中。(根据个人需要可以适当调节表达式参数)



这时候我们发现小球2的y位置是与小球1一致的,我们想要让它们垂直方向数值不同,可以按着Alt键单击小球2的y位置码表,在表达式输入框内容的后面写:+100*(index-1)

表示当前小球2(图层编号2)的垂直方向会增加100,也是考虑到后期会复制图层,所以直接采用了表达式的方式(你们应该知道我不会手动k帧的对吧o( ̄ε ̄*))



接下来难点来了,我们按Alt键单击小球2的x位置码表,然后拖拽表达式关联器(螺旋图标)到小球1的x位置上。这时候我们发现小球2的x位置表达式输入框里的内容就有变化了,变成了与小球1有关(此时已经具备了弹性表达式效果)



我们想要做出延迟的效果,就直接在小球2的x位置表达式输入框内容的后面输入.valueAtTime(time-(index-1)*0.05)



选中小球2图层,复制两层,最终的效果就完成了~是不是很简单呢?




以上这些表达式都是一些比较基础好记的,大家是不是已经学会了呢?当然并不是任何时候都要使用表达式,而是要根据不同的效果来选择,我们最终的目的是要实现出想表达的效果。


妹儿今天的这篇文章只是起到了抛砖引玉,最重要的是要打开思维,多练多思考,慢慢的就会发现AE表达式其实没有那么可怕。


感谢大家的观看哦,我们下期再见~(๑•̀ㅂ•́)و✧


Powered by Froala Editor

新像素教育

2019全日制UI训练营名额预约中 官网:uixxs.com

2372粉丝/7关注

活雷锋小有名气原创超人小有见解一鸣惊人
新像素最近毕业班学员作品最近学员作品展示
1
浪pi

舒服了,一个文科生学了这么多表达式,脑子要爆了,感谢UP主

精彩!

新像素教育

新像素教育

2019全日制UI训练营名额预约中 官网:uixxs.com

活雷锋小有名气原创超人小有见解一鸣惊人

你确定要举报【新像素】详解AE常用的表达式

如果查出恶意举报,十天内禁止提交任何举报申请。

0/200

上传证据: 超过10M的附件请使用网盘地址

点击上传附件

对谁可见:

全部设计师
  • 全部设计师
  • 推荐设计师和认证设计师

您确认要推荐?

该作品发布时间:2020年06月19日

评分

完整度

启发性

勤奋性

排版布局

推荐心得

建议20-200字以内

0/200

扫描二维码
去手机端查看海报

每人每天仅限5票,快给你心仪的作品鼓励的一票。

投票

账号或密码错误,请重新输入

账号或密码错误,请重新输入

登录

账号或密码错误

发送验证码 120s 验证码错误

登录
//

京ICP备14007358号-1 / 京公网安备11010802014104号 / Powered by 2008-2020 UI.CN