沈縈華,方瑜驊,呂朝輝,李春紅
(中國傳媒大學,北京 100024)
開發舞臺燈光模擬系統對于舞臺燈光設計工作有重要的意義,舞臺模型是多種多樣的,對于不同的舞臺,需要相應的燈光設計。這樣,在舞臺燈光設計工作過程中便會有許許多多的不確定因素。在這篇文章中,通過舞臺燈光效果的模擬,可以降低能源和時間的投入。
通過使用OGRE引擎的架構,能夠更加方便的模擬逼真的三維舞臺燈光環境,虛擬技術本身所具有的臨場感和交互能力不僅可以將靜態的設計和創作轉化為動態形式的再現,而且還可以及時地捕捉和展現設計者的構思、創意和靈感,一個成熟而完善的虛擬設計系統平臺無論是對于燈光設計師、演出導演、燈光控制操作者,還是對于燈光美術教學和做燈光效果演示等都是一個非常專業且實用的設計工具和得力助手。而實時方便的可交互性功能,則使得系統更加具有實時性和可操作性。本系統提供一個實時可交互的操作環境,滿足了用戶的需求。
無論是游戲還是虛擬現實,為了表現其逼真性,虛擬場景大多比較復雜,所以虛擬場景的創建大多由3D建模工具生成,然后對場景實時渲染輸出。舞臺燈光設計由3DMAX提供基本的場景文件,通過DOM(Document Object Model)接口進行解析,并進行資源的導入和場景的組織。最終進入OGRE系統進行渲染[1]。
光照模型是多種多樣的,需要在場景中分別實現它們的效果。同時用戶也要能夠通過UI界面進行各種各樣的操作。系統要求操作復雜度高,計算量大,可擴展性強。需要設計與建立一個數據處理與計算效率高、可擴展性強、功能模塊松耦合強內聚的總體實現架構[2],如圖1所示:

圖1 系統架構圖
系統分為資源層,接口層,渲染層。
資源層:由3DMAX+Ofusion插件導出,生成場景組織,材質,實體,貼圖等系統所需的資源文件。
接口層:負責將這些資源文件導入場景中。
渲染層:實現舞臺場景和燈光的渲染,系統資源的管理,用戶交互的實時響應等。
系統所需的資源文件由3DMAX通過Ofusion插件導出。導出的場景組織文件是XML格式的,記錄著舞臺的一些基本的參數和每一個舞臺實體的位置,朝向等各個方面的信息。
場景節點是以樹狀形式組織的[3],每個節點都有相應的父節點,因此我們可以通過對父節點的操作,方便的使多個子節點同時移動和旋轉。
圖2是OGRE中場景圖和場景內容的關系描述圖。

圖2OGRE場景管理圖
要把三維的渲染結果展現到二維的屏幕上,需要進行從三維坐標到平面坐標的轉換。
首先,需要建立一個三維坐標系,我們創建一個三維的斜二軸側坐標系,其中x軸方向為水平向左,z軸方向為豎直向上,y軸的方向為與水平方向成45°角。在該坐標系中顯示圖形時,x軸和 z軸方向的長度取圖形實際長度,而y軸方向的長度則取實際長度的一半。

公式中,ηx、ηy、ηz是 x、y、z 軸的軸變形系數。進行軸測投影變換,可得下列方程式:

其中f和d是軸測變換矩陣系數,求解這個方程式,可得

為了使立體感更強,令d=f=-0.354,可以求出軸測投影變換矩陣:

接下來,需要將圖形的三維坐標轉化為屏幕上的設備坐標,在透視窗口中,坐標原點位于屏幕的左上角,向右的方向為x軸的正方向,向下的方向為y軸的正方向。假設在三維空間中的一點(x,y,z),在設備坐標中的坐標是(xx,yy),運用剛剛的軸測投影變換矩陣,可以得到如下轉換公式:

公式中xX,yY,是三維坐標原點在設備坐標系中的相對坐標。
將公式(4)代入(5),可以得出變換方程:

