尹 君 趙 靜 鄧 濤 張 寧
(河南省科學技術信息研究院,河南 鄭州450003)
OpenGL(Open Graphics Library)是圖形應用軟件的專業的程序接口,它具有跨編程語言、跨不同平臺的接口規格(API)。OpenGL 本質上是一種規范,它嚴格規定了函數的執行情況和執行范圍,以及他們的輸出值域。而如何實現內部的單獨函數則是由OpenGL 庫的開發者決定的。目前OpenGL 的最新的規范庫是OpenGL 4.6。OpenGL 作為一個調用方便、功能強大的底層圖形庫,是幾乎所有三維軟件、游戲接口的一個標準。而Maya、3DsMax 等專業的三維軟件,則是依據OpenGL 圖形接口進行設計的,特別是在3D 圖像渲染管線,專業的三維軟件與支持OpenGL 的高級別的顯卡相結合,使圖像渲染達到相應任務的要求。圖形渲染流水線程可以分為幾個階段,每個階段是前一階段輸出后的結果,這些階段都是高度專業化的,具有并行處理的特點。調用OpenGL 圖形庫的每個顯卡都有數萬個小核心處理器,它們在GPU 上為每個階段運行自己的微程序,并快速處理圖形渲染過程,這個微程序就是著色器。著色器用著色器語言(GLSL)編寫。由于GPU 上沒有默認的頂點和片段著色器,因此必須至少定義一個頂點著色器和一個片段著色器(圖1)。通常,OpenGL 圖形庫為Maya 和3DMax 提供圖形輸入和輸出的著色器標準,而Maya 和3DsMax 是OpenGL 圖形界面的專業編程軟件。它們是標準的編程接口軟件,所以一個好的OpenGL 圖形卡可以很好地與Maya 配合使用,為視頻特效提供良好的制作基礎。

圖1 著色器原理示意圖
在視頻節目特效表達上,OpenGL 粒子系統能很好的實現制作者的想法,使視頻特效更加出色。
視頻特效粒子系統自從里夫斯(Reeves)于1983 年提出粒子系統的概念以來,就有各種各樣的粒子系統定義。粒子系統的一個普遍公認的定義是:粒子系統由具有相同屬性規則的微小個體組成,大量微小個體可以隨機顯示不同特征的粒子的集合體[1]。
粒子系統具有以下性質。
(1)單獨的粒子無法形成粒子系統,一般的粒子系統通常由許多單獨的粒子集組成。
(2)粒子系統中的每一個微粒子的集體表達屬性是一致的。例如,在模擬煙火時,每個煙火束都呈現出不同的色彩,運動軌跡表現為向上跳躍并向下擴散直至消失。
(3)OpenGL 粒子系統中微粒子的初始屬性具有一定程度的隨機性。例如,在重力作用下雨滴降落場景中,每個微小雨粒子具有不同的路徑和方向、滴落速度等初始屬性。OpenGL 圖形庫的粒子系統中的每個粒子的初始屬性都是相同的,如:單個粒子的發射速度、大小、形狀、受立場的影響值域等。時間在粒子系統中同樣存在,出生、運動和死亡每個微粒子都要經歷的時間節點,時間的流逝加載于虛擬世界中的每一個粒子,故以上屬性與時間存在相應的函數關系。作為視頻特效中描述不規則微個體最常用的理論,粒子系統理論也愈加成熟。作為有一定的生命屬性的微小粒子,粒子的隨機分布性和指定力場的無限干擾性。其變化形式和運動屬性每一刻都存在變化。粒子系統充分證明了不規則模糊目標的隨機性和動態性。它模擬了火焰、天空、大地和叢林等自然景觀。一般認為粒子系統是最成功的模擬不規則微實體時模糊圖像的生成方法[2]。因此,OpenGL粒子系統在Maya 中的基本生態原理是:
(1)粒子系統的實體構成假說。粒子的有限屬性集可以填充連續和離散的運動以及確定的粒子在粒子系統中運動的模糊對象。在不間斷的運動時間節點內,它們具有特定的空間分布的廣度和深度。
(2)假定粒子系統中的微粒子實體彼此獨立。
(3)微實體粒子屬性的假設原理。粒子系統中微實體粒子的存在不是抽象的,而是具有一定的屬性特征。粒子包括空間位置屬性,質量屬性,運動屬性(例如加速度和速度),外觀屬性(例如亮度,尺寸,顏色,形狀)和生產屬性(例如生命周期)等。隨著時間的流逝,以上的粒子屬性都會隨之產生相應的緩慢變化。
(4)粒子的時間生命假設。每個粒子系統都有一個生命周期概念,每個粒子在特定時間段內都需要經歷出生,活動和死亡的三個基本生命過程。
(5)粒子運動的假設。在粒子的生命周期中,它們都能產生某些類型的運動。粒子系統主要描述不規則物體,例如波浪,火焰,爆炸和瀑布。尤其是在動態材料仿真和動態流體仿真中,粒子系統具有自己的無可比擬優勢并具有兩個特征。首先它不僅由顆粒組成,而且還比較簡單,并且具有可以自由調整的特定結構屬性。其次,可以在創建過程中將隨機屬性添加到粒子系統模型中,并且創建好的模型不需要太多的計算時間。
一個基本的粒子系統是由一組粒子構成的子系列,在創建過程中粒子不是標準的幾何體,粒子系統也不是靜止不動的,子系列中的各個粒子都保持著本身的生命周期,粒子被創建,它們的初始速度和狀態隨時間變化而變化并直至死亡。粒子的各種移動和變化效果是通過調整生命周期屬性參數而產生的并且具有粒子本身的隨機性。此隨機性使粒子系統產生的特殊效果更加逼真。May 的特效粒子系統通過以下步驟構建:
(1)創建微粒子實體。創建Maya 粒子系統,首先要創建微粒子實體,在初次創建粒子運動過程中,需要掌握粒子的移動方向和速度,當前位置,粒子的顏色,紋理變化等微粒子實體的基本屬性。圖2 為maya 中的粒子屬性列表,它包含了生命當前生命值、生命周期變化值、粒子當前大小、粒子當前運動速度、粒子運動加速度等屬性。

