好久之前說過要寫一個常用表達式合集,表達式對于AE來說是一個非常重要的工具,它能夠通過簡潔的代碼,代替庸雜的關鍵幀,能夠告訴ae你想要的屬性動畫,自動能夠生成,可以幫助我們節省大量的制作時間。
但是對于新手來說,表達式簡單的運用還好,一旦涉及到複雜的運用就一臉懵逼了,今天就特地給你們整理了一波工作中常用的表達式!
「1、查看所有表達式」将輸入法切換到英文狀态下,按兩次E鍵,即可查看,再按一次收起。
「2、開啟表達式開關和編輯數值」按住【ALT鍵】+鼠标左鍵點擊
「3、抖動表達式」這個表達式就是【WIGGLE】,它的應用範圍較廣,可以利用它給文字添加随機抖動效果。
使用方法如下,按住【ALT鍵】對屬性K幀,即可激活輸入表達式的地方,随後輸入【WIGGLE(5,20)】即可。(注意,此處需使用英文輸入法)。
WIGGLE表達式後面的兩個數值,前者代表抖動的頻率,後者代表抖動的距離。所有的效果都通過修改這兩個參數獲取。
WIGGLE表達式更高級的運用,在不同的方向使用不同的抖動強度,也可以制作隻在一個方向抖動的效果。
表達式語句:
a=wiggle(3,50)[0]; //控制x方向的抖動
b=wiggle(0,0)[1]; //控制y方向的抖動
[a,b];
「4、Time表達式」
time時間表達式,循環動畫的利器,常用于制作持續旋轉的效果。
表達式語句:time*5或time/5,在這裡我們可以使用( ,-,/, & *)各種計算符号。
一般來說time表達式常用動畫有三種:
1、勻速動畫
如下圖,為旋轉屬性添加表達式,time*70,這個數值也是你随意添加,越大越快。
2、逐漸加速
表達式為:time*time*time*time*n,這個乘以幾個time,可以随自己需要控制。
3、數字增長
其實就是将time表達式添加給字體的source text屬性,如果不想要小數點的話還需要添加一個Math.round()表達式。
「5、loopOut表達式」
loopOut表達式,使關鍵幀動畫循環,常用的有三種模式:
表達式本質是根據所做的關鍵幀動畫進行循環,所以使用該表達式的時候,務必要保證添加表達式的屬性是需要有關鍵幀動畫的。
1、cycle模式
表達式語句:loopOut(type = "cycle", numKey s = 0),後面的數值0用來控制從第幾幀開始循環,效果如下
2、pingPong模式
表達式語句:loopOut(type = "pingpong", numKey s = 0),後面的數值0用來控制從第幾幀開始循環。
與cycle模式的區别在于,cycle隻會讓小球循環變大,但不會讓小球再循環縮小,而pingPong模式會讓物體放大後再縮小,回複到其初始狀态。
3、continue模式
表達式語句:loopOut(type = "offset", numKey s = 0)
沿着最後一幀的方向和運動速度繼續運動下去
這種模式相比前兩種用的較少,可以便于制作動畫持續緩慢運動的效果,避免動畫靜止,也可以制作一些數字持續增長等效果。
「6、循環動畫表達式」
有時候我們需要做mask變形動畫的循環,但是直接給mask path屬性加循環表達式是沒用的。而利用下面這個表達式就能夠解決這個問題
表達式語句:
valueAtTime(time%key(numKeys).time)
對于mask路徑和形狀層路徑均有效哦。
該表達式的原理是利用valueAtTime表達式讀取關鍵幀數據,并通過數學計算使關鍵幀數據在時間線上重複。(所以有趣的是,其實你把它加給任何其他屬性都能夠産生cycle模式的循環。)
「7、彈性表達式」
1、Overshoot
表達式語句:
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);}elsevalue
Overshoot(過沖、誇張的)理解為“抖動”,更像果凍抖動的效果。
2、Bounce
表達式語句:
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 bounceswhile (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
Bounce可以理解為“反彈、類似重力作用”,如 皮球落地反彈的效果。
「8、random随機表達式」
表達式語句:random()
random(4) 産生範圍在 0 到 4 的數random(1, 4) 産生範圍在 1 到 4 的數random(-4, 4) 産生範圍在 -4 到 4 的數
随機函數,通過條用random(0-1),我們可以得到一個介于0和1之間的随機值,利用随機值,我們可以做出各種随機的效果。
「9、toComp表達式」
表達式語句:
thisComp.layer('三維層名字').toComp([0,0,0]); //加給二維坐标,後面的數值[0,0,0]用來調整位置的偏移
可以将三維坐标轉換為二維坐标。(聽起來像是三體中的降維打擊( ̄▽ ̄)")
用到的機會不多,但是一旦需要用到它的時候,你就會後悔自己沒有早點認識這個表達式。
它可以用來将一些二維的特效做成三維的效果,還可以給二維層做出三維空間感的運動效果。
表達式這麼說可能還是有點抽象,有時間的話會再給大家出相關案例來具體說明,上手練習一下就很容易理解啦~
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!