快速出效果!10條有趣又實(shí)用的AE表達(dá)式

表達(dá)式是使用 Extendscript 或 Javascript 語(yǔ)言來(lái)控制 AE 圖層屬性(位置、縮放、旋轉(zhuǎn)、不透明度)的一種編程語(yǔ)言,慶幸的是不用真的精通編程,大部分的表達(dá)式用的時(shí)候只需修改幾個(gè)簡(jiǎn)單的參數(shù),就可實(shí)現(xiàn)復(fù)雜的效果。每一種表達(dá)式都是節(jié)省時(shí)間,簡(jiǎn)化工作的好幫手。

表達(dá)式用法很簡(jiǎn)單,按下 alt/option 鍵,鼠標(biāo)點(diǎn)擊圖層屬性前面的“小碼表”,然后把代碼添加到時(shí)間軸里的文本區(qū)就可以了。

廢話少說(shuō),來(lái)介紹 10 個(gè)常用的 Ae 表達(dá)式及其用法,建議收藏。

time

常用在旋轉(zhuǎn)屬性上,代碼:time*value

value 是數(shù)值,用在元素的不透明度上,就是由透明到不透明的變化。

例如:time*15,意思就是每秒以 15%的透明度一直到 100%不透明。用在旋轉(zhuǎn)屬性上,就是每秒以 15°的角度進(jìn)行順時(shí)針旋轉(zhuǎn),如果是-15,就是逆時(shí)針旋轉(zhuǎn)。

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

其實(shí) time 屬性也是可以用在位置屬性上的,只不過(guò)要先把“位置”屬性先拆分成 X、Y 兩個(gè)單獨(dú)的坐標(biāo)才可以。

接著我們來(lái)看下和 time 相關(guān)的函數(shù)表達(dá)式

正弦函數(shù) sin

代碼:Math.sin(time*value1)* value2

與 time 不同的是,它多了一個(gè)旋轉(zhuǎn)的頻率。

value1=頻率值;value2=幅度值

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

例如把這行代碼 Math.sin(time*2)* 30 加在旋轉(zhuǎn)屬性上,就是以 30°的角度來(lái)回旋轉(zhuǎn) 2 次,可以代替手動(dòng) K 幀的繁瑣。

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

那怎樣讓旋轉(zhuǎn)的物體停下來(lái)呢?需要在這行正弦函數(shù)后面加上一行指數(shù)函數(shù):

Math.sin(time* value1)* value2/Math.exp(time* value)

函數(shù) exp 里面的 time 值越大,就越快停下來(lái)。

wiggle 抖動(dòng)

最常用的“喂狗”表達(dá)式,一般用在“位置”屬性上,簡(jiǎn)單寫(xiě)法為:wiggle(value1, value2)。

value1 為每秒抖動(dòng)的次數(shù),value2 為每次隨機(jī)波動(dòng)的幅度。

例如:wiggle(5,20),意思每秒抖動(dòng) 5 下,每次波動(dòng)的幅度為 20。

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

更完整的寫(xiě)法是:

wiggle(freq, amp, octaves = 1, amp_mult = 0.5, t = time)

freq=頻率(設(shè)置每秒抖動(dòng)的頻率);amp=振幅(每次抖動(dòng)的幅度);octaves=振幅幅度(在每次振幅的基礎(chǔ)上還會(huì)進(jìn)行一定的震幅幅度,很少用);amp_mult=頻率倍頻(默認(rèn)數(shù)值即可,數(shù)值越接近 0,細(xì)節(jié)越少;越接近 1,細(xì)節(jié)越多);t=持續(xù)時(shí)間(抖動(dòng)時(shí)間為合成時(shí)間,一般無(wú)需修改);一般只寫(xiě)前兩個(gè)數(shù)值即可。

index

可以理解為規(guī)律復(fù)制表達(dá)式,代碼:index*value

例如把 index*15 添加在圖層的“旋轉(zhuǎn)”屬性上,則第一個(gè)圖層會(huì)旋轉(zhuǎn) 15 度,之后按 Ctrl+D 去復(fù)制圖層時(shí),第 2 個(gè)圖層將旋轉(zhuǎn) 30 度,第三個(gè)圖層 45 度,以此類推......

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

若想第一層圖形不產(chǎn)生旋轉(zhuǎn)保持正常形態(tài),復(fù)制后的圖形以 15 度遞增,表達(dá)式這樣寫(xiě):(index-1)*15,“-1”就是減去第一個(gè)圖層后其他所有圖層以 15°旋轉(zhuǎn)復(fù)制。

time 計(jì)時(shí)

常用于隨便變化的數(shù)字或倒計(jì)時(shí):time.toFixed(2)

括弧里的數(shù)字 2 代表小數(shù)點(diǎn)后兩位,所以 0 就是整數(shù)變化。

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

數(shù)字倒計(jì)時(shí):Math.floor(value-time),value 代表從幾開(kāi)始,如:“20-time”,就是從 20 開(kāi)始倒計(jì)時(shí)。

random 隨機(jī)

數(shù)值變化表達(dá)式,所以經(jīng)常用在數(shù)字上,當(dāng)然也可以用在“不透明度”和“縮放”屬性上。代碼:random(min,max)。

min 是最小值,max 最大值

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

例如:random(1,100),數(shù)字就會(huì)在 1-100 間隨機(jī)變化,它會(huì)帶 X.xxxxxxxxxx 這樣的小數(shù)位,如果不想要小數(shù)點(diǎn)后面的尾巴,可以這樣寫(xiě):

