六大好玩的基礎 AE 表達式(Expressions)

Una Hu
U’s Motion Translator
10 min readFeb 19, 2020

原文出處 Six Essential Expressions for Creative Coding in After Effects,授權翻譯自 School of Motion。 (U:為了翻譯順暢,內文有稍作修改,但意思大致上是相同的噢!)

釋放 AE 表達式的強大力量吧 !

表達式是動態設計師的秘密武器,它可以讓重複的苦差事自動化,建造靈活的骨架,還可以讓你拓展能力,做到從前只用關鍵影格辦不到的事。如果你還在找方法學習這個超強工具,不用找了,我們開設並且由 Zack Lovatt and Nol Honig 擔任老師的表達式課程,會教你什麼時候、為什麼以及如何將語法應用在你的作品中,但不論你報名課程沒有,這篇文章將會解析最常用的表達式,幫助你加快工作流程。

從來沒用過表達式? 沒關係,讀下去,你會準備好的。

這篇文章會解釋表達式是什麼、為什麼學它很重要,以及分享一個表達式專案檔讓你練習,我們會一步步帶你認識,我們透過對一些 AE 專家們非正式調查後彙整出來的-六大必學表達式!

AE 表達式 ( Expressions) 是什麼 ?

表達式是一段段使用 Extendscript 或是 Javascript 語言,操控 AE 圖層屬性(例如 scale, position, rotation)的程式碼。當你在一個屬性旁寫上表達式時,可以建立該屬性與其它圖層、時間和表達式控制器 Expression Controllers 間的關係 (可以在 Effects & Presets 視窗中找到 )。

而表達式最美妙的地方就在於,你不用精通程式語言也可以開始,大部分的時候只要用一個簡單的字,就可以做出巨大的改變,讓你省去一堆麻煩事。

另外,AE 本身也內建 pick-whip 功能 (U:我都稱它是小蝸牛🐌),讓你在定義關係時可以自動產生程式碼。

U: 箭頭拉的那個就是 pick-whip,pick 是選取,whip 是皮鞭,umm..選取皮鞭XD ( 腦袋浮出甩繩索套住東西的畫面)

為什麼學表達式很重要呢 ?

表達式容易入手、可以讓簡單的任務自動化、而且只要付出一點點的努力,就可以立刻獲得極高的回報。每一個表達式都是節省時間,將工作化繁為簡的好工具,當你的工具包裡有越多表達式時,就代表你在 AE 專案中越能得心應手,尤其是當死線迫在眉睫的時候。

我該怎麼練習使用表達式呢 ?

如果你想要試試看文章中提到的表達式,直接下載這個專案檔吧(U:下載後搭配下面的解說可以看得比較懂噢!) 我們在各處都留下了不少筆記,好讓它能夠當個教學範本。

進階技巧:當打開其他動態設計師的專案時,先選取所有的圖層然後連點兩下 E ,好看看創作者是不是有在裏頭寫上任何表達式,這可以幫助我們了解創作者的邏輯,以利做進一步的專案分析。

所以,第一個表達式該學什麼勒?

以下是我們通過非正式調查動態設計師朋友們統整出來的六大必學表達式

  1. 旋轉表達式 (Rotation)
  2. 擺動表達式 (Wiggle)
  3. 隨機表達式 (Random)
  4. 時間表達式 (Time)
  5. 錨點表達式 (Anchor Point)
  6. 彈跳表達式 (Bounce)

1.旋轉表達式 (Rotation)

藉由在旋轉屬性上寫下表達式,我們可以讓圖層自行旋轉,同時也能控制它的轉速。

使用旋轉表達式:

  1. 選取你想要旋轉的圖層,接著按下鍵盤上的R
  2. 按住 ALT 點選 Rotation 這個字右邊的時鐘圖標
  3. 在圖層下方出現的空白區輸入程式碼 time*300;
  4. 關閉展開的圖層

現在圖層應該正在快速的旋轉 (如果圖層沒有旋轉,而且顯示錯誤,確認一下你輸入time 的 t 不是大寫)

U:看到它不自覺得想唱「轉吧轉吧~七彩霓虹燈~~」(透漏年齡的譯者)

如果要調整速度,只要簡單的改一下 time* 後的數字就可以了

想學更多的話:

2.擺動表達式 ( Wiggle)

擺動表達式主要是基於使用者給的限制作出隨機的運動,限制越多,需要輸入的表達式也就越困難。

要寫出最基本的擺動表達式,僅僅只需要定義兩個參數:

  • 頻率 frequency (freq):定義每秒你允許移動的次數
  • 振幅 amplitude (amp):定義從起始點開始允許向上或向下改變的幅度

簡單來說,頻率控制我們每秒會看到幾次擺動,而振幅則控制物件(或圖層)會偏離原來位置多遠。

