AE表达式:回弹

  • 经验类型经验/观点原作者:Steven Harley

  • 经验属性自译外文
  • 经验版权不使用原创授权
37467 33 155 2014-12-20

在UI动效制作中,设计者会经常使用到AE。利用AE组织界面流程,制作动态原型,可以极大的加速我们的工作流程。

AE具备一个强大的功能,那就是表达式,通过表达式,建立图层属性与关键帧的相关关系,无需手动K帧,便可以制作出动画效果。本文将讲解表达式基础,表达式的含义,并传授一些调整表达式的方法,以满足你的工作需求。

那么,什么是表达式呢?

对于经常阅读Thougtbot的读者来说,他们可能会对表达式非常熟悉。因为大部分Thoughtbot的读者对于web上使用的脚本非常熟悉,这些脚本除了能够演化成应用本身,还可以定义元素的属性和行为。Adobe基于JavaScript构建了表达式,因此对于JS使用者来说,他们能很快上手表达式。当然,在有些情况下,制作原型动效不一定会用到表达式,但是我发现,对于一些可复用效果,比如说惯性和弹性,使用表达式就非常的高效。

对于新手来说,他们往往不知道哪些表达式才能达成他们想要的效果。实际上,有些表达式早就写好了等着各位去复用。Dan Ebberts对此贡献良多,在他的网站 motionscript.com 中,他详细的解析了表达式,并讲述了表达式高效使用的方法,非常适合AE进阶者。


今天,我们就来创建一个比较流行的惯性表达式。通过在正弦函数中插入 振幅(amplitude),振频(frequency),decay(衰减)等变量,让运动数值稍微超出最终目标值,然后再通过振动返回最终目标值。你只需复制粘贴下面的代码,编辑上述变量,便可达成此动效。


nearestKeyIndex = 0;


if (numKeys > 0){

  nearestKeyIndex = nearestKey(time).index;

  if (key(nearestKeyIndex).time > time){

    nearestKeyIndex--;

  }

}


if (nearestKeyIndex == 0) {

  currentTime = 0;

} else {

  currentTime = time - key(nearestKeyIndex).time;

}


if (nearestKeyIndex > 0 && currentTime < 1) {

  calculatedVelocity = velocityAtTime(key(nearestKeyIndex).time - thisComp.frameDuration / 10);

  amplitude = 0.1;

  frequency = 2.0;

  decay = 4.0;

  value + calculatedVelocity * amplitude * Math.sin(frequency * currentTime * 2 * Math.PI) / Math.exp(decay * currentTime);

} else {

  value;

}


在AE中添加表达式


现在,建立一个位置属性动画,K 2个帧就好。创建完关键帧后,右键单击第二个关键帧,关键帧辅助中,选择缓动。当然,也可以不选择缓动,但是缓动可以减缓最后下降的速度,让效果看起来更好。

下一步,按住'alt'左击位置属性旁边的秒表开启表达式,然后将表达式复制进去。

效果如下

如果运动感不够,加点运动模糊,能够让动画看起来更流畅。

技法掌握了,那么可以试着调节变量。

减少振频  增加衰变  减少振幅 增加振频  减少衰变 增加振幅


通过表达式,只需2个关键帧就可以打造栩栩如生的动画效果。各位可以举一反三,为其他属性添加此回弹效果。

