侯全軍
湖南廣播電視大學傳媒藝術系,湖南 長沙 410004
數字影視特效中的編程技術研究
侯全軍
湖南廣播電視大學傳媒藝術系,湖南 長沙 410004
數字影視是文化創意產業的重要組成部分,影視特效是現代影視技術的一大亮點,其技術的推廣和發展備受人們的關注,目前的影視特效制作主要通過關鍵幀技術來完成,但在精確繪圖、分形動畫、循環控制、隨機抖動、圖形跟蹤等方面卻有著局限性,通過After Effects軟件提供的編程環境,巧妙的進行程序設計和開發,能高效快捷的完成這些特效的制作。
影視特效;JavaScript語言;程序設計;函數
數字影視特效已不僅僅是后期剪接中的一個增補,他已經滲入到影視作品創作的方方面面,從劇本的創作、籌謀到前期的攝影、置景、道具,到后期的合成、剪接,無處不發揮著他巨大的功力[1]。After Effects是數字影視特效制作的主流軟件,該軟件在動畫的控制和特效的生成方面有著強大的功能。它可以實現視頻片段的摳像,圖形的三維空間運動,模擬火焰、爆炸、雨雪等粒子特效,能輕松地完成光影特效和影片的調色與合成[2]。
After Effects軟件在6.0以前的版本中,程序的編寫是通過MOTION MATH腳本集來實現,在6.5以后的版本MOTION MATH完全被更為靈活,使用更為方便的表達式所代替了[3]。表達式具有豐富的系統變量和預定義函數,可以靈活的調用和控制系統中的參數、圖像的狀態和屬性,使平時難以想象的影視畫面和動畫場景的創作有了可能,有效的豐富了數字影視特效的表現形式,增強了影視作品的藝術效果。
After Effects 的表達式是基于JavaScript語言的編程環境,JavaScript是一種描述性的腳本語言,它采用小程序段的方式實現編程,在After Effects軟件中,可以給任何一個圖層添加表達式,通過表達式來編寫這些小程序段。這些小程序段可以靈活、方便地控制圖層的屬性和參數,也可以調用整個合成及其它圖層的屬性和參數,例如通過時間函數調用整個合成的播放進度,通過系統函數獲得整個項目的尺寸和制式,通過坐標函數調用其它圖層的位置等。
傳統的軟件開發工具一般是在一個獨立的編程環境中完成,而After Effects是一個基于圖層的影視特效軟件,圖層類似于一個大的容器,程序代碼被放置在這個容器的表達式中,通過表達式來實現對圖層中圖形的生成和圖像的變化,從而產生各種特效。一個完整的特效,往往需要多個圖層的結合才能完成,所以一個完整的特效程序,通常被放置在多個圖層的表達式中。通過多個表達式的相互關聯,將圖層有機的結合起來,是After Effects軟件中程序編寫的常用方法。
2 .1 幾何圖形及精準動畫特效編程
在制作影視特效中,經常需要繪制一些幾何圖形,這些圖形的繪制可以通過After Effects提供的數學函數如Math.cos(value)、Math.sin(value)、Math.tan(value)配合連線特效Beam來完成。精準動畫特效在后期合成中應用廣泛,為了使特效的真實,常常需要依據一些標準的物理學規律來設定。
在制作物體拋射特效時,其運動軌跡需要按照平拋運動規律來設定,在After Effects軟件中可以利用平拋運動的數學公式x=vt,y=vt+(1/2)gt2來設計,在position屬性中編寫程序:

即可實現所需的效果,其中v為設定的初始速度,time是一個系統預定義函數,表示播放的時間碼參數,精確到小數點后面兩位數,如播放到1分25秒時,其數字為85.00。
在制作時鐘的指針旋轉動畫時,需要按照真實時間的刻度來運動,這時可以通過編程控制圖層的rotation屬性,例如秒針的程序可以寫成:

這樣隨著影片的播放,每根指針都準確的按照播放進度進行各自的旋轉。
2.2 動態文字特效編程
After Effects軟件為動態文字特效的制作提供了Animate工具,可以實現文字的打字機效果,文字的舞動,文字的展開等動畫[3],但是在一些特殊的文字效果上卻需要通過編程來完成,例如時間的顯示,如果需要在面板上顯示播放的時間碼【00:00:05:09】,并且隨著播放的進度同步演示,利用關鍵幀技術或Animate工具是難以實現的。文字圖層中具有一個sources text屬性,通過程序控制這個屬性,可以輕松的實現動態文字的特效。例如在sources text屬性中編寫:

可以在屏幕上以【00:00:01:01】形式顯示時間碼,如果編寫成:

則可以在屏幕上以幀的形式顯示當前的播放進度。
2.3 定位與跟蹤特效編程
After Effects的特效在很多情況下都是通過多個圖層的關聯和配合來實現的,所以在圖層的控制中,常需要將多個圖層的一些屬性關聯起來并實現定位與動態跟蹤,例如圖層的位置、旋轉角度、透明度、中心點等。表達式程序的編寫,為這一需求提供了良好的解決方案。例如通過語句:

