常用AE表达式解析

杭州/设计爱好者/361天前/195浏览
常用AE表达式解析
首先什么是表达式呢?
表达式就是AE内部基于JavaScript编程语言开发的编辑工具,是一种用于控制动画和效果的脚本语言。你可以通过表达式来实现更复杂的动画,简化关键帧的使用,或者使图层之间的关系更加动态。表达式使用JavaScript作为基础,可以做很多事情。
比如:
1.自动化动画:通过编写表达式,你可以使某个参数根据其他参数变化,从而自动化动画过程。
2.创建周期性运动:比如使对象沿着正弦波曲线运动。
3.链接图层:可以通过表达式链接一个图层的属性到另一个图层,使得两个图层之间可以共享控制。
4.生成随机性:可以创建一些变化不定的效果,使动画看起来更自然。
表达式大部分情况下是可以更节约时间,提高工作效率的。
表达式工具
A.表达式开关B.表达式图表C.表达式关联器D.表达式语言菜单
常用AE表达式解析
Collect
由于AE里不同的属性的参数不同,常用的我们可以分为:数值(旋转/不透明度)、数组(位置/缩放)、布尔值(true代表“真”、false代表“假”/0代表“假”、1代表“真”)这三种形式来进行书写表达式。对于表达式AE也有很多内置的函数命令,直接可以在表达式语言菜单里面进行调用。
1.   无限旋转
time*360
原理:
time表示时间,以秒为单位,time*n =时间(秒数)*n (若应用于旋转属性,则n表示角度)
360,也就是每秒旋转一圈,数值也可以根据自己需求进行调整。
它在没有 k 关键帧的情况下旋转起来了。
常用AE表达式解析
Collect
常用AE表达式解析
Collect
2.路径循环
前面介绍的这个循环运动,它不肯作用在路径上,咋办!
那就……给路径换个表达式吧。
valueAtTime(time%key(numKeys).time)
常用AE表达式解析
Collect
3.
随机循环(对随机效果再进行循环)
 
freq = 1; // 频率
amp = 110; // 幅度
loopTime = 3; // 循环时间
t = time % loopTime;
wiggle1 = wiggle(freq, amp, 1, 0.5, t);
wiggle2 = wiggle(freq, amp, 1, 0.5, t - loopTime);
linear(t, 0, loopTime, wiggle1, wiggle2)
 
只要给小球的「位置」属性粘贴上这个表达式,就可以让它在有限的时间里随机循环抖动下去了。
常用AE表达式解析
Collect
4.抖动/摆动表达式
wiggle(freq, amp, octaves = 1, amp_mult = 0.5, t = time)
原理:
freq=频率(设置每秒抖动的频率);amp=振幅(每次抖动的幅度);octaves=振幅幅度(在每次振幅的基础上还会进行一定的震幅幅度,很少用);amp_mult=频率倍频(默认数值即可,数值越接近0,细节越少;越接近1,细节越多);t=持续时间(抖动时间为合成时间,一般无需修改);一般只写前两个数值即可。
常用AE表达式解析
Collect
常用AE表达式解析
Collect
5.弹性表达式
原理:
复制粘贴表达式使用就可以,amp表示振幅,freq表示频率,decay表示衰减
举例:
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);
amp = .03;
freq = 2.5;
decay = 4.0;
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{value;}
注意:
motion2脚本也带此功能,方法不唯一。
常用AE表达式解析
Collect
6.运动拖尾
原理:
delay表示要延迟的帧数
举例:
为位置属性添加表达式
 
delay = 0.5;
d = delay*thisComp.frameDuration*(index - 1);
thisComp.layer(1).position.valueAtTime(time - d)
 
如想要实现不透明度拖尾需为不透明度属性添加表达式
opacityFactor =.80;
Math.pow(opacityFactor,index - 1)*100
(调整好一个图层后复制多个)
常用AE表达式解析
Collect
常用AE表达式解析
Collect
7.loopOut表达式(循环表达式)
原理:
loopOut(type="类型",numkeyframes=0)对一组动作进行循环loopOut(type="pingpong",numkeyframes=0)是类似像乒乓球一样的来回循环;
loopOut(type="cycle",numkeyframes=0)是周而复始的循环;
loopOut(type="continue")延续属性变化的最后速度,
loopOut(type="offset",numkeyframes=0)是重复指定的时间段进行循环;
numkeyframes=0是循环的次数,0为无限循环,1是最后两个关键帧无限循环,2是最后三个关键
常用AE表达式解析
Collect
8.linear表达式(线性表达式)
原理:
 
linear(t, tMin, tMax, value1, value2)
表示
linear(time, 开始变化的时间, 结束变化的时间, 开始变化时的数值, 结束变化的数值);
linear(t, value1, value2)
 
