AE影視后期特效制作深入剖析AE表達式

其實表達式的教程寫過不少,網上也不少,這次希望從計算機編程和算法的角度上去剖析,可能更好理解,這是根難啃的骨頭,很多人也就一知半解懂個wiggle什么的,學好表達式,對工作效率的提升是很大的。新手的話不太建議在這方面花太多時間,因為表達式是個難點,但在AE中并算不上重點,不會表達式KK幀很多效果都能搞定。

第一步:開啟表達式

首先我們來說說如何開啟表達式和表達式的一些功能按鍵。首先,如何開啟表達式界面呢,按住alt+鼠標左鍵點擊秒表處打開表達式界面。

表達式處有四個按鈕:

,第一個是打開關閉表達式,第二個是打開表達式曲線圖像,打開后能看到用過表達式后的曲線圖。

打開后能顯示路徑和曲線,如圖。第三個按鈕是拾取按鈕,等等我們會說怎么用。第四個是預設按鈕,能調出AE所有可調用的預設。

平常大家一起交流學習AE技能經驗,每天有免費AE影視后期制作特效課程講解。復制點擊鏈接加入Q群149413881學習交流。

第二步:了解表達式的本質。

懂得如何打開表達式面板之后,我們來看看表達式的本質是什么吧。

我們新建一個合成和一個固態層,在固態層的不透明度屬性上表達式“20”,如下圖所示,我們會見到不透明度變成了20。

其實說到底,AE的表達式,就是返回最后一行所得到的數字或者數組,這個數字或者數組是個變量,是會隨著時間改變而改變的,這里不變的原因只是因為,它每一幀都是數值20罷了。說完這些,可能會有點不解,我們來看下面幾個例子。

在位置屬性我輸入了表達式“[20,30]”,這個表達式是一個數組,有兩個數值,叫做二維數組,這個位置屬性,叫做二維屬性,他有x,y兩個參數,這也是上文中提到的返回的可能是數組,不一定是數值。

我在縮放屬性上寫的表達式有三行,但可以看到,屬性的數值是50%,50%,跟第一第二行的a=3和b=3完全沒有半點關系,這就是上文說的,返回的僅是最后一行,不管前面運算再多,你最后一行才是最關鍵的。

那么再回來說表達式的本質,是啥呢,它其實就是通過代碼的方式表述的數值或者數組在每一幀上的集合。

那么這里要補充兩個概念和一些常識。

1.數組:其實就是一類有著相同數據類型的東西按順序排列的集合。這集合里的元素可以是任何東西,包括數組。也就是數組的元素就可以是數組,還有整數,布爾值等等,甚至到幾個圖層,它們也能組成一個數組。

2.數據類型:這東西為何要在這說呢,因為有些屬性的值并不是單純的數字或者數字組成的數組,其他的數據類型也會包含到,常見的比如布爾型和字符串。我們來看下面三個比較特殊的例子。

第一個透視位移那是布爾類型,所謂的布爾類型,它就是只有對和錯兩種情況的。要么勾上,要么不勾。

第二個混合模式是枚舉型。說這個比較麻煩,理解為它本身就是只有幾種情況,而且是特殊的。這個混合模式中就是只有相加,疊加,正常的那些情況。

第三種算是特別特殊了,是字符串類型。所謂的字符串,是由數字、字母、下劃線組成的一串字符。

然后來補充一張小圖。多維屬性的歸類。

第三步:了解一些編程基礎。

那么解釋完了本質,我們就要說下投入使用了,但在這之前要補充一些編程方面的小知識。

1.運算符。

算術運算符:用于各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(++)、自減(--)共七種。

