快速出效果!10條有趣又實用的AE表達式

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

表達式用法很簡單,按下 alt/option 鍵,鼠標點擊圖層屬性前面的“小碼表”,然后把代碼添加到時間軸里的文本區就可以了。

廢話少說,來介紹 10 個常用的 Ae 表達式及其用法,建議收藏。

time

常用在旋轉屬性上,代碼:time*value

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

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

快速出效果!10條有趣又實用的AE表達式

其實 time 屬性也是可以用在位置屬性上的,只不過要先把“位置”屬性先拆分成 X、Y 兩個單獨的坐標才可以。

接著我們來看下和 time 相關的函數表達式

正弦函數 sin

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

與 time 不同的是,它多了一個旋轉的頻率。

value1=頻率值;value2=幅度值

快速出效果!10條有趣又實用的AE表達式

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

快速出效果!10條有趣又實用的AE表達式

那怎樣讓旋轉的物體停下來呢?需要在這行正弦函數后面加上一行指數函數:

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

函數 exp 里面的 time 值越大,就越快停下來。

wiggle 抖動

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

value1 為每秒抖動的次數,value2 為每次隨機波動的幅度。

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

快速出效果!10條有趣又實用的AE表達式

更完整的寫法是:

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

freq=頻率(設置每秒抖動的頻率);amp=振幅(每次抖動的幅度);octaves=振幅幅度(在每次振幅的基礎上還會進行一定的震幅幅度,很少用);amp_mult=頻率倍頻(默認數值即可,數值越接近 0,細節越少;越接近 1,細節越多);t=持續時間(抖動時間為合成時間,一般無需修改);一般只寫前兩個數值即可。

index

可以理解為規律復制表達式,代碼:index*value

例如把 index*15 添加在圖層的“旋轉”屬性上,則第一個圖層會旋轉 15 度,之后按 Ctrl+D 去復制圖層時,第 2 個圖層將旋轉 30 度,第三個圖層 45 度,以此類推......

快速出效果!10條有趣又實用的AE表達式

若想第一層圖形不產生旋轉保持正常形態,復制后的圖形以 15 度遞增,表達式這樣寫:(index-1)*15,“-1”就是減去第一個圖層后其他所有圖層以 15°旋轉復制。

time 計時

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

括弧里的數字 2 代表小數點后兩位,所以 0 就是整數變化。

快速出效果!10條有趣又實用的AE表達式

數字倒計時:Math.floor(value-time),value 代表從幾開始,如:“20-time”,就是從 20 開始倒計時。

random 隨機

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

min 是最小值,max 最大值

快速出效果!10條有趣又實用的AE表達式

例如:random(1,100),數字就會在 1-100 間隨機變化,它會帶 X.xxxxxxxxxx 這樣的小數位,如果不想要小數點后面的尾巴,可以這樣寫:

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

快速出效果!10條有趣又實用的AE表達式

“X”是你自定義的名字,意思就是給這個“X”規定,讓它只能在 1-100 之間整數變化。這個效果可用在抽獎游戲里的隨機數字。

運動脫尾

物體運動時,有類似殘影的效果,代碼如下:

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

把上述代碼添加到運動圖層的位置屬性里,然后多復制幾個圖層。

快速出效果!10條有趣又實用的AE表達式

如想要實現不透明度拖尾,就需要為元素的不透明度屬性添加表達式:

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

萬能彈性表達式

彈性表達式有兩個,Overshoot 和 Bounce。可以輕而易舉地實現各種彈性動畫,如抖動、彈跳動畫等。

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 表示衰減(根據不同需求做不同的調整)

快速出效果!10條有趣又實用的AE表達式

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

loopOut 循環

較常用的循環表達式,常用的類型有“pingpong”和“cycle”,詳細規則如下:

  • 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 是最后三個關鍵幀無限循環

與 loopOut 相對應的是 loopIn,如果說 loopOut 是在最后一個關鍵幀之后循環,那 loopIn 就是在最后一個關鍵幀之前做循環。

快速出效果!10條有趣又實用的AE表達式

loopOutduration 和 loopInduration

這兩個里面都有一個“duration”:

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

duration = 1,這里分為兩種:

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

duration = 1 表示循環該套動作的前 1 秒內(綠色框內 2s-3s)的動作。

快速出效果!10條有趣又實用的AE表達式

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

duration = 1 表示循環該套動作的最后 1 秒內(綠色框內 3s-4s)的動作。

快速出效果!10條有趣又實用的AE表達式

linear 線性函數

控制器動畫,很適合用在一些需要多維聯動的動效里。

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

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

value1,value2 代表給當前添加表達式的參數的一維變化。

快速出效果!10條有趣又實用的AE表達式

如何產生聯動呢?

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

但是這個只適用于一維上的某一個值,如果同時應用,比如等比縮放屬性上怎么辦呢?

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

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

以上就是本文要介紹的 10 個常用表達式,當然還有更多,當你掌握越多的“語法”就越能理解其中的奧秘。甚至可以嘗試自己編寫更實用的表達式,隨時調用省時省力。

更多表達式教程:

歡迎關注作者微信公眾號:「印跡拾光」

快速出效果!10條有趣又實用的AE表達式

收藏 519
點贊 100

復制本文鏈接 文章為作者獨立觀點不代表優設網立場,未經允許不得轉載。