表示当time在0到1之间时,从value1变化到value2;
ease(t, tMin, tMax, value1, value2)的含义与linear一样,
区别是在tMin和tMax点处,进行缓入缓出,使数据更加平滑;
easeIn(t, tMin, tMax, value1, value2)与linear的含义一样,
区别是在tMin处,进行缓入,使数据更加平滑;
easeOut(t, tMin, tMax, value1, value2)与linear的含义一样,
区别是在tMax点处,进行缓出,使数据更加平滑
举例:
见下图均以(time,0,2,382,1500)为例,
若为数字的源文本属性添加此表达式可以制作出倒计时的效果n=linear(time, 0, 2, 2, 0)表示从0-2秒数字从2到0,希望显示指定2位小数时间表达式time.toFixed(2);
注意事项:
倒计时的用法比较常用,整数M要大写
常用AE表达式解析
Collect
常用AE表达式解析
Collect
9. index表达式(索引表达式)
原理
:为每间隔多少数值来产生多少变化
举例
:若为图层1的旋转属性添加表达式index*15 ,则第一个图层会旋转15度,之后按Ctrl+D去复制多个图层时,第2个图层将旋转15度,以此类推;
常用AE表达式解析
Collect
10. .random表达式(随机表达式)
原理:
random(x,y)在数值x到y之间随机进行抽取,最小值为x,最大值为y
举例
:若为数字源文本添加表达式random(20),则数据会随机改变,最大值不会超过20;
若为数字源文本添加表达式random(10,100),则数据会在10<数值<100之间随机改变;
若为数字源文本添加表达式seedRandom(5, timeless = false)
random(50),则数据会在50以内随机改变(前面的5是种子数,如一张画面中需要多个相同区间的数值做随机变化,就要为他们添加不同的种子数,防止两者随机变化雷同),若希望数字随机变化为整数则应添加表达式为Math.round(random(2,50)),表示在2和50之间随机改变无小数
注意事项
:随机表达式不仅局限于数据上的使用,其他属性也可以应用,若数值为整数Math的M要大写
常用AE表达式解析
Collect
常用AE表达式解析
Collect
11. 挤压与伸展
原理
:spd表示挤压拉伸的速度,maxDev表示挤压拉伸的大小,decay表示衰减
举例
:
spd =20;maxDev =10;
decay = 1;
t = time - inPoint;
offset = maxDev*Math.sin(t*spd)/Math.exp(t*decay);
scaleX = scale[0] + offset;scaleY = scale[1] - offset;
[scaleX,scaleY]
常用AE表达式解析
Collect
12. 小球回弹
e =0.7;//弹力
g =1000;//重力
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
看起来好复杂的一个表达式,没关系,只要键盘上有 c 和 v 就可以了。先让小球做一个落地的动效:
常用AE表达式解析
Collect
13. 镜头晃动
在位置属性上粘贴表达式
x=0;
y=Math.sin(time*2)*10
value+[x,y]
*表达式所代表的含义是,维持x坐标不变,Y坐标以(sin时间 2)的10倍像素进行移动。
我们知道y=sin x函数的值的范围是[-1,1],因此表达式所带来的结果则是随着时间推移,图层的y轴会在相对原始位置的±10的范围内起伏。
在实际应用中,只需要对括号后面的数值做相应增减,就可以控制晃动的幅度。
在旋转属性上粘贴表达式
Math.cos(time*2)
 
 
14. 文本代码
StartNumber=1;
EndNumber=1000;
StartTime=1;
EndTime=3;
t=linear(time,StartTime,EndTime,StartNumber,EndNumber);
Math.floor(t)
上面四行可以修改,依次是:
起始数字
结束数字
起始时间
结束时间
表达式的意思是:
时间从1秒到3秒的时候,数字从1增长到1000.
 
StartTime=1;
StartNum=50;
EndNum=88;
PersecondNum=20;
if (time<StartTime){x=StartNum}
if (time>=StartTime){x=StartNum+PersecondNum*(time-StartTime)};
if(x>EndNum){x=EndNum};
Math.floor(x)
前面5行都是参数。依次是:
起始时间
起始数字
结束数字
每秒增量
表达式的意思是:
从第一秒开始,数字从50开始增加,每秒增加20,直到88,之后不再增加。
4
Report
|
4
Share
相关推荐
评论
in to comment
Add emoji
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
推荐素材
You may like
Segway E3 Pro|Own Your City
Homepage recommendation
相关收藏夹
表达式
表达式
表达式
表达式
作品收藏夹
ip形象设计+表情包
ip形象设计+表情包
ip形象设计+表情包
ip形象设计+表情包
精选收藏夹
作品收藏夹
企业展厅/文化墙 参考
企业展厅/文化墙 参考
企业展厅/文化墙 参考
企业展厅/文化墙 参考
精选收藏夹
作品收藏夹
小家电
小家电
小家电
小家电
精选收藏夹
作品收藏夹
企业展厅
企业展厅
企业展厅
企业展厅
精选收藏夹
作品收藏夹
IP形象及IP内容
IP形象及IP内容
IP形象及IP内容
IP形象及IP内容
精选收藏夹
作品收藏夹
大家都在看
Log in