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影視後期特效製作深入剖析AE表達…
其實表示式的教程寫過不少,網上也不少,這次希望從計算機程式設計和演算法的角度上去剖析,可能更好理解,這是根難啃的骨頭,很多人也就一知半解懂個wiggle什麼的,學好表示式,對工作效率的提升是很大的。新手的話不太建議在這方面花太多時間,因為表示式是個難點,但在AE中並算不上重點,不會表示式KK幀很多效
【AE影視後期製作基礎教程】如何做…
軟體:AE6.5 先看效果: 副產品一個: 下面開始做: 01:新建一個合成 02:新建固態層,取名為BG 03:新建固態層,取名為Particular_1 04:新建空白層,取名為Particular Point,開啟他的3D層 05:給P
AE視訊教程 PR cc零基礎入門自學中文版高清大全特效影視後期製作
學習是對自己最好的投資,而機會屬於有準備的人,這是一個看臉的時代,但最終拼的是實力。人和人之間的差距不在於智商,而在於如何利用業餘時間,所以沒有等出來的輝煌,只有幹出來的精彩。其實只要你想學習,什麼時
AE 超人飛天特效 地面震裂崩飛效果 。SU 可以快速建立模型。室內室外。通過將CAD 的圖拖拽 拉伸成面
今天完成 工資結算髮放。 繼續TX PDF AE 超人飛天特效 地面震裂崩飛效果 人中槍彈爆頭效果 需要相關素材, 比如地面震裂 崩飛 的素材 槍彈 的血液飛濺的素材等 跟蹤,動態模糊,快速模糊, SU 通過將CAD 的圖, 牆, 門窗等逐步新增到SU軟
深入剖析Android四大組件(一)——Activity生命周期具體解釋
err ace troy 觀察 cin andro idp 方便 存儲 1.管理Activity的生命周期 不管是正在執行的Activity還是沒有執行的Activity,它們都接受Android的框架管理,這使得Activity處於不同的生命周期。 ①Acti
pjlib深入剖析和使用詳解
china lis sim framework 非線程安全 還要 cts 線程本地存儲 獲取 1. PJSIP簡介 PJSIP的實現是為了能在嵌入式設備上高效實現SIP/VOIP.其主要特征包括: 1).極具移植性.(Extremely portable)
Android硬件抽象層(HAL)深入剖析(二)
truct 入口 兩個 andro dream filename 庫文件 需要 sum 上一篇我們分析了android HAL層的主要的兩個結構體hw_module_t(硬件模塊)和hw_device_t(硬件設備)的成員,下面我們來具體看看上層app到底是怎麽實現操作硬件
深入剖析C++多態、VPTR指針、虛函數表
const 成員函數 virtual函數 並且 () 簡單 2-2 close display 在講多態之前,我們先來說說關於多態的一個基石------類型兼容性原則。 一、背景知識 1.類型兼容性原則 類型兼容規則是指在需要基類對象的任何地方,都可以使用公
Nginx Location和Rewrite深入剖析
nginx rewrite location Nginx Location和Rewrite深入剖析Nginx LocationNginx由內核和模塊組成,其中內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端的請求映射到一個location block,而location
Java並發--深入剖析ThreadLocal
html 查找 默認 註意 打印 thread類 .get () create 想必很多朋友對ThreadLocal並不陌生,今天我們就來一起探討下ThreadLocal的使用方法和實現原理。首先,本文先談一下對ThreadLocal的理解,然後根據ThreadLoca
Nginx技術深入剖析
錯誤頁 域名 單獨 好習慣 tab 有效 tin cgi 支持 Nginx軟件功能模塊說明 核心功能模塊(Core functionality):主要對應配置文件的Main區塊和Events區塊。 標準的http功能模塊: 企業 場景常用的Nginx http功能模塊匯總
【Java TCP/IP Socket】深入剖析socket——TCP套接字的生命周期
-i 指定 成了 上交 存在 initial com pos 技術分享 建立TCP連接 新的Socket實例創建後,就立即能用於發送和接收數據。也就是說,當Socket實例返回時,它已經連接到了一個遠程終端,並通過協議的底層實現完成了TCP消息或握手信息的交換。
【Java TCP/IP Socket】深入剖析socket——TCP通信中由於底層隊列填滿而造成的死鎖問題(含代碼)
parameter 兩個 因此 tar 機制 至少 基礎 named 測試 基礎準備 首先需要明白數據傳輸的底層實現機制,在http://blog.csdn.net/ns_code/article/details/15813809這篇博客中有詳細的介紹,在上面的博
深入剖析物聯網行業現狀及發展
隧道 互聯網 style 網絡 接受 努力 國內 http 無線傳輸 BAT大佬為何要布局物聯網 阿裏、京東、華為、騰訊相繼布局物聯網,物聯網到底存在哪些商業價值?大佬都在發力,我們該何去何從? 阿裏物聯網生態系統技術大解密 ”1234”戰略,定位於物聯網基礎設施搭建者 天
輸入輸出流的深入剖析
als 顯示 flag count() 返回 bit spl nor internal 主要是對用到的函數進行簡要總結並提供簡單示例 1 //輸入輸出流的深入剖析 2 //頭文件 3 #include <iostream> 4 #include <
LinkedList源代碼深入剖析
分析 col ont previous 類型 alt ima 搜索 before 源碼分析: 我們知道LinkedList的底層是采用雙向鏈表來實現的,所以下面來從源碼角度來分析一下,先來看一下它的類結構: 然後看一下它的構造: 而這個header又是什麽東東
深入剖析java的try…catch…finally語句
ppr ive after 內容 我們 title oid stat blog 一、前言 前些天參加面試的時候有一道題: public class test { public static void main(String[] args){
Java多線程(二) —— 深入剖析ThreadLocal
tst isp get方法 con 需要 detail 什麽 RM 深入 對Java多線程中的ThreadLocal類還不是很了解,所以在此總結一下。 主要參考了http://www.cnblogs.com/dolphin0520/p/3920407.html 中的文章。
Java開發之深入剖析Netty框架源碼實戰視頻教程
應用 pipe 事件處理 recycle 源碼 詳細分析 netty flush sel 第1章 課程介紹介紹本課程需要的前提知識和內容概要 第2章 Netty基本組件使用一個簡單的socket例子概括Netty裏面的基本組件,包括NioEventLoop,Channel,
Java並發編程:深入剖析ThreadLocal
轉載 就是 場景 null return 也有 既然 多個 vat 想必很多朋友對ThreadLocal並不陌生,今天我們就來一起探討下ThreadLocal的使用方法和實現原理。首先,本文先談一下對ThreadLocal的理解,然後根據ThreadLocal類的源碼分析了