简单AE-知识表达式技巧

工作·AE · 2023-09-19

简单AE-知识表达式技巧

表达式的简单应用

  • 其实也就是简单的绑定以及加减乘除,例如想要做个围成环的形状,就可以给repeater的旋转添加表达式,360/copies,这样所有复制出来的图形刚好会围成一个环,要注意copies在调整时不能滑到0,不然会报错,为0的情况其实也可以写,但是限于便利性通常我只写到这。
  • 类似的还有加减法,例子太多就不举了,只要知道表达式里猪尾巴的用法跟基本的格式,一般都能顺利调戏。

posterizeTime(6)

改变效果的速度,将动画的速度改成每秒6帧数

1.slider表达式的运用

通过expression control中的 slider控制 一个定值变化 假如控制变化的随机位移然后让其停止 slider=effects("SliderControl")("Slider") 然后对slider做函数运算 例如随机函数

wiggle(8,slider)这样就可以控制表达式。也可以控制摄像机镜头的调整。

2.wiggle的运用---------------

假如在做随机函数的控制时 wiggle(5,40)[0]

中括号里面的数值0表示---XYZ在AE中定义的是 X轴用0表示 Y用1表示 Z用2表示。 5是每秒抖动5次,40是每次抖动40个像素。

通常和摄像机的position(位移) 和 point of interest(聚焦点)一起使用,对摄像机的镜头进行调整。

抖动表达式还可以和mask的移动,人偶工具的节点进行抖动的设置。

wiggle(频率,振幅)

a=wiggle(3,50)[0]; //控制x方向的抖动

b=wiggle(0,0)[1]; //控制y方向的抖动

​​image​​

image

wiggle复制之后,每个图层抖动不一致:可以添加seedrandom随机粒子同步,例如;

seedRandom(6,false);
wiggle(50,50);

3.smooth表达式的运用

平滑表达式,这是可以使素材进行平滑效果的表达式

smooth(),括号里面的默认值是0.2和5.就是smooth(0.2,5) 0.2表示--每多少秒进行平滑。5表示--采样率,采样率越高越平滑。 平滑表达式在跟踪素材时会常常用到。

4.random表达式的运用: 随机表达式random()

random(1,10)是在1到10之间进行随机值的抽取,随机抽取的最小值是1,最大值是10 [layerStyle.gradientOverlay.effect[0],random(5,15)]

这句表达式的意思是在layer的gradientOverlay的第一个数值不改变,effect[0]就是代表gradientOverlay的x值,

effect[1]是第二个值,即是y值。在这里 x值不变,y值是random(5,15)

5.loopOut表达式的运用: 循环表达式

基本格式:loopOut(type="类型",numkeyframes=0)

loopOut(type="pingpong",numkeyframes=0)这是个兵乓的类型的循环,就像那样兵乓球的作用来使用。

loopOut(type="cycle",numkeyframes=0)这是个圆形的类型的循环,就是对一组动作进行循环。

loopOut(type="continue")这是计算机继续计算未完成的运动。

numkeyframes=0是循环的次数,0为无限循环,1是只循环一次,2是循环2次,如此类推。

6.时间表达式:

thisComp.layer("").transform.position.valueAtTime(time-某个数值) 这个合成的某个图层的transform属性的position参数的时间延迟某个数值 如:thisComp.layer("").transform.position.valueAtTime(time-1) 这句表达式的意思是这个合成的物体移动时,移动时间总是延迟1秒。

7.指数表达式:

透明度参数opacity, 填写index*20 就是使其透明度的值为20%

如果把图层打成三维层,对position参数,填写position[0],position[1],index*2,这是你在不断复制相同的图层,图层里的图片会不断在z轴的方向以2像素的复制,最终形成类型于三维物体的效果。

指数表达式虽然比较少用,但是它的作用还是很强大的,可以使图片变成三维的效果。

8.x=thisComp.layer("轨迹").transform.position[0]-thisComp.width/2; x/thisComp.width

由于插件的中心位置会有所不同,有些是以合成的中心为起始点,而有些是以最左上角的点为起始点。

所以就会出现-thisComp.width/2;x/thisComp.width这句脚本

9.

var result;

var exp = 表达式

if(time >= 开始时间 && time <= 结束时间)

      result = exp;

else

      result = value;

result;

开始时间结束时间用thisComp.xxxtime之类的替换(时间区间控制表达式范围)

10.图层长度控制表达式时长区间

var result;

var exp = 表达式;

if(time >= thisLayer.inPoint && time < thisLayer.outPoint)

      result = exp;

else

      result = value;

result;

11.弹性表达式

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}

12.数字递增表达式

StartNumber=1;

EndNumber=1000;

StartTime=1;

EndTime=3;

t=linear(time,StartTime,EndTime,StartNumber,EndNumber);

Math.floor(t)

13.抽帧表达式

parseInt(value/k)*k

14.时间码表达式(可用18节知识点替换)

min=Math.floor(time/60);

sec=Math.floor(time%60);

if(min>=60){min=min%60;}

if(sec<10){sec="0"+sec;}