關系運算符:用于比較運算。包括大于(>)、小于(=)、小于等于(

邏輯運算符:用于邏輯運算。包括與(&&)、或(||)、非(!)三種。

PS:運算符中的等于是用兩個等號,一個等號代表的是賦值,其實還有些“+=”這種復合的賦值運算符,不過我們編寫其實可以不用,所以跳過。有興趣自行百度。

2.條件語句與循環語句。

條件語句用的一般是“if...else if..else”。

條件語句主要是我們想針對不同情況,有不同的返回值。這個在之后的實例會詳細解釋清楚這句話是啥意思。

其實光是一個if沒有else語句也是可以執行的,這里就不演示了,具體寫法是

if(布爾表達式)

else if(布爾表達式)

else

什么是布爾表達式呢,簡單來說就是能判斷對錯的語句,例如上面的“a==b”,a等于b要么是對的,要么是錯的,當然布爾表達式返回的值其實是0或者1,1代表正確,0代表錯誤,我在第三個例子中直接寫了個1,執行的是if里面的語句。

循環語句一般用的是for循環。

關于for循環,是比較強的一個循環語句,循環,它主要就是用在我們要重復的執行一個動作的時候。具體寫法是。

for(循環起點;循環終點判斷;用來跳出循環的表達式(一般就是自加))

{

要重復的動作;

}

例子里的語句等于寫十次c=c+1,其實高中時候也應該會接觸流程圖的循環,類似,上面條件也是,自行參悟。這里最后還是寫了個“c;”,也證實了我之前說的表達式關鍵還是最后一行,前面的語句其實都是為最后一句鋪路的。

PS:其實也有其他像switch..case,do..while這種語句,不過懂一種也差不多了,有興趣可以自行百度。

3.構造一個新函數與設置變量。

這里是一個重點和難點,為什么說是重點呢,因為表達式很多語句是調用AE本身自帶的函數,清晰理解函數的概念能快速解決掉一部分東西,難點是因為,這里各種形參,實參這種概念的東西,新手經常弄暈,不過我在這不會提這些概念,讓你們實際上手就好。

函數,什么時候函數呢,輸入自變量就會得到因變量的一個體,就叫做函數,前身的概念與映射接近。前面說了,表達式其實很多語句是調用AE本身的函數。例如wiggle,linear,random,loopout一類的。

那么讓我們通過例子先來了解下怎么去構造函數和變量。寫法如下

function 函數名(參數名)

這是構建函數,我例子里有個“ox(50,50)”的語句,是調用函數,等于輸入兩個50分別個函數中的a和b,這a和b也就是自變量,我定義了一個c作為因變量,最后返回了c。關于定義函數,我們一般在前面寫個var就行了,其實也有其他能定義的,不過會涉及數據類型,例如int,float,double這些。那么接下來我們來通過wiggle深入了解函數這個東西,還有為什么我會說AE表達式有很大一部分其實就是在調用AE已經寫好給我們的函數。下面是Adobe官方給出的wiggle表達式的幫助。

-------------------------------------------------------------------

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

返回類型:數值或數組。

參數類型:freq、amp、octaves、amp_mult 和 t 是數值。

隨機搖動(擺動)屬性值。

freq 值是每秒擺動的頻率。

amp 值是向其應用了此值的屬性單位中的振幅。

octaves 是要加在一起的噪聲的八度數。此值控制擺動的詳細程度。使此值高于默認值 1 可在擺動中包括更高的頻率,使此值低于默認值 1 可在擺動中包括振幅諧波。

amp_mult 是 amp 乘以每個八度的值。此值控制諧波減弱的速度。默認為 0.5;使其更接近 1 可以與基本頻率相同的振幅添加諧波,使其更接近 0 可以添加更少的細節。

t 是基礎啟動時間。此值默認為當前時間。如果您希望輸出成為在不同時間采樣的屬性值的擺動,請使用此參數。

示例:position.wiggle(5, 20, 3, .5) 每秒產生約 5 次擺動,平均大小約 20 像素。除了主要擺動之外,其他兩個級別的詳細擺動發生的頻率為每秒 10 次和 20 次擺動,各自的大小為 10 和 5 像素。

-------------------------------------------------------------------

從上面可以看出,其實wiggle就是官方寫好了一個

function wiggle(freq, amp, octaves=1, amp_mult=.5, t=time)

{

............;

}

我們省去了這些流程,可以直接調用罷了。

4.部分常用的語句。

break:在switch...case語句用到多點,用途是打斷部分的流程。也可以拿來跳出循環。

continue:用作跳出循環(單次的)。

return:用作返回某個值,構建函數中經常用到。

PS:break是結束整個循環體,continue是結束單次循環。

5.選學:遞歸(這東西其實是個很好用的東西,熟用遞歸可以減少代碼量,也基本用不到),循環和條件的嵌套(恩,其實沒那么難,不過一般也不會用到嵌套那么復雜的表達式啦),自行百度。

PS:其實編程的基礎知識在這還沒結束,只是還有部分東西單獨拿出來說不方便,我會在下面慢慢說完。

第四步:學習表達式綁定與表達式控制

知識說的差不多了,接下來我們會接觸到面向對象的概念,不過在此之前,我們會先來說AE中表達式控制這一欄特效和表達式綁定。

先來說表達式綁定,因為他是利用表達式控制的基礎。

這里會用到我們之前提到的第三個按鈕。

我們來演示個最簡單的例子,讓攝像機目標點位置綁定一個空物體的位置。我們先把空物體的3D開關打開,找到攝像機目標點參數,打開表達式。然后拖動綁定。

這樣做的結果就是攝像機目標點會完全等于空圖層的位置,要注意的是,屬性的數據類型要完全一致才能那么直接的綁定。那么我們來看看綁定后表達式顯示的內容。

thisComp.layer("控制").transform.position

這個是啥意思呢,thisComp說的是當前合成,layer("控制")指的是名稱為控制的圖層,transfrom說的是變換屬性組,position指的當然是位置屬性。這樣代碼的寫法一層一層,邏輯清楚。在AE中,基本就是這樣的一個結構“合成-圖層-屬性類型組-具體屬性”。其實這里還并不完整,不過不完整的內容我們之后再講。

那么我們在來講表達式控制的一個簡單例子。用滑塊控制去控制一個固態層的不透明度。新建一個固態層,給它一個滑塊控制的特效,然后在不透明度屬性處打開表達式,綁定到滑塊控制。

可以看到我們不透明度的數值會等于滑塊控制的數值。再來看看這次的表達式內容。

effect("滑塊控制")("滑塊")

和之前說的完全不一樣。恩,其實我們可以換個寫法。

thisComp.layer("soild").effect("滑塊控制")("滑塊")

這里因為調用本圖層屬性數據,于是把前面的合成到層兩個去掉了。在這里,我們要引出AE表達式的一類預設了。例如index,time,value,width,height,這一類表達式本質上是返回AE內某些參數,下面我拿幾個例子說明下。

首先是index

我在不透明度上輸入表達式

thisComp.layer("soild").index*37

其實這就是我們平日寫的“index*37”,只不過我把前面的內容補充完整了。這表達式的內容是,返回名字為solid的圖層的層標號乘以37,假如我只寫"index*37",意思將會變為此圖層的層標號乘上37。

其次是time

這個其實是直接返回你時間軸上的時間,已經沒有上級可寫的了。返回的數值在時間軸的左上角。

再來說說value

我們在不透明度上輸入表達式

最后再來說width

因為會超過100,我們在滑塊控制上輸入。我分別輸入了兩條不同的表達式,我們來看看會有什么區別

可以看出,兩條表達式返回的值不同,一個返回的是合成的寬度(我這設定的是720P,所以為1280),一個返回的是固態層的寬度(我設置的是500*500的固態層)

從上面我們可以看出,預設中有些屬性只能層對象調用,有些要屬性調用,有些支持多個調用,要明確了解這個,多看官方幫助。

那么我們回來講表達式控制。

3D點控制和點控制返回的分別是3維數組和2維數組,復選框返回的是布爾值,滑塊返回的是一個數值,角度控制返回的也是一個數值,不過這個數到360會進一位那種感覺,圖層控制返回的是一個圖層,顏色控制返回的是一個四維數組。我們還是通過例子來具體解釋一下這些特效的細微區別。

關于3D點控制和點控制我在這就不演示了,和表達式綁定到空物體位置沒啥兩樣。滑塊控制也是,在這不講。

實例1:利用復選框控制控制特效的開關

表達式如下

if(復選框控制==0)

else

先來解釋下這個表達式的意思,當復選框沒有勾上的時候,保持當前值,否則(也就是勾上了),執行wiggle。前面提到過這種返回的是布爾類型,也就是只有對和錯,布爾類型的對用1表示,錯用0表示。

實例2:黑盒中用到的角度控制

表達式如下

transform.yRotation+[index*角度控制]

這表達式說的是,他本身的旋轉數值(也就是transform.yRotation在這其實可以用value代替)加上一個角度控制數值和層標號的積。

實例3:利用圖層控制制作3D空間中的瞬移

表達式如下

圖層控制.transfrom.position

也就是返回各圖層的位置屬性。

實例4:利用顏色控制批量控制顏色更改

先做一個如圖有三個不同顏色的形狀層和一個空圖層加上顏色控制。

然后都綁定到顏色控制。

這樣做在你編好哪部分顏色要是什么,之后可以一次性批量修改顏色。

第五步:引出另外一類預設與一些簡單算法的普及

其實另外一類我上面已經提到了一點,wiggle是官方寫的一個函數。那么包括random,loopOut,noise這一系列都是AE提供的函數,這其中有一部分又是數學,包括vetcor math和javascript math兩個部分。要用好這些,除了要好好參考AE官方提供的幫助外,還要懂一些很基礎的算法。

1.通過對2的取余運算來做定格關鍵幀。

if(Math.floor(time)%2==1)

else

我們可以看到曲線是定格運動了,我先來解釋一下表達式,math.floor是官方提供的一個函數,功能是向下取整(因為我們這里做的是取余運算,需要取整比較好),也就是說,表達式的意思是如果time取整后對二取余的值為1,那么值等于20,否則值等于50。

關于對二取余這個操作其實是拿來判定奇偶數用的,配合上條件語句會有奇效。具體要拿來怎么用,還得看個人的天馬行空了。

2.交換數值。

這算是最基礎的一個算法。表達式如下。

function ex(a,b)

{

var a;

var b;

var c;

c=a;

a=b;

b=c;

}

通過這個函數就能把a和b的值互換過來。

3.累加與累乘。

這里不再講,用for循環或者其他循環語句實現。包括數列求前N項和也是用循環語句實現。

4.排序與查找。

排序用的是冒泡法,查找用的是二分法,有興趣自行百度。

5.窮舉。

也就是把可能的情況一一測試,用循環實現。

平常大家一起交流學習AE技能經驗,每天有免費AE影視后期制作特效課程講解。復制點擊鏈接加入群【https://jq.qq.com/?_wv=1027&k=41M8x1n】學習交流。免費AE影視制作學習群 149413881

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容