3d游戲圖形引擎的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
3d游戲圖形引擎的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
3d游戲圖形引擎的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
3d游戲圖形引擎的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
3d游戲圖形引擎的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

3d游戲圖形引擎的設(shè)計(jì)與實(shí)現(xiàn)

隨著扎克盜賊的性能和速度的提高,網(wǎng)絡(luò)游戲在中國的開發(fā)日益激烈。3D游戲因其逼真、虛幻的場景畫面和人物造型,以及燈光照明效果和爆炸煙火等特效,已取代了2D游戲的地位,成為市場上的主流。從內(nèi)部技術(shù)的角度講,這主要?dú)w功于3D圖形渲染器(嵌在客戶端)。即如果一款網(wǎng)絡(luò)游戲沒有一個高效的3D圖形渲染器,那么它很難吸引玩家的目光。渲染器是3D游戲引擎中最重要的部分之一。現(xiàn)在業(yè)界和學(xué)術(shù)界對于渲染器的架構(gòu)沒有形成統(tǒng)一的標(biāo)準(zhǔn),在大量閱讀文獻(xiàn)和編程的基礎(chǔ)上,本文提出了一個渲染器的構(gòu)架。首先介紹渲染器的構(gòu)架和實(shí)現(xiàn)其中每個子模塊的算法,之后重點(diǎn)講解場景管理、光照模型和紋理系統(tǒng)兩個重要的子系統(tǒng),最后介紹了渲染房間和地形這兩種特殊場景的高效算法。13瞳石機(jī)底層次設(shè)計(jì)按照不同的功能和任務(wù),如圖1所示,可以把渲染器整個底層次細(xì)分為三維模型、場景管理和特效三個子系統(tǒng)。一般由Direct3D或者OpenGL來實(shí)現(xiàn)它們。1.1光照和表面性質(zhì)子模塊三維模型子系統(tǒng)負(fù)責(zé)游戲場景中三維物體的創(chuàng)建和渲染,它包含如圖2所示的三維建模、光照和表面性質(zhì)、鏡頭控制、房間和地形渲染四個子模塊。三維建模子模塊是制作3D游戲模型的基礎(chǔ),3D游戲場景中的模型往往是3DMAX或是MAYA做出來的3D模型,模型中存儲了頂點(diǎn)的位置、面的組成、頂點(diǎn)的紋理坐標(biāo)、材質(zhì)和貼圖等需要的信息。光照和表面性質(zhì)子模塊主要負(fù)責(zé)物體真實(shí)感的繪制。3D游戲中,必須在三維空間設(shè)置光源,照射到三維物體上,才能使得物體表面有明暗的效果。表面性質(zhì)也是物體一類重要的參數(shù),比如顏色、反光度、凹凸性等,在游戲引擎中,一般采用材質(zhì)貼圖來模擬物體的表面性質(zhì)。鏡頭控制子模塊定義了游戲世界中視點(diǎn)的位置和方向等參數(shù)。在3D射擊和飛行模擬游戲中,鏡頭要隨著玩家的操縱而不斷地變化。如何簡單有效地定義并控制鏡頭,對三維游戲的總體效果起到很大的作用。除了鏡頭的拉近拉遠(yuǎn)之外,最重要的效果就是鏡頭的旋轉(zhuǎn)。在3D游戲中,一般采用Euler角或四元數(shù)法控制鏡頭的旋轉(zhuǎn)。房間和地形渲染子模塊是為了加快房間和地形兩種特殊場景的繪制而獨(dú)立出來的渲染子模塊。對于房間和地形采取與其他場景物體不同的渲染方法會大大提高游戲畫面繪制的速度和效果。1.2塊、拉拔面的空間劃分與排序模塊3D引擎最核心的部分是場景管理。場景管理負(fù)責(zé)空間的劃分和排序、可見性判斷和裁剪、碰撞檢測與反饋,與這三個功能相對應(yīng),場景管理子系統(tǒng)可劃分為三個模塊,即空間劃分與排序模塊、可見性判斷與裁剪模塊、碰撞檢測與反饋模塊(圖3)??臻g劃分與排序模塊的目的是為可見性判斷和碰撞檢測模塊提供支持。這個模塊最終會構(gòu)建出場景樹,使可視性問題和碰撞檢測問題都最終歸結(jié)為場景樹的遍歷與下溯??梢娦耘袛嗯c裁剪模塊利用場景樹判斷物體是否在視野中可見,剔除被遮擋或者視野外的物體,再對局部物體采用Z-緩存算法進(jìn)行排序和隱藏面消除工作。碰撞檢測與反饋模塊負(fù)責(zé)3D游戲中各物體之間的碰撞檢測以及物體與場景之間的碰撞檢測。碰撞檢測的過程是重要的。如果沒有它,游戲中的人物就會毫無遮攔地移動——如果考慮重力的話,則會一直不停地往下掉,直到符點(diǎn)數(shù)溢出(或受不了這一漫長的過程而離開游戲)為止。1.3游戲中的自然體驗(yàn)特效子系統(tǒng)(圖4)包括粒子系統(tǒng)、公告牌、霧效等模塊,負(fù)責(zé)在游戲世界中實(shí)時模擬各類自然現(xiàn)象,通過特效子系統(tǒng)處理的場景將會變得十分逼真和生動。粒子系統(tǒng)模塊模擬大量的自然現(xiàn)象,如火焰、噴泉、爆炸、魚群、氣體、星空等,它們的原理相似。一個粒子系統(tǒng)由帶有不同屬性的物體對象與其必須遵守的行為規(guī)則組成,確切地說這些屬性和規(guī)則依賴于想模擬的現(xiàn)象。一些粒子系統(tǒng)可能需要大量的屬性和復(fù)雜的規(guī)則,然而有些可能極為簡單。公告牌,在3D游戲中有著廣泛的應(yīng)用。它的本質(zhì)就是用預(yù)先做好的幾幅位圖來代替3D物體,極大地節(jié)省了資源和提高了速度。仔細(xì)觀察“魔法門”系列游戲,它的精靈,樹木,物品都是二維圖像,但由于它始終朝向觀察者,你根本看不到它“扁”的一面,所以給人一種立體的感覺。霧是一種自然現(xiàn)象,在大部分地方并不算常見,但是在現(xiàn)在的3D游戲中,卻是必不可少的一個元素。使用霧除了增加天氣系統(tǒng)的效果外,主要原因是受限于硬件的能力,3D游戲并不能把游戲中的整個場景渲染出來,只能繪制到一定的距離。在這個距離之外,即裁剪空間的后平面之后是一片空白。為了彌補(bǔ)這個空白,很多游戲就使用霧的效果來掩蓋。2渲染內(nèi)核的主要模塊和技術(shù)上節(jié)中我們分析3D游戲引擎渲染內(nèi)核的構(gòu)架,對其中的子系統(tǒng)進(jìn)行了介紹。下面,我們將詳細(xì)剖析其中的幾個模塊和實(shí)現(xiàn)它們的常用技術(shù)。2.1多重紋理映射光影貼圖技術(shù)是游戲引擎中最流行的光照處理方法,尤其在第一人稱射擊游戲中。光影貼圖是一種簡單而非常有效的光照處理方式。簡單來說,在每個多邊形上貼兩個紋理,第一個是常規(guī)的紋理,第二個是光照圖,第二紋理用來表達(dá)光強(qiáng)度的分布。圖5顯示了紋理與光影貼圖的結(jié)合,使其多邊形看起來具有陰影效果。在程序?qū)崿F(xiàn)上,可以采用多重紋理或多通道渲染來實(shí)現(xiàn)光影貼圖。多重紋理通過采用兩個紋理進(jìn)行乘法紋理混合一次渲染多邊形;而多通道渲染通過兩次渲染多邊形,每次貼上一個紋理可以達(dá)到與多重紋理相近的效果。在游戲引擎的設(shè)計(jì)中,通常采用多重紋理映射。因?yàn)樗^之多通道渲染有兩個好處:①速度快,多邊形無須進(jìn)行兩次光柵化,而且現(xiàn)今大多的3D加速卡都可對多重紋理渲染進(jìn)行硬件優(yōu)化,一些加速卡甚至可在單通道里應(yīng)用四個紋理甚至更多。②效果更好。圖6(a)是不支持多重紋理映射的顯卡渲染出來的Quake場景,而圖6(b)是支持多重紋理映射的顯卡繪制出來的場景。值得注意的是,光影貼圖技術(shù)多重紋理映射本質(zhì)上是在渲染之前預(yù)先生成的一種罐裝效果。在游戲的場景中燈光或物體都是運(yùn)動的,必須在每一幀渲染之前生成相應(yīng)的光照貼圖(光照紋理),按照動態(tài)燈光或物體運(yùn)動的方式修改光照紋理。雖然光影貼圖可以快速地渲染,但是存儲這些燈光紋理所需的內(nèi)存消耗非常昂貴。而且如果場景中有多個燈光,對所有的物體重新生成光照紋理將極為耗費(fèi)CPU時間。許多游戲使用混合照明方式。以QuakeIII為例,場景使用光影貼圖,動畫模型使用頂點(diǎn)照明。預(yù)先處理的燈光不會對動畫模型產(chǎn)生正確的效果——整個多邊形模型得到燈光的全部光照值,而動態(tài)照明將被用來產(chǎn)生正確的效果。2.2圖像旋轉(zhuǎn)的控制鏡頭的位置和方向定義在世界坐標(biāo)系里面。在投影時,先要用一個矩陣把三維模型從本地空間轉(zhuǎn)換到世界空間,這個矩陣叫本地空間到世界空間轉(zhuǎn)換矩陣。然后再根據(jù)鏡頭的位置和方向,形成另外一個矩陣,稱為投影矩陣。因此,鏡頭的旋轉(zhuǎn),體現(xiàn)在投影矩陣上,而物體在三維空間的內(nèi)旋轉(zhuǎn)體現(xiàn)在本地空間到世界空間轉(zhuǎn)換矩陣上。矩陣運(yùn)算很難直接表達(dá)與空間鏡頭的變換。如果要算出中間位置,需要插值計(jì)算,但對矩陣進(jìn)行插值是非常困難的。在3D游戲中,一般采用Euler角或四元數(shù)法控制鏡頭的旋轉(zhuǎn)。Euler角表達(dá)旋轉(zhuǎn)比矩陣直觀,但是Euler角在插值方面的效果不是很好,會出現(xiàn)很生硬的效果,更為嚴(yán)重的是,它會導(dǎo)致萬向節(jié)鎖定。而四元數(shù)法被大量地使用在第三視角的游戲中,通過四元數(shù)法可以避免矩陣相乘,易于插值,并且插值的效果好,形成的動畫效果非常平滑柔和?!稑O品飛車》系列中的鏡頭控制便采用了四元數(shù)法,如圖7所示。2.3房間和地形2.3.1小區(qū)、入口和物品對象入口技術(shù)對于解決游戲中室內(nèi)場景的生成問題提供了一個較好的解決途徑,主要優(yōu)點(diǎn)是快速并且易于實(shí)現(xiàn)。所謂入口,實(shí)際上就是引擎中連接小區(qū)的一類特殊多邊形。通常它不需要紋理映射(除非它是半透明的),而是將小區(qū)中其他部分映射到該入口上。小區(qū)則用來描述游戲世界中房間的概念。從理論上來說,利用入口和小區(qū)可以描述游戲虛擬世界中任意不包含絕對曲面的三維世界。然而入口技術(shù)要求三維對象的剖分多邊形是凸的,這樣入口才可以正確進(jìn)行。同時,由于入口本身是用于解決多邊形排序并進(jìn)一步進(jìn)行隱藏面消除問題的,因而對于相互重疊的多邊形渲染它將無能為力。小區(qū)、入口和物體對象是引擎中構(gòu)造游戲世界空間的基本對象,引擎中分別定義了Sector、Portal和Thing類來對應(yīng)于以上三個概念。下面將分別加以說明:(1)sector(2)接受額定義(3)幕尺寸大小的二維矩形定義好空間后,在渲染之前,需要對視圖進(jìn)行裁剪。初始視圖是一個屏幕尺寸大小的二維矩形。每次進(jìn)入一個入口遞歸產(chǎn)生新的視圖時,需要將經(jīng)過透視矯正處理后的入口和初始視圖進(jìn)行求交,它們的交將構(gòu)成新的視圖?,F(xiàn)在PDA上的3D游戲也大量采用了入口技術(shù),如圖8所示。2.3.2lod技術(shù)的應(yīng)用目前的地形渲染技術(shù)主要有Voxel和LOD兩種。體素(Voxel)也就是VolumetricPixel。它是相對于像素來說的,如果像素是一個二維矩形,那么Voxel就是一個三維的立方體。三角洲部隊(duì)游戲就是使用了Voxel技術(shù)。關(guān)于Voxel的細(xì)節(jié)技術(shù)不是本文的重點(diǎn),不進(jìn)行深入的介紹。Voxel有一個天生的優(yōu)點(diǎn)就是渲染的時候它和場景的大小沒有關(guān)系,而且絕對不會渲染多余的東西(自帶裁剪功能)。它的復(fù)雜度只與我們需要的視野以及分辨率有關(guān),而且可以在不使用硬件加速的情況下達(dá)到比較理想的速度(三角洲部隊(duì)I就沒有使用硬件加速),生成的圖像也比較細(xì)膩。它的缺點(diǎn)就是不夠靈活。LOD(LevelofDetail)即層次細(xì)節(jié),它不同于體素技術(shù),它是一種使用多邊形的,真正的3D渲染技術(shù)。其根據(jù)一定的規(guī)則來簡化物體的細(xì)節(jié),可以根據(jù)需要來選擇不同細(xì)節(jié)程度的物體表達(dá)方式。如離觀察者近的選擇較高的細(xì)節(jié)程度、反之選擇較低的細(xì)節(jié)程度。用在地形渲染中,有時我們也稱它為多分辨率地形(MultiresolutionTerrain)渲染技術(shù)。地形作為一種特殊的幾何物體,在運(yùn)用LOD法則的時候有一些特殊的技巧。因?yàn)榈匦瓮ǔJ且粋€規(guī)則的矩形網(wǎng)格,其簡化模式可以有規(guī)則的簡化和非規(guī)則的簡化。規(guī)則的簡化通常是對這個矩形網(wǎng)格采用自頂向下(Up-to-Down)、分而治之的策略,典型的有四叉樹和二叉樹,它們從場景的最低細(xì)節(jié)層度開始,按需要不斷地提高細(xì)節(jié);非規(guī)則的簡化通常是采用自底向上(Down-to-Up)的方法來處理,它的實(shí)現(xiàn)通常較少?,F(xiàn)在的3D多采用基于ROAM實(shí)時動態(tài)LOD地形渲染,如圖9所示。2.4游戲中的場景樹對于由多個物體組成的3D場景,最簡單的組織方法是把其中的物體用一個鏈表連接起來,然后在繪制每一幀的時候依次送入渲染器進(jìn)行處理。顯然用鏈表管理不是一個很有效的方法,因?yàn)槠涮幚硪粋€普通的游戲場景都會顯得非常慢。因此可以采用基于空間排序的方法把游戲引擎中的渲染內(nèi)核設(shè)計(jì)成樹狀結(jié)構(gòu)(圖10)。在游戲中,場景管理樹被動態(tài)構(gòu)造。在圖10中的場景管理樹中,沒有加入攝像機(jī)(視點(diǎn))。值得注意的是,每一棵場景樹的根節(jié)點(diǎn)都會掛載一個攝像機(jī)。在有些情況下,把攝像機(jī)加入到場景管理樹中會簡化游戲的編程,如導(dǎo)彈飛行的場景中,視點(diǎn)應(yīng)隨著導(dǎo)彈的軌跡而運(yùn)動。場景樹是一個復(fù)合的數(shù)據(jù)結(jié)構(gòu),包括聲音處理、包圍體、坐標(biāo)變換、屬性和顯示的表面。在一次場景樹的遍歷中,聲音和圖形渲染同時被處理。而幾何變換和碰撞檢測等功能,通過局部遍歷實(shí)現(xiàn)。二叉空間分割樹(BSP)是最基本的空間排序方法,DOOM是第一個使用了二叉樹的商業(yè)游戲。它基于這樣一個事實(shí),即空間中的任何平面都將整個空間分割成兩個半空間,所有位于該平面某一側(cè)的點(diǎn)定義了一個半空間,位于另一側(cè)的點(diǎn)定義了另一個半空間,如圖11所示。在游戲中,可視性問題和碰撞檢測問題都最終歸結(jié)為樹的遍歷和下溯。而這些操作都是O(N)或O(logN)的,效率比較高,這對于游戲的實(shí)時畫面處理非常重要。2.5基于場景的bsp和z-存儲算法如果使用BSP樹進(jìn)行三維空間的排序和裁剪,再對局部物體采用Z-緩存算法進(jìn)行排序和隱藏面消除工作,就會大大優(yōu)化顯示的速度。具體操作如下:首先根據(jù)場景生成BSP樹,只需要細(xì)化到物體級,不一定是細(xì)化到多邊形級。這樣BSP的樹葉就是物體或物體的一部分。然后根據(jù)鏡頭的位置,迅速決定哪些物體是在可視空間之外,將它們忽略不處理。然后對剩下的物體的多邊形使用Z-緩存算法。這種方法是目前游戲中最常用的管理場景和渲染場景的方法。圖12所示的《反恐精英》游戲中,場景的處理采用了BSP樹對場景排序和裁剪。2.6兩個bsp樹的合并碰撞檢測是與空間劃分息息相關(guān)的,有了高效的空間排序,才有高效的碰撞檢測。在設(shè)計(jì)3D游戲引擎時,兩者要統(tǒng)籌考慮。游戲引擎中,如圖13所示的《鐵拳5》中,常采用空間剖分法。這個算法主要是使用BSP來進(jìn)行碰撞檢測,不需要額外的包容體(在層次包圍體樹算法中需要使用包圍體)。對兩個三維物體來說,如果各有其單獨(dú)的BSP樹(即所謂的本地BSP樹,或物體BSP樹),則碰撞檢測就變成了兩個BSP樹的合并,其操作如圖14所示。物體1和2,各由三個表面組成,這三個表面就是三個BSP分割平面,形成的本地BSP樹如第二行所示。特別值得注意的是本地BSP樹中包含了物體內(nèi)部外部的空間信息。以物體1的BSP樹為例,從樹的根部A分割平面起,左邊子樹代表A分割平面的內(nèi)向方面,即物體1的內(nèi)部。而右邊子樹代表A分割平面的外部。當(dāng)考慮兩個物體之間的相對關(guān)系時,以物體1的BSP樹為基礎(chǔ),考查物體2的三個表面,看他們是否有部分插入了物體1的內(nèi)部。如果是,則碰撞。首先看分割平面A,物體2在A向內(nèi)的方向,所以要分割到A左邊的子樹。然后考查分割平面B,發(fā)現(xiàn)D和F被B分割平面分割。其中D1,E1,E2,F1位于B分割平面向外的部分。而D2,D3,F2位于其向內(nèi)的部分。最后考查C分割平面,也就是到了物體1的BSP樹的樹葉。D2位于C分割平面的向內(nèi)部分。這樣,得出了D2位于物體1內(nèi)部的結(jié)論,也就是說物體2和物體1發(fā)生了碰撞。這種方法的優(yōu)越性在于BSP樹既比較精確,實(shí)時性能又很好。作為一種空間劃分和場景管理的方法,如果已經(jīng)在隱藏面消除中使用(能夠在隱藏面消除中使用本身就說明了其較好的實(shí)時性能),再用到碰撞檢測中可以節(jié)省資源。2.7粒子系統(tǒng)每個粒子需要一些屬性來和其他粒子區(qū)別。通常在一個系統(tǒng)中的所有粒子有一個相同的屬性集。下面是適用于粒子的典型屬性:(1)哪里,物體(2)速度包括速度和方向(3)加速度與速度一樣,加速度影響速度(4)生命周期通常由計(jì)算機(jī)計(jì)算限制,因此顆粒被指定為有限的生命周期即時戰(zhàn)術(shù)模擬《中途島海戰(zhàn)》游戲中的水波、云特效均采用了粒子系統(tǒng)(圖15)。2.8霧化表和紋理霧在游戲中,使用較多的方法之一是頂點(diǎn)霧效法。把3D物體進(jìn)行投影變換之后,用每個物體頂點(diǎn)的Z值代表霧的濃度,用類似上面公式的式子計(jì)算并修改該頂點(diǎn)的顏色。這樣就得到了一個充滿霧的場景。但如果3D模型的頂點(diǎn)不是很多,就會出現(xiàn)不精確的情況。另外一種方法是霧化表。所謂霧化表,就是建立一張濃度和距離對應(yīng)的關(guān)系表。在繪制場景時,對每一個像素,用其Z值在霧化表中查找對應(yīng)的濃度,再進(jìn)行霧的計(jì)算。這種方法的優(yōu)點(diǎn)在于:①速度很快,因?yàn)樵谑褂肸-緩存時,每一個點(diǎn)的Z值已經(jīng)算出,查表的速度也是很快的;②對每一個像素進(jìn)行計(jì)算,所以無論模型的頂點(diǎn)多少都不會影響繪制效果。但是并不是所有的硬件都支持霧化表,因此這種方法的使用受到了限制。無論硬件是否支持霧化表,它總會支持紋理映射的。我們可以用紋理來模擬霧化表的效果,這就是紋理霧。用紋理來模擬霧化表有很多好處:①幾乎所有的硬件都支持透視校正紋理(在透視空間中正確作插值,需要雙線性插值,如果不支持,紋理將會有明顯的錯誤),但是很少有硬件支持透視校正顏色,所以頂點(diǎn)霧效的效果常常不正確。②材質(zhì)坐標(biāo)產(chǎn)生可以有很多種變形,不用Z值作為霧的濃度,可以制作許多有趣的霧效果。圖16是PS2上的《GT賽車4》中的兩個霧效截圖。3不同場景的應(yīng)當(dāng)使用營造一種新的即速度/效果,這也是開發(fā)新的方式方法在設(shè)計(jì)游戲引擎渲染器時,應(yīng)先確定要實(shí)現(xiàn)的模塊有哪些,否則中途增加新特性是非常困難的。即使最后能得以實(shí)現(xiàn),對效率也會

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論