if(min<10){min="0"+min;}

text=min+":"+sec

15. 表达式 标签控制动画组

var n = marker.nearestKey(time).index;

if (time < marker.key(n).time)

n = n-1;

if(n<=0)

n = 1;

var t = time - marker.key(n).time;

thisProperty.valueAtTime(t)

x

16.wiggle抖动表达式正数表示

Math.abs(表达式(X,Y))

例如:Math.abs(wiggle(X,y));

17.间歇性时间控制属性表达式(以缩放为例)

var stepTime = time;

var stepValue = [X, Y];

value + stepValue * Math.floor(time / stepTime)

18.时间码表达式

image

var hour = Math.floor((time/60)/60);//定义小时,1/60*1/60=3600s

var min = Math.floor(time/60);//定义分,1/60 min

var sec = Math.floor(time);//定义秒,S

var mili = Math.floor(time*60);//定义秒前单位进制,可以填60进制取一 也可以填1000进制取一

if (mili > 59){ mili = mili - sec*60; }if (mili < 10){ mili = "0" + mili; }//定义秒前单位归零进制最大值为60情况下,例如大于59的情况,循环到零,第二位十进制,满十取一

if (sec > 59){ sec = sec - min*60; } if (sec < 10){ sec = "0" + sec; }//定义秒归零进制最大值为60情况下,例如大于59的情况,循环到零,第二位十进制,满十取一

if (min >= 59){ min = min - hour*60; } if (min < 10){ min = "0" + min; }//定义分归零进制最大值为60情况下,例如大于59的情况,循环到零 ,第二位十进制,满十取一

if (hour < 10){ hour = "0" + hour; }//定义小时第二位十进制,满十取一

hour + ' : ' + min + ' : ' + sec + ' : ' + mili;//时间格式,0:0:0:0

也可举例延伸添加天数例如:

image

var day =Math.floor(time/86400);//定义数值86400秒为一天,或者可以 (((time/60)60)60)

var hour = Math.floor((time/60)/60);

var min = Math.floor(time/60);

var sec = Math.floor(time);

var mili = Math.floor(time*60);

if (mili > 59){ mili = mili - sec*60; }if (mili < 10){ mili = "0" + mili; }

if (sec > 59){ sec = sec - min*60; } if (sec < 10){ sec = "0" + sec; }

if (min >= 59){ min = min - hour*60; } if (min < 10){ min = "0" + min; }

if (hour > 2){ hour = min - day*2; }if ( hour < 10){ hour = "0" + hour; }

//if (day < 10){ day = "0" + day; } 也可不定义格式

day + ' : ' +hour + ' : ' + min + ' : ' + sec + ' : ' + mili;

不过AE合成最多设置3个小时

19.三角函数表达式运用于位移

image

image​​

[X,Math.sin(value)]   [X,Math.cos(value)]  [X,Math.tan(value)]

例如:[X,Math.sin(time)*20+200]  Y轴随着正弦SIN函数位移(带有SIN曲线运动)

可快速实现缓进缓出的曲线运动(不是特别严谨的,就不用手动K曲线了,运动速度曲线类似函数曲线,运动曲线反而也能体现物体的位置,例如tan)

实现三角函数运动例:

[time,Math.sin(value)]

[time,Math.cos(value)]

[time,Math.tan(value)]

time为X轴

20.random函数分开控制X,Y,Z轴位移,模拟wiggle抖动

image

seedRandom(Math.floor(time*10),1);//Math.floor(value)value设定为(time*50)即一秒内有50帧为有random数值变化,控制每秒多少帧进行一次random位移,即速率‘’

x=transform.position[0]+random(500); y=transform.position[1]+random(); z=transform.position[1]+random();//random括号内写位移范围

[x,y,z]//定义XYZ

//transform.position[0]  里的数值 0代表X  1代表Y  2代表Z
wiggle拓展

var tmp = wiggle(1,1);//wiggle数值自己写

var result = [value[0],tmp[1],value[2]];//如果没有3D层,书写为var result = [value[0],tmp[1]]

result

21.创建线条表达式/

pointA = thisComp.layer("空 1").transform.position;//定义A点位置,用空对象控制 以下都是
pointB = thisComp.layer("空 2").transform.position;
pointC = thisComp.layer("空 3").transform.position;
pointD = thisComp.layer("空 4").transform.position;

linex = [pointA, pointB, pointC, pointD];//整合点  名称“linex”可随意自命名

createPath(points = linex, inTangents = [], outTangents = [], is_closed = false)//创建线条表达式;closed要等于flase 不用闭合

X Y轴运动配合使用函数运动 做出可调整位置波浪线条

x = transform.position[0];
y = transform.position[1]+Math.sin(time*频率数值)*位移数值; //不限定sin函数 可使用 cos tan 等三角函数来进行循环运动
[x,y];

表达式技巧表达式的简单应用其实也就是简单的绑定以及加减乘除,例如想要做个围成环的形状,就可以给repeater的旋转添加表达式,360/copies,这样所有复制出来的图形刚好会围成一个环,要注...

工作 AE
Theme Jasmine by Kent Liao