OGRE引擎架構(gòu)如何實(shí)現(xiàn)三維虛擬舞臺燈光效果
使用OGRE引擎的架構(gòu),能夠更加方便的模擬逼真的三維舞臺燈光環(huán)境,虛擬技術(shù)本身所具有的臨場感和交互能力不僅可以將靜態(tài)的設(shè)計(jì)和創(chuàng)作轉(zhuǎn)化為動態(tài)形式的再現(xiàn),而且還可以及時地捕捉和展現(xiàn)設(shè)計(jì)者的構(gòu)思、創(chuàng)意和靈感,一個成熟而完善的虛擬設(shè)計(jì)系統(tǒng)平臺無論是對于燈光設(shè)計(jì)師、演出導(dǎo)演、燈光控制操作者,還是對于燈光美術(shù)教學(xué)和做燈光效果演示等都是一個非常專業(yè)且實(shí)用的設(shè)計(jì)工具和得力助手。而實(shí)時方便的可交互性功能,則使得系統(tǒng)更加具有實(shí)時性和可操作性。本系統(tǒng)提供一個實(shí)時可交互的操作環(huán)境,滿足了用戶的需求。
一、系統(tǒng)架構(gòu)
1. 邏輯架構(gòu)
無論是游戲還是虛擬現(xiàn)實(shí),為了表現(xiàn)其逼真性,虛擬場景大多比較復(fù)雜,所以虛擬場景的創(chuàng)建大多由3D 建模工具生成,然后對場景實(shí)時渲染輸出。舞臺燈光設(shè)計(jì)由3DMAX 提供基本的場景文件,通過DOM (Document Object Model) 接口進(jìn)行解析,并進(jìn)行資源的導(dǎo)入和場景的組織。最終進(jìn)入OGRE
系統(tǒng)進(jìn)行渲染。
光照模型是多種多樣的,需要在場景中分別實(shí)現(xiàn)它們的效果。同時用戶也要能夠通過UI 界面進(jìn)行各種各樣的操作。系統(tǒng)要求操作復(fù)雜度高,計(jì)算量大,可擴(kuò)展性強(qiáng)。需要設(shè)計(jì)與建立一個數(shù)據(jù)處理與計(jì)算效率高、可擴(kuò)展性強(qiáng)、功能模塊松搞合強(qiáng)內(nèi)聚的總體實(shí)現(xiàn)架構(gòu)(如圖1所示),系統(tǒng)分為資源層,接口層,渲染層。
資源層:由3DMAX + Ofusion插件導(dǎo)出,生成場景組織,材質(zhì),實(shí)體,貼圖等系統(tǒng)所需的資源文件。
接口層:負(fù)責(zé)將這些資源文件導(dǎo)入場景中。
渲染層:實(shí)現(xiàn)舞臺場景和燈光的渲染,系統(tǒng)資源的管理,用戶交互的實(shí)時響應(yīng)等。
二、系統(tǒng)實(shí)現(xiàn)關(guān)鍵技術(shù)研究
1. 場景的組織和形成
系統(tǒng)所需的資源文件由3DMAX通過Ofusion插件導(dǎo)出。導(dǎo)出的場景組織文件是XML格式的,記錄著舞臺的一些基本的參數(shù)和每一個舞臺實(shí)體的位置,朝向等各個方面的信息。場景節(jié)點(diǎn)是以樹狀形式組織的每個節(jié)點(diǎn)都有相應(yīng)的父節(jié)點(diǎn),因此我們可以通過對父節(jié)點(diǎn)的操作,方便的使多個子節(jié)點(diǎn)同時移動和旋轉(zhuǎn)。
2. 三維坐標(biāo)變換
要把三維的渲染結(jié)果展現(xiàn)到二維的屏幕上,需要進(jìn)行從三維坐標(biāo)到平面坐標(biāo)的轉(zhuǎn)換。首先,需要建立一個三維坐標(biāo)系,我們創(chuàng)建一個三維的斜二軸側(cè)坐標(biāo)系,其中x軸方向?yàn)樗较蜃?,z軸方向?yàn)樨Q直向上,y軸的方向?yàn)榕c水平方向成45°角。在該坐標(biāo)系中顯示圖形時,x軸和z軸方向的長度取圖形實(shí)際長度,而y 軸方向的長度則取實(shí)際長度的一半。
公式中,ηx、ηy、ηz是x、y、z軸的軸變形系數(shù)。進(jìn)行軸測投影變換,可得下列方程式:
其中f和d是軸測變換矩陣系數(shù),求解這個方程式,可得:
為了使立體感更強(qiáng),令d=f= -0.354,可以求出軸測技影變換矩陣:
接下來,需要將圖形的三維坐標(biāo)轉(zhuǎn)化為屏幕上的設(shè)備坐標(biāo),在透視窗口中,坐標(biāo)原點(diǎn)位于屏幕的左上角,向右的方向?yàn)閤軸的正方向,向下的方向?yàn)閥軸的正方向。
假設(shè)在三維空間中的一點(diǎn)(x ,y ,z) ,在設(shè)備坐標(biāo)中的坐標(biāo)是(xx,yy) ,運(yùn)用剛剛的軸測投影變換矩陣,可以得到如下轉(zhuǎn)換公式:
公式中xX、yY,是三維坐標(biāo)原點(diǎn)在設(shè)備坐標(biāo)系中的相對坐標(biāo)。
將公式(4)代入(5),可以得出變換方程:
3. 粒子系統(tǒng)效果模擬
粒子是用四邊形來表示的。它有長寬、方向、顏色、壽命、數(shù)量、材質(zhì)、重量和速率等屬性。粒子的屬性由粒子發(fā)射器(Particle Emitter) 和粒子特效影響器(Particle Affector) 共同決定。粒子發(fā)射器負(fù)責(zé)粒子的發(fā)射,給出粒子在發(fā)射時的一些屬性,包括運(yùn)動速率、顏色、生命期等;粒子特效影響器負(fù)責(zé)粒子從發(fā)射后到消亡前這一階段粒子屬性的改變,可以用來模擬重力、拉力、顏色衰變等特殊效果。當(dāng)粒子發(fā)射器不停地噴發(fā)出大量粒子時,就可以形成煙、火和爆炸等效果。
OGRE提供了粒子系統(tǒng)腳本語言,可以在腳本中設(shè)置粒子的各種屬性。
本文中,通過粒子系統(tǒng)描述了舞臺煙花,下雨和云霧的效果。結(jié)合OGRE 的動畫效果,可以實(shí)現(xiàn)更加逼真的場景粒子效果。
4. 光照效果模擬
光照是舞臺效果的關(guān)鍵因素,也是本設(shè)計(jì)系統(tǒng)核心的技術(shù)。渲染引擎提供了幾種常用的燈光,比如點(diǎn)光源、方向光源和聚光燈。但是對于真實(shí)的舞臺燈光效果模擬,這些是不夠的。對于一些特殊的舞臺燈光效果,比如體積光等,需要通過可編程渲染管線技術(shù)(shader) 來實(shí)現(xiàn)。shader有兩種,一種是頂點(diǎn)級的,稱為vertex shader(OpenGL稱為ve吐白program) ,取代固定渲染管線中的變換和光照部分,程序員可以自己控制頂點(diǎn)變換、光照等。硬件中處理頂點(diǎn)shader的單元叫vertex shader processors (頂點(diǎn)處理單元)。一種是像素級的,稱為pixel shader( OpenGL 稱為fragment program) ,取代固定渲染管線中的光柵化部分,程序員可以自己控制像素顏色和紋理采樣等。硬件中處理像素shader 的單元叫pixel shader processors (像素處理單元)。
為了使燈光的模擬更有真實(shí)感,還需要借助3D的光照方程來模擬計(jì)算。這里往往是一種近似的算法,但是它能達(dá)到一個很好的模擬效果和很快的運(yùn)行速度。常見的光照模型有兩種:全局光照模型和直接光照模型。本系統(tǒng)采用全局光照模型。全局光照模型是一個能很好的模擬真實(shí)感的光照模型。它可以同時考慮到光線照射到物體表面上產(chǎn)生的反射、折射、透射、陰影和物體相互間作用的光照效果。利用全局光照模型,需要模擬實(shí)際光線的傳播過程和能量交換的輻射度。
對于光線跟蹤,需要考慮光源的直接照射結(jié)果以及反射光對該點(diǎn)的照明效果,把兩者綜合起來:
接下來計(jì)算輻射度,需要計(jì)算每個面片上的光照情況:
這里L(fēng)d是光源照射的光,T是光照傳播因子,TLi是其他面片反射來的光照,L便是最終要求的光照值。
系統(tǒng)界面及總結(jié)
三、系統(tǒng)界面
系統(tǒng)可以實(shí)現(xiàn)舞臺的切換,舞臺中各種場景效果,也可以與舞臺場景和各種燈光進(jìn)行實(shí)時交互。如圖4為舞臺煙花效果圖,圖5為體積光效果圖。
文章來源:星光舞臺設(shè)備官網(wǎng) ©版權(quán)所有。未經(jīng)許可,不得轉(zhuǎn)載。