即可獲取并跟蹤一個圖層的位置坐標信息。如果要對多個圖層的位置進行關聯,并依次產生一定的位移,則可在相應圖層的position屬性上添加語句:

在位置的動態變化方面,通過編寫程序來實現有著明顯的優勢,例如在四色漸變濾鏡的應用中,四個色彩點的位置需要按照圓周運動,產生色彩旋轉的動畫特效,則可以在四個點的position屬性中分別添加表達式,程序編寫方法如下:

其中center是獲得該圖層的位置中心點。Radius是圓周的半徑,這里設定的是180,angle是用于跟蹤播放時間的變化,并產生動態角度的參數,這里的初始角度應根據四個點的初始位置來設置,x和y分別為點的坐標值,最后的add()函數是一個加法函數,通過中心點和x、y的值相加來完成色彩點的定位和賦值。
2.4 循環特效編程
在動態背景、畫中畫、運動圖標的應用中,這些片段經常需要循環播放,如果利用關鍵幀技術或層復制技術來完成,會造成圖層增加,運算速度降低,制作的工作量增加,但是利用loopIn()、loopOut ()、loopInDuration()、loopOutDuration()函數來編寫程序,則可以輕松的完成循環特效。如語句:

其功能是,在層的最后一個關鍵幀到出點保持循環播放一個指定的內容,這個指定的內容是從層的最后關鍵幀到入點的某個關鍵幀之間的片段, 具體的某個關鍵幀由numKeyframe來指定。例如loopOut("cycle", 1)是從層的最后關鍵幀到出點保持循環,循環的內容是最后一個關鍵幀到倒數第二個關鍵幀之間的片段,循環的次數由最后關鍵幀到出點間的時間和循環內容長度決定。
在循環閃爍,循環變色,圖形往返運動等特效的編程制作中,可以利用數學函數Math.sin(time)來完成。由于sin()函數輸出值的范圍是在-1到1之間,所以隨著time的增加,輸出值就在-1到1之間往返變化;利用這一點可以實現播放過程中的循環特效制作,例如在圖層的position屬性中編寫程序:

可以實現物體在x坐標軸上從-100到100的位置上來回往復運動。如果在圖層的opacity屬性中編寫程序:

可以實現圖層的透明度從-100到100的反復變化,實現按規律閃爍的特效。這些運動的節奏可以通過改變sin()函數中參數的變化速度來控制,例如要將節奏提高十倍,則可以寫成Math.sin(time*10),這樣在原有的基礎上相當于把時間加快了十倍。
2.5 隨機特效編程
關鍵幀動畫在制作隨機特效方面有著較大的缺陷,例如畫面隨機抖動,粒子隨機運動,顏色隨機變幻等,如果通過手工設定,其效果不真實,工作量也巨大。如果通過程序的編寫來完成則可以達到事辦功倍的效果。
After Effects提供了random(minVal, maxVal)函數,其中的minVal參數表示最小值或最小的數組,maxVal參數表示最大值或最大的數組。要實現畫面的抖動可以在Position屬性中編寫程序:
transform.position=[random(480, 530),random(300, 400)];
這樣隨著視頻的播放,畫面的x軸在480到530之間,y軸在300到400之間產生劇烈的抖動。要實現一個畫面色彩的隨機變幻,可以給圖層添加Hue/Saturation濾鏡效果,并勾選colorize選項,在Colorize Hue屬性中添加代碼random(0,360),即可實現色彩相位在0到360度之間隨機變幻。
隨機函數還可以控制圖層及濾鏡特效的很多屬性,例如控制scale屬性可以產生隨機縮放變形的動畫,控制opacity屬性可以控制圖層的透明度隨機變化,控制particluar粒子濾鏡的positionxy屬性可以控制粒子的隨機發射。
數字影視特效中的編程方法還有很多,結合數字圖形技術和空間技術可以開發出更多、更豐富的數字特效[5],例如利用遞歸算法編程可以實現分形特效,利用矩陣算法編程可以實現三維空間運動。只要我們在開發和設計過程中,深入研究,巧妙的利用After Effects圖層、濾鏡的特點,結合靈活的程序設計,就能為影視特效的制作開辟一個新的發展空間和領域。
[1]唐峰.電腦特技在電影中的運用[J].青年文學家,2010(16):17
[2]臧冠男.淺析After Effects在影像制作中的應用[J].吉林廣播電視大學學報, 2010(09):55
[3]眭莉.基于特效合成軟件After Effects的文字動畫應用創作[J].常州工學院學報,2008(02):23
[4]侯全軍,吳飛前.影視特效實例教程[M].北京:人民郵電出版社,2010:135
[5]肖常慶.影視特效的繪畫重構[J].北京電影學院學報,2011(05):30
10.3969/j.issn.1001-8972.2012.08.060
侯全軍(1979— ),男,數字媒體教研室主任,講師,碩士,研究方向數字媒體技術。