全部评论:33

  • 2018-07-27 10:58

    @Zet.: 这个反转是怎么做的

  • 斯拜兽

    2018-03-07 14:49

    请问大神们,里面的震频、衰变和振幅分别是什么含义?

  • 遐了个想

    2017-10-25 17:00

    请问在使用这个表达式后,输出给开发该如何说明?

  • Zet.

    2017-09-29 02:20

    楼主,萌新可以问一下你那个翻转是怎么做的吗?

  • 苏希子

    2017-07-14 07:43

    表达式复制进去是错误的

  • zyp

    2016-07-01 17:49

    @小麻花Ging: 时间标尺 不要在最后一帧结束,拖长一点

  • 三分酱

    2016-04-22 23:46

    @Tryinggt: https://dribbble.com/这上面那个shots下有个animated GIFs,点开全是动效图。文章我就不知道在哪看了。

  • Tryinggt

    2016-04-20 14:32

    @三分酱: 那自译的这些关于动效的文章都是在哪里看到的呀?能给个这种网站的链接吗?谢谢您!

  • 三分酱

    2016-04-19 13:57

    @Tryinggt: dribble上也有很多MG大神发的作品。

  • Tryinggt

    2016-03-24 17:47

    博主~请问您都从哪里看这些国外的动效的文章呀?求普及动效设计师常去的国外网站呀~谢谢!

  • TrinaDream

    2016-01-22 14:53

    @小麻花Ging: 最后一帧的速度不能为0,最后速度越大,反弹越厉害

  • 衔街R29

    2015-07-06 19:41

    已用,感谢lz,效果很棒

  • 小麻花Ging

    2015-07-01 11:47

    为什么表达式复制进去 没有效果呢

  • MartinRGB

    2015-06-02 18:37

    @J_King: ^_^,编辑器没有代码功能悲剧了,我这个是来自thoughtbot的博文。。。

  • J_King

    2015-06-02 16:31

    刚好也想分享这个专题,也是在motionscript.com上面看到的。我看你的表达式和作者最终完善后的不太一样,为什么不直接复用作者完善好的表达式呢?

  • samdrew

    2015-05-26 10:36

    我也没效果。。不报错,从其他文本框复制过来的,还是不行

  • 插画师茉茉卡MMOUKA

    2015-05-10 18:39

    为什么我输入content("Ellipse 1")transform.position显示错误?T^T

  • kipoo

    2015-02-15 11:05

    求问大神,振频和振幅能理解,衰变指的是什么吗

  • suerb

    2015-01-05 16:28

    没效果……表达式的插入,没规定是哪一个关键帧的对不?

  • iconsbox

    2014-12-29 10:59

    @MartinRGB: OK,这个主要还是得看服务器能不能承受,以及访问流量等因素。

  • MartinRGB

    2014-12-27 20:09

    @彩云Sky: 哪位

  • 彩云Sky

    2014-12-27 19:53

    @Asura_素落: 在这里居然又见到你,哈哈。

  • Asura_素落

    2014-12-27 15:14

    最近也想学习AE啊~~各种找资料~!

  • Kiriya

    2014-12-27 13:20

    @iconsbox: 期待!专业博客维护的时候很多里面都有代码..直接弄过来都怪怪的

  • 弼马温

    2014-12-26 17:15

    真的醉死了,看来AE看上去的动态效果没有那么简单,还涉及到代码,0基础自学AE难喽,请问主楼怎么学的AE,我们这些新手又该如何去学习,还请指导……

  • MartinRGB

    2014-12-26 16:34

    @iconsbox: 再有就是能添加视频就好了,不必上传到youku,限制在5m以内,不知容量和流量够不够,好多文章里面的动态现在不用gif了,都是5m以下的MP4

  • iconsbox

    2014-12-26 15:25

    争取在发布经验的文本框里加入“引用代码”的地方。

  • MartinRGB

    2014-12-26 11:04

    @蛋卷: 谢卷哥,哈哈

  • 蛋卷

    2014-12-26 10:42

    表达式没问题,只是直接黏贴是有问题的,先把代码复制到记事本中或者任意输入框里然后在复制粘贴到表达式中就行了,很赞~~支持楼主~~~

  • 彩云Sky

    2014-12-25 09:53

    @MartinRGB: 我去掉了之间的回车带来的问号,不报错了。但是依然没有效果哦。不知道什么问题,求解答。

  • 更多

更多作品

发表评论

取消

点击右上角
分享给朋友吧

分享到

取消

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

投票