AE弹性表达式——让动画更生动

AE弹性表达式

弹性表达式,Bounce 和 Overshoot!利用这个两个表达式你可以轻而易举地实现各种弹性动画,如抖动、弹跳动画等。是的,你没听错,只要998个赞,你就能轻松获得随意加弹性Buff!赶快拿起你的鼠标点赞吧!

表达式的是国外大神写出来的,感谢大神的分享,我们只能膜拜了!而且作者非常无私的贴出了两个(Bounce & Overshoot)可以直接进行关键帧的表达式,再次膜拜(室友问我为什么跪着打字)。后面我会提到怎么去快速理解和掌握这个弹性两个表达式。

首先我们先来了解一下什么是Bounce 和 Overshoot吧!

Bounce 效果(重力效果)

Overshoot 效果(弹性效果)

我可以简单将:

·Bounce 理解为“反弹、类似重力作用”,如 皮球落地反弹的效果;

·Overshoot(过冲、夸张的)理解为“抖动”,如 果冻抖动的效果。

说了这么多,我们来看表达式的真容吧!

Overshoot(弹性表达式–加上后你的效果就是Q弹Q弹的)

freq = 3;

decay = 5;

n = 0;

if (numKeys > 0){

n = nearestKey(time).index;

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

}

if (n > 0){

t = time - key(n).time;

amp = velocityAtTime(key(n).time - .001);

w = freq*Math.PI*2;

value + amp*(Math.sin(t*w)/Math.exp(decay*t)/w);

}else

value

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

AE如何使用表达式

第一步,将上面两套表达式ctrl+c复制到你的笔记中,方便你的随时随地的调用它。

看到这步,恭喜你!你已经学会了80%了。

下面我将拿用的最多的弹性效果来举例吧。

step 1:为要做动画的物体打关键帧

(位置移动,缩放,透明度都行,我们以位移为例)

未加表达式的匀速运动效果(是不是很生硬):

step 2:复制弹性表达式

freq = 3;

decay = 5;

n = 0;

if (numKeys > 0){

n = nearestKey(time).index;

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

}

if (n > 0){

t = time - key(n).time;

amp = velocityAtTime(key(n).time - .001);

w = freq*Math.PI*2;

value + amp*(Math.sin(t*w)/Math.exp(decay*t)/w);

}else

value

step 3:按住ALT键点击关键帧码表,把表达式复制进去。大功告成!

学习更多干货特效技能,关注VX公众号:光影7号

你可能感兴趣的:(AE弹性表达式——让动画更生动)