粒子是用四邊形來表示的。它有長寬、方向、顏色、壽命、數量、材質、重量和速率等屬性。粒子的屬性由粒子發射器(Particle Emitter)和粒子特效影響器(Particle Affector)共同決定。粒子發射器負責粒子的發射,給出粒子在發射時的一些屬性,包括運動速率、顏色、生命期等;粒子特效影響器負責粒子從發射后到消亡前這一階段粒子屬性的改變,可以用來模擬重力、拉力、顏色衰變等特殊效果。當粒子發射器不停地噴發出大量粒子時,就可以形成煙、火和爆炸等效果。
OGRE提供了粒子系統腳本語言,可以在腳本中設置粒子的各種屬性。一個簡單的粒子腳本文件結構如下所示,
Particle
{
系統屬性
發射器
{
發射器屬性
}
影響器
{
影響器屬性
}
}
文件里可以包含粒子系統屬性、多個發射器和多個影響器。因此當需要時,可以自己實現粒子和粒子發生器,并在系統中使用它們。
本文中,通過粒子系統描述了舞臺煙花,下雨和云霧的效果。結合OGRE的動畫效果,可以實現更加逼真的場景粒子效果。
光照是舞臺效果的關鍵因素,也是本設計系統核心的技術[4]。渲染引擎提供了幾種常用的燈光,比如點光源、方向光源和聚光燈。但是對于真實的舞臺燈光效果模擬,這些是不夠的。對于一些特殊的舞臺燈光效果,比如體積光等,需要通過可編程渲染管線技術(shader)來實現。shader有兩種,一種是頂點級的,稱為vertex shader(OpenGL稱為vertex program),取代固定渲染管線中的變換和光照部分,程序員可以自己控制頂點變換、光照等。硬件中處理頂點shader的單元叫vertex shader processors(頂點處理單元)。一種是像素級的,稱為pixel shader(OpenGL稱為fragment program),取代固定渲染管線中的光柵化部分,程序員可以自己控制像素顏色和紋理采樣等。硬件中處理像素shader的單元叫pixel shader processors(像素處理單元)。
為了使燈光的模擬更有真實感,還需要借助3D的光照方程來模擬計算。這里往往是一種近似的算法,但是它能達到一個很好的模擬效果和很快的運行速度。常見的光照模型有兩種:全局光照模型和直接光照模型。本系統采用全局光照模型。
全局光照模型是一個能很好的模擬真實感的光照模型。它可以同時考慮到光線照射到物體表面上產生的反射、折射、透射、陰影和物體相互間作用的光照效果。利用全局光照模型,需要模擬實際光線的傳播過程和能量交換的輻射度[5]。
對于光線跟蹤,需要考慮光源的直接照射結果以及反射光對該點的照明效果,把兩者綜合起來:

接下來計算輻射度,需要計算每個面片上的光照情況:

這里Ld是光源照射的光,T是光照傳播因子,TLi是其他面片反射來的光照,L便是最終要求的光照值[6]。
圖4為舞臺煙花效果圖。圖5為體積光效果圖。系統可以實現舞臺的切換,舞臺中各種場景效果,也可以與舞臺場景和各種燈光進行實時交互。

圖4 舞臺煙火

圖5 體積光效果
舞臺燈光設計已經成為照明設計師的一個主要問題。他們經常要面對這樣高成本,高能耗和高耗時的問題。隨著信息產業的蓬勃發展,專業舞臺燈光領域也跨入了全面的數字化時代。系統利用OGRE渲染引擎建立虛擬舞臺,并且對舞臺燈光設計及調整進行實時呈現,同時為舞臺燈光設計師提供了豐富的系統交互功能,能夠很好的解決這一難題。
接下來,系統還需要進一步豐富舞臺的燈光模型,能夠模擬各種各樣的燈光,比如:柔光燈,閃光燈,追光燈等。用戶的操作界面也需要進一步優化,提高用戶操作的友好性。
[1] S Yan,D Xu,B Zhang,H Zhang.Graph embedding:A general framework for dimensionality reduction[A].CVPR05[C].San Diego:IEEE CS Press,2005.830 - 837.
[2] Wendy Jones.Beginning DirectX9[M].MA,Boston:Prem ier Press,2004.
[3] Z L Zheng,J Yang.Supervised Locality Pursuit Embedding for Pattern Classification[J].Image and Vision Computing,2006,24:819 - 826.
[4] Randima Fernando.GPU精粹——實時圖形編程的技術、技巧和技藝[M].北京:人民郵電出版社,2006.100 -106.
[5] 朱騰輝,劉學慧,吳恩華.基于象素的光照計算技術[J].計算機輔助設計與圖形學學報,2002,14(9):861 -865.
[6] Tomas Akenine -Moller,Eric Haines.實時計算機圖形學[M].北京:北京大學出版社,2004:20-21.