不加入數值寫下來的話,程式碼是長這樣:wiggle(freq,amp);

想測試看看的話,你可以在頻率輸入 50,在振幅輸入 30,像是這樣: wiggle(50,30);

想學更多的話,可以看看這篇介紹擺動表達式的文章(原文),裏頭有更多的範例,以及更進階的像是擺動迴圈的表達式噢 !

3.隨機表達式 ( Random )

隨機表達式在 AE 裡是用來製造隨機數值好套用在想改變的屬性上,你可以輸入任何一個介於0和你想要的數字在隨機表達式裡,而它最基本的樣子是長這樣: random();

如果你想要套用介於 0 到 50 的隨機表達式在圖層的 scale 上,你可以選取圖層,接著輸入 random(50);

但這並不是全部,AE 中還有非常多隨機表達式的變化型(原文),包含:

  • random(maxValOrArray);
  • random(minValOrArray, maxValOrArray);
  • gaussRandom(minValOrArray, maxValOrArray);
  • seedRandom(seed, timeless = false);

你還可以應用隨機表達式讓各圖層隨機延遲出現:

4.時間表達式 ( Time )

時間表達式能夠以秒為單位改變 comp 裡的時間,這個表達式產生的數值也可以連結其它屬性來控制移動。

如果你將時間表達式乘以2,程式碼會長這樣 : time*2; 舉例來說,原本comp 中的八秒,就會變成四秒。

如果你想要學更多的話,可以參考這篇時間表達式文章(原文),裡面有非常多的 gif 圖可以幫你釐清疑惑,同時也會解釋 valueAtTIme(); 這個表達式,它可以套用指定的延遲時間到各個複製的圖層上。

5.錨點表達式 ( Anchor Point )

錨點在 AE 中是所有變形的基準點,例如以這個點做放大或是旋轉。使用錨點表達式可以將錨點鎖在這些位置:

  • 左上
  • 右上
  • 左下
  • 右下
  • 中心
  • 使用 Slider Controller 定義的 (X,Y) 座標

這個表達式經常使用在以.MOGRT 檔案形式製作標題和小標模板的時候。

如果你想要將圖層的錨點鎖定在角落或是對齊中心時,可以在錨點那欄輸入:

a = thisComp.layer(“Text1”).sourceRectAtTime(); 
height = a.height;
width = a.width;
top = a.top;
left = a.left;
x = left + width/2; y = top + height/2; [x,y];

這段程式碼定義了圖層的上、左、寬與高,接著使用加法和除法推算圖層的中心。

想要以數學邏輯了解更多這個表達式的話,可以看看這篇文章(原文),其中也解釋了該如何將先前的特效 pre-comp。

6.彈跳表達式 ( Bounce )

雖然彈跳表達式看起來複雜許多,但我們只需要兩個關鍵影格就可以製造出一個彈跳。AE 在圖層移動產生的速度可以幫助我們定義彈跳該如何動,以下是可以直接複製貼上的彈跳表達式:

e = .7; //elasticity 
g = 5000; //gravity
nMax = 9; //number of bounces allowed
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,控制彈跳的最大值

如果你照以下方式輸入數值的話...

你會得到一個高彈性,低重力的彈跳運動

想學更多關於彈性、控制重力或是其他更多相關變數的話,可以參考這篇好懂得彈跳表達式文章(原文)。

更多的表達式

激起你的興趣了嗎 ? 那就來跟著我們的超棒AE表達式教學(原文)深入了解它吧 !

精通 AE 表達式背後的藝術與科學

表達式對你來說還像是個無法攻下的第二語言嗎 ? 表達式課程,為初學者解釋 AE 中的 extend-script 和 javascript 就是你在尋找的答案。

由精通程式的 Zack Lovatt 以及曾榮獲冠軍的 Nol Honig 擔任導師,這堂課將透過專為視覺學習者所設計的練習,教導你所需要的基礎,破解程式語言大大小小的難題。

在未來的八周,你會漫遊在腳本中,施展出讓你所有朋友驚艷的程式魔法,另外,AE 對你來說將會變成一個擁有無限可能的新軟體。

了解更多課程 >>>>>

U : 以下是幫助文章有效進入腦中的神奇儀式,首先把滑鼠箭頭移到左側的手掌上,按下滑鼠左鍵不放,回想剛剛文章內最有印象的是什麼,等到手掌上的數字顯示 +50,恭喜你,完成了神奇記憶儀式,並附贈鼓勵作者繼續更新效果 (゚∀゚)

--

--

Una Hu
U’s Motion Translator

筆記翻譯 MG知識 / 分享動畫卡通教我的事 / 心血來潮時更(*´▽`*) http://www.youtube.com/c/WhoUna