圖2 粒子屬性列表
(2)創建粒子發射器。創建好基本微粒子實體后,必須創建粒子發射器來構建復雜的粒子屬性。該發射器可以控制微粒子實體的發射角度和總體數量,以及和其有關的整體的粒子參數屬性設置。如起始發射位置、起始發射速度、發射加速度、發射角度方向、粒子初始大小等參數設置。在Maya 中可在Nparticle命令欄中構建該發射器。
(3)創建粒子。Maya 粒子系統含有數量龐大的單獨微粒子,因此性能消耗是必須要考慮的。創建相對應的粒子池是提高粒子系統的性能必選方案,大量的微粒子在初始化參數后放入該粒子池中。當發射器開始發射微粒子時,粒子池中的微粒子降被刪除并遷徙放置在初始發射列表中。當微粒子經過本身的整個時間周期湮滅后。發射列表將自動刪除這些微粒子,然后將它們送回到粒子池。粒子池的使用不但提高粒子系統的性能,還減少了粒子初始化迭代的次數,并控制了粒子的數量。
(4)更新粒子。發射器發射粒子后,粒子自身的屬性狀態和運動狀態將伴隨時間的連續變化而更新。因粒子系統控制了粒子的生命周期。故當粒子湮滅時,粒子池將隨之更新發射列表以配合新粒子的產生。
(5)渲染粒子。當粒子的運動屬性和時間屬性都設置好后,即進入粒子渲染準備階段,在該階段,可進行粒子的材質、紋理、貼圖、形變等設置。為了節省硬件開支,提高渲染速度,可以首先使用正方形或球體來模擬微粒子。直到對運動形態滿意后,可進行粒子系統的正式渲染,包括加入粒子的透明度和紋理形狀等屬性的渲染。通過不斷的調整渲染參數,以使粒子達到視頻特效的預定要求。
獨立于操作系統和Windows, Open GL 作為一個方便和強大的底層圖形庫。基于它的應用程序可以很容易地跨平臺移植;利用Open GL 實現粒子系統在三維軟件中的完美運行,既方便又有效。基于粒子系統模型的創建,maya 粒子系統編輯器把編碼使用開放在Open GL 開發庫上。系統編輯器屬性設置窗口共有三種類別,分別是:粒子系統整體屬性、粒子系統效果屬性和粒子發射器數據。Maya 粒子場景中的可視化效果會隨屬性修改的參數變化而實時變化。故用戶可以通過調整屬性參數來控制各種場景的仿真效果。
Open GL 建立了虛擬環境平臺和虛擬的建模方法和算法,簡化了粒子系統的實時性能,并且了增強粒子系統真實感。以實時為出發點,解算器控制粒子產生的面積和粒子的產生數量,利用有限的顯示效果來實現極致的視頻特效。粒子特效系統不但可以應用于影視節目的虛擬場景,還可以用于游戲的制作。在視頻特效領域有著非常廣闊的發展應用前景,故基于Open GL 的粒子特效對視頻特效制作的發展具有重要意義。