尹 君 趙 靜 鄧 濤 張 寧
(河南省科學(xué)技術(shù)信息研究院,河南 鄭州450003)
OpenGL(Open Graphics Library)是圖形應(yīng)用軟件的專業(yè)的程序接口,它具有跨編程語(yǔ)言、跨不同平臺(tái)的接口規(guī)格(API)。OpenGL 本質(zhì)上是一種規(guī)范,它嚴(yán)格規(guī)定了函數(shù)的執(zhí)行情況和執(zhí)行范圍,以及他們的輸出值域。而如何實(shí)現(xiàn)內(nèi)部的單獨(dú)函數(shù)則是由OpenGL 庫(kù)的開(kāi)發(fā)者決定的。目前OpenGL 的最新的規(guī)范庫(kù)是OpenGL 4.6。OpenGL 作為一個(gè)調(diào)用方便、功能強(qiáng)大的底層圖形庫(kù),是幾乎所有三維軟件、游戲接口的一個(gè)標(biāo)準(zhǔn)。而Maya、3DsMax 等專業(yè)的三維軟件,則是依據(jù)OpenGL 圖形接口進(jìn)行設(shè)計(jì)的,特別是在3D 圖像渲染管線,專業(yè)的三維軟件與支持OpenGL 的高級(jí)別的顯卡相結(jié)合,使圖像渲染達(dá)到相應(yīng)任務(wù)的要求。圖形渲染流水線程可以分為幾個(gè)階段,每個(gè)階段是前一階段輸出后的結(jié)果,這些階段都是高度專業(yè)化的,具有并行處理的特點(diǎn)。調(diào)用OpenGL 圖形庫(kù)的每個(gè)顯卡都有數(shù)萬(wàn)個(gè)小核心處理器,它們?cè)贕PU 上為每個(gè)階段運(yùn)行自己的微程序,并快速處理圖形渲染過(guò)程,這個(gè)微程序就是著色器。著色器用著色器語(yǔ)言(GLSL)編寫。由于GPU 上沒(méi)有默認(rèn)的頂點(diǎn)和片段著色器,因此必須至少定義一個(gè)頂點(diǎn)著色器和一個(gè)片段著色器(圖1)。通常,OpenGL 圖形庫(kù)為Maya 和3DMax 提供圖形輸入和輸出的著色器標(biāo)準(zhǔn),而Maya 和3DsMax 是OpenGL 圖形界面的專業(yè)編程軟件。它們是標(biāo)準(zhǔn)的編程接口軟件,所以一個(gè)好的OpenGL 圖形卡可以很好地與Maya 配合使用,為視頻特效提供良好的制作基礎(chǔ)。
圖1 著色器原理示意圖
在視頻節(jié)目特效表達(dá)上,OpenGL 粒子系統(tǒng)能很好的實(shí)現(xiàn)制作者的想法,使視頻特效更加出色。
視頻特效粒子系統(tǒng)自從里夫斯(Reeves)于1983 年提出粒子系統(tǒng)的概念以來(lái),就有各種各樣的粒子系統(tǒng)定義。粒子系統(tǒng)的一個(gè)普遍公認(rèn)的定義是:粒子系統(tǒng)由具有相同屬性規(guī)則的微小個(gè)體組成,大量微小個(gè)體可以隨機(jī)顯示不同特征的粒子的集合體[1]。
粒子系統(tǒng)具有以下性質(zhì)。
(1)單獨(dú)的粒子無(wú)法形成粒子系統(tǒng),一般的粒子系統(tǒng)通常由許多單獨(dú)的粒子集組成。
(2)粒子系統(tǒng)中的每一個(gè)微粒子的集體表達(dá)屬性是一致的。例如,在模擬煙火時(shí),每個(gè)煙火束都呈現(xiàn)出不同的色彩,運(yùn)動(dòng)軌跡表現(xiàn)為向上跳躍并向下擴(kuò)散直至消失。
(3)OpenGL 粒子系統(tǒng)中微粒子的初始屬性具有一定程度的隨機(jī)性。例如,在重力作用下雨滴降落場(chǎng)景中,每個(gè)微小雨粒子具有不同的路徑和方向、滴落速度等初始屬性。OpenGL 圖形庫(kù)的粒子系統(tǒng)中的每個(gè)粒子的初始屬性都是相同的,如:?jiǎn)蝹€(gè)粒子的發(fā)射速度、大小、形狀、受立場(chǎng)的影響值域等。時(shí)間在粒子系統(tǒng)中同樣存在,出生、運(yùn)動(dòng)和死亡每個(gè)微粒子都要經(jīng)歷的時(shí)間節(jié)點(diǎn),時(shí)間的流逝加載于虛擬世界中的每一個(gè)粒子,故以上屬性與時(shí)間存在相應(yīng)的函數(shù)關(guān)系。作為視頻特效中描述不規(guī)則微個(gè)體最常用的理論,粒子系統(tǒng)理論也愈加成熟。作為有一定的生命屬性的微小粒子,粒子的隨機(jī)分布性和指定力場(chǎng)的無(wú)限干擾性。其變化形式和運(yùn)動(dòng)屬性每一刻都存在變化。粒子系統(tǒng)充分證明了不規(guī)則模糊目標(biāo)的隨機(jī)性和動(dòng)態(tài)性。它模擬了火焰、天空、大地和叢林等自然景觀。一般認(rèn)為粒子系統(tǒng)是最成功的模擬不規(guī)則微實(shí)體時(shí)模糊圖像的生成方法[2]。因此,OpenGL粒子系統(tǒng)在Maya 中的基本生態(tài)原理是:
(1)粒子系統(tǒng)的實(shí)體構(gòu)成假說(shuō)。粒子的有限屬性集可以填充連續(xù)和離散的運(yùn)動(dòng)以及確定的粒子在粒子系統(tǒng)中運(yùn)動(dòng)的模糊對(duì)象。在不間斷的運(yùn)動(dòng)時(shí)間節(jié)點(diǎn)內(nèi),它們具有特定的空間分布的廣度和深度。
(2)假定粒子系統(tǒng)中的微粒子實(shí)體彼此獨(dú)立。
(3)微實(shí)體粒子屬性的假設(shè)原理。粒子系統(tǒng)中微實(shí)體粒子的存在不是抽象的,而是具有一定的屬性特征。粒子包括空間位置屬性,質(zhì)量屬性,運(yùn)動(dòng)屬性(例如加速度和速度),外觀屬性(例如亮度,尺寸,顏色,形狀)和生產(chǎn)屬性(例如生命周期)等。隨著時(shí)間的流逝,以上的粒子屬性都會(huì)隨之產(chǎn)生相應(yīng)的緩慢變化。
(4)粒子的時(shí)間生命假設(shè)。每個(gè)粒子系統(tǒng)都有一個(gè)生命周期概念,每個(gè)粒子在特定時(shí)間段內(nèi)都需要經(jīng)歷出生,活動(dòng)和死亡的三個(gè)基本生命過(guò)程。
(5)粒子運(yùn)動(dòng)的假設(shè)。在粒子的生命周期中,它們都能產(chǎn)生某些類型的運(yùn)動(dòng)。粒子系統(tǒng)主要描述不規(guī)則物體,例如波浪,火焰,爆炸和瀑布。尤其是在動(dòng)態(tài)材料仿真和動(dòng)態(tài)流體仿真中,粒子系統(tǒng)具有自己的無(wú)可比擬優(yōu)勢(shì)并具有兩個(gè)特征。首先它不僅由顆粒組成,而且還比較簡(jiǎn)單,并且具有可以自由調(diào)整的特定結(jié)構(gòu)屬性。其次,可以在創(chuàng)建過(guò)程中將隨機(jī)屬性添加到粒子系統(tǒng)模型中,并且創(chuàng)建好的模型不需要太多的計(jì)算時(shí)間。
一個(gè)基本的粒子系統(tǒng)是由一組粒子構(gòu)成的子系列,在創(chuàng)建過(guò)程中粒子不是標(biāo)準(zhǔn)的幾何體,粒子系統(tǒng)也不是靜止不動(dòng)的,子系列中的各個(gè)粒子都保持著本身的生命周期,粒子被創(chuàng)建,它們的初始速度和狀態(tài)隨時(shí)間變化而變化并直至死亡。粒子的各種移動(dòng)和變化效果是通過(guò)調(diào)整生命周期屬性參數(shù)而產(chǎn)生的并且具有粒子本身的隨機(jī)性。此隨機(jī)性使粒子系統(tǒng)產(chǎn)生的特殊效果更加逼真。May 的特效粒子系統(tǒng)通過(guò)以下步驟構(gòu)建:
(1)創(chuàng)建微粒子實(shí)體。創(chuàng)建Maya 粒子系統(tǒng),首先要?jiǎng)?chuàng)建微粒子實(shí)體,在初次創(chuàng)建粒子運(yùn)動(dòng)過(guò)程中,需要掌握粒子的移動(dòng)方向和速度,當(dāng)前位置,粒子的顏色,紋理變化等微粒子實(shí)體的基本屬性。圖2 為maya 中的粒子屬性列表,它包含了生命當(dāng)前生命值、生命周期變化值、粒子當(dāng)前大小、粒子當(dāng)前運(yùn)動(dòng)速度、粒子運(yùn)動(dòng)加速度等屬性。
圖2 粒子屬性列表
(2)創(chuàng)建粒子發(fā)射器。創(chuàng)建好基本微粒子實(shí)體后,必須創(chuàng)建粒子發(fā)射器來(lái)構(gòu)建復(fù)雜的粒子屬性。該發(fā)射器可以控制微粒子實(shí)體的發(fā)射角度和總體數(shù)量,以及和其有關(guān)的整體的粒子參數(shù)屬性設(shè)置。如起始發(fā)射位置、起始發(fā)射速度、發(fā)射加速度、發(fā)射角度方向、粒子初始大小等參數(shù)設(shè)置。在Maya 中可在Nparticle命令欄中構(gòu)建該發(fā)射器。
(3)創(chuàng)建粒子。Maya 粒子系統(tǒng)含有數(shù)量龐大的單獨(dú)微粒子,因此性能消耗是必須要考慮的。創(chuàng)建相對(duì)應(yīng)的粒子池是提高粒子系統(tǒng)的性能必選方案,大量的微粒子在初始化參數(shù)后放入該粒子池中。當(dāng)發(fā)射器開(kāi)始發(fā)射微粒子時(shí),粒子池中的微粒子降被刪除并遷徙放置在初始發(fā)射列表中。當(dāng)微粒子經(jīng)過(guò)本身的整個(gè)時(shí)間周期湮滅后。發(fā)射列表將自動(dòng)刪除這些微粒子,然后將它們送回到粒子池。粒子池的使用不但提高粒子系統(tǒng)的性能,還減少了粒子初始化迭代的次數(shù),并控制了粒子的數(shù)量。
(4)更新粒子。發(fā)射器發(fā)射粒子后,粒子自身的屬性狀態(tài)和運(yùn)動(dòng)狀態(tài)將伴隨時(shí)間的連續(xù)變化而更新。因粒子系統(tǒng)控制了粒子的生命周期。故當(dāng)粒子湮滅時(shí),粒子池將隨之更新發(fā)射列表以配合新粒子的產(chǎn)生。
(5)渲染粒子。當(dāng)粒子的運(yùn)動(dòng)屬性和時(shí)間屬性都設(shè)置好后,即進(jìn)入粒子渲染準(zhǔn)備階段,在該階段,可進(jìn)行粒子的材質(zhì)、紋理、貼圖、形變等設(shè)置。為了節(jié)省硬件開(kāi)支,提高渲染速度,可以首先使用正方形或球體來(lái)模擬微粒子。直到對(duì)運(yùn)動(dòng)形態(tài)滿意后,可進(jìn)行粒子系統(tǒng)的正式渲染,包括加入粒子的透明度和紋理形狀等屬性的渲染。通過(guò)不斷的調(diào)整渲染參數(shù),以使粒子達(dá)到視頻特效的預(yù)定要求。
獨(dú)立于操作系統(tǒng)和Windows, Open GL 作為一個(gè)方便和強(qiáng)大的底層圖形庫(kù)?;谒膽?yīng)用程序可以很容易地跨平臺(tái)移植;利用Open GL 實(shí)現(xiàn)粒子系統(tǒng)在三維軟件中的完美運(yùn)行,既方便又有效。基于粒子系統(tǒng)模型的創(chuàng)建,maya 粒子系統(tǒng)編輯器把編碼使用開(kāi)放在Open GL 開(kāi)發(fā)庫(kù)上。系統(tǒng)編輯器屬性設(shè)置窗口共有三種類別,分別是:粒子系統(tǒng)整體屬性、粒子系統(tǒng)效果屬性和粒子發(fā)射器數(shù)據(jù)。Maya 粒子場(chǎng)景中的可視化效果會(huì)隨屬性修改的參數(shù)變化而實(shí)時(shí)變化。故用戶可以通過(guò)調(diào)整屬性參數(shù)來(lái)控制各種場(chǎng)景的仿真效果。
Open GL 建立了虛擬環(huán)境平臺(tái)和虛擬的建模方法和算法,簡(jiǎn)化了粒子系統(tǒng)的實(shí)時(shí)性能,并且了增強(qiáng)粒子系統(tǒng)真實(shí)感。以實(shí)時(shí)為出發(fā)點(diǎn),解算器控制粒子產(chǎn)生的面積和粒子的產(chǎn)生數(shù)量,利用有限的顯示效果來(lái)實(shí)現(xiàn)極致的視頻特效。粒子特效系統(tǒng)不但可以應(yīng)用于影視節(jié)目的虛擬場(chǎng)景,還可以用于游戲的制作。在視頻特效領(lǐng)域有著非常廣闊的發(fā)展應(yīng)用前景,故基于Open GL 的粒子特效對(duì)視頻特效制作的發(fā)展具有重要意義。