X=random(1,100)
Math.round(X)

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

“X”是你自定義的名字,意思就是給這個(gè)“X”規(guī)定,讓它只能在 1-100 之間整數(shù)變化。這個(gè)效果可用在抽獎(jiǎng)游戲里的隨機(jī)數(shù)字。

運(yùn)動(dòng)脫尾

物體運(yùn)動(dòng)時(shí),有類似殘影的效果,代碼如下:

delay = 5; //number of frames to delay(延遲的距離)
d = delay*thisComp.frameDuration*(index - 1);
thisComp.layer(1).position.valueAtTime(time - d)

把上述代碼添加到運(yùn)動(dòng)圖層的位置屬性里,然后多復(fù)制幾個(gè)圖層。

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

如想要實(shí)現(xiàn)不透明度拖尾,就需要為元素的不透明度屬性添加表達(dá)式:

opacityFactor = .75;//不透明度值
Math.pow(opacityFactor,index - 1)*100

萬(wàn)能彈性表達(dá)式

彈性表達(dá)式有兩個(gè),Overshoot 和 Bounce。可以輕而易舉地實(shí)現(xiàn)各種彈性動(dòng)畫(huà),如抖動(dòng)、彈跳動(dòng)畫(huà)等。

Keyframe Overshoot

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}

*amp 表示振幅,freq 表示頻率,decay 表示衰減(根據(jù)不同需求做不同的調(diào)整)

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

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 表示彈跳最大值(根據(jù)不同需求做不同的調(diào)整)

loopOut 循環(huán)

較常用的循環(huán)表達(dá)式,常用的類型有“pingpong”和“cycle”,詳細(xì)規(guī)則如下:

  • loopOut(type=“類型”,numkeyframes=0):對(duì)一組動(dòng)作進(jìn)行循環(huán)
  • loopOut(type="pingpong",numkeyframes=0):是類似像乒乓球一樣的來(lái)回循環(huán);
  • loopOut(type="cycle",numkeyframes=0):是周而復(fù)始的循環(huán);
  • loopOut(type="continue"):延續(xù)屬性變化的最后速度,
  • loopOut(type="offset",numkeyframes=0):是重復(fù)指定的時(shí)間段進(jìn)行循環(huán);
  • numkeyframes=0 是循環(huán)的次數(shù),0 為無(wú)限循環(huán),1 是最后兩個(gè)關(guān)鍵幀無(wú)限循環(huán),2 是最后三個(gè)關(guān)鍵幀無(wú)限循環(huán)

與 loopOut 相對(duì)應(yīng)的是 loopIn,如果說(shuō) loopOut 是在最后一個(gè)關(guān)鍵幀之后循環(huán),那 loopIn 就是在最后一個(gè)關(guān)鍵幀之前做循環(huán)。

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

loopOutduration 和 loopInduration

這兩個(gè)里面都有一個(gè)“duration”:

duration = 0 時(shí)候一切遵循以上 Out 和 In 的基本解釋。

duration = 1,這里分為兩種:

第一種,loopInDuration(type = "cycle", duration = 1)

duration = 1 表示循環(huán)該套動(dòng)作的前 1 秒內(nèi)(綠色框內(nèi) 2s-3s)的動(dòng)作。

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

第二種,loopOutDuration(type = "cycle", duration = 1)

duration = 1 表示循環(huán)該套動(dòng)作的最后 1 秒內(nèi)(綠色框內(nèi) 3s-4s)的動(dòng)作。

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

linear 線性函數(shù)

控制器動(dòng)畫(huà),很適合用在一些需要多維聯(lián)動(dòng)的動(dòng)效里。

代碼:linear(t,tMin,tMax,value1,value2)

t=某屬性(位置、縮放、不透明度...)線性變化值(tmin 最小,tmax 最大)

value1,value2 代表給當(dāng)前添加表達(dá)式的參數(shù)的一維變化。

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

如何產(chǎn)生聯(lián)動(dòng)呢?

t=(拖動(dòng)螺旋線指向你想要綁定的那個(gè)圖層的某個(gè)屬性,比如 x/y 某一個(gè)方向的值)

但是這個(gè)只適用于一維上的某一個(gè)值,如果同時(shí)應(yīng)用,比如等比縮放屬性上怎么辦呢?

在 linear 前面加定義的名字,以“縮放”為例:

t=(你想要綁定的那個(gè)圖層的某個(gè)屬性)
kuan=linear(t,tMin,tMax,value1,value2);
gao=linear(t,tMin,tMax,value1,value2);
[kuan,gao]

以上就是本文要介紹的 10 個(gè)常用表達(dá)式,當(dāng)然還有更多,當(dāng)你掌握越多的“語(yǔ)法”就越能理解其中的奧秘。甚至可以嘗試自己編寫(xiě)更實(shí)用的表達(dá)式,隨時(shí)調(diào)用省時(shí)省力。

更多表達(dá)式教程:

歡迎關(guān)注作者微信公眾號(hào):「印跡拾光」

快速出效果!10條有趣又實(shí)用的AE表達(dá)式

收藏 514
點(diǎn)贊 68

復(fù)制本文鏈接 文章為作者獨(dú)立觀點(diǎn)不代表優(yōu)設(shè)網(wǎng)立場(chǎng),未經(jīng)允許不得轉(zhuǎn)載。