本發(fā)明涉及一種三維游戲引擎的場景圖設(shè)計方法及系統(tǒng),屬于計算機(jī)游戲領(lǐng)域。
背景技術(shù):
大多數(shù)游戲均會涉及大量的對象,繪制方案頗為低效,其原因在于,某些對象可見,而多數(shù)對象均處于不可見狀態(tài)。針對不可見對象,渲染器需花費大量的時間確認(rèn)全部三角形是否位于視錐體外部,且主要時間均用于剔除背面三角形以及剪裁剔除正面三角形上。
即使可有效地測試對象是否部分或全部位于視錐體內(nèi)部,然而,大多數(shù)游戲的方案仍缺乏應(yīng)有的高效性,且未考慮空間一致性和渲染器狀態(tài)一致性之特征。
技術(shù)實現(xiàn)要素:
本發(fā)明的技術(shù)方案針對現(xiàn)有技術(shù)的缺陷,對一般游戲場景系統(tǒng)實現(xiàn)的現(xiàn)狀與造成的原因加以深入分析,分析場景系統(tǒng)有哪些流程上的特點,以及有哪些小粒度可重用的組件,總結(jié)了一種三維游戲引擎的場景圖設(shè)計方法及系統(tǒng),以達(dá)到大大縮短場景系統(tǒng)開發(fā)周期,增強代碼可維護(hù)性與可重用性,增強游戲的體驗和表現(xiàn),提高大量場景對象繪制效率的目的。
本發(fā)明的技術(shù)方案包括一種三維游戲引擎的場景圖設(shè)計方法,其特征在于,該方法包括:對場景圖進(jìn)行空間處理,包括對場景圖使用空間層次結(jié)構(gòu)和/或空間樹結(jié)構(gòu)進(jìn)行展開,其中空間層次結(jié)構(gòu)和/或空間樹結(jié)構(gòu)中的各節(jié)點引入了當(dāng)前子樹的坐標(biāo)系,同時,各節(jié)點還將維護(hù)相應(yīng)的轉(zhuǎn)換操作以及包圍體;對場景圖的渲染狀態(tài)進(jìn)行處理,構(gòu)造潛在對象可見集,采用后處理操作并根據(jù)渲染狀態(tài)對對象可見集執(zhí)行排序操作,以及,分離剔除操作和繪制操作。
根據(jù)所述的三維游戲引擎的場景圖設(shè)計方法,該方法還包括:更新幾何狀態(tài),若場景幾何狀態(tài)發(fā)生變化時,更新用空間層次結(jié)構(gòu)和/或空間樹結(jié)構(gòu)的空間信息,其中的空間信息包括頂點數(shù)據(jù)變化、轉(zhuǎn)換變化及場景圖拓?fù)浣Y(jié)構(gòu)變化;更新渲染器狀態(tài),若渲染器發(fā)生變化時,更新用空間層次結(jié)構(gòu)和/或空間樹結(jié)構(gòu)提供的信息,其中提供的信息包括全局狀態(tài)的綁定分離操作及場景圖拓?fù)浣Y(jié)構(gòu)變化;剔除操作,當(dāng)場景圖幾何狀態(tài)發(fā)生變化時,實時確定場景圖潛在對象可見集;繪制操作,繪制潛在可見對象集。
根據(jù)權(quán)所述的三維游戲引擎的場景圖設(shè)計方法,該方法還包括:所述對場景圖的渲染狀態(tài)進(jìn)行處理中的分離剔除操作和繪制操作包括單次處理生成潛在可見集,其中的生成過程無需渲染器對應(yīng)繪制數(shù)據(jù)的參與。
根據(jù)所述的三維游戲引擎的場景圖設(shè)計方法,該方法還包括:對幾何體類、頂點和索引類、光照和視效類、空間類的場景圖進(jìn)行對應(yīng)的空間及渲染狀態(tài)處理。
本發(fā)明的技術(shù)方案還包括一種三維游戲引擎的場景圖設(shè)計系統(tǒng),其特征在于,該系統(tǒng)包括:空間處理模塊,用于對場景圖使用空間層次結(jié)構(gòu)和/或空間樹結(jié)構(gòu)進(jìn)行展開,其中空間層次結(jié)構(gòu)和/或空間樹結(jié)構(gòu)中的各節(jié)點引入了當(dāng)前子樹的坐標(biāo)系,同時,各節(jié)點還將維護(hù)相應(yīng)的轉(zhuǎn)換操作以及包圍體;渲染狀態(tài)處理模塊,用于構(gòu)造潛在對象可見集,采用后處理操作并根據(jù)渲染狀態(tài)對對象可見集執(zhí)行排序操作,以及,分離剔除操作和繪制操作。
本發(fā)明的有益效果為:大大縮短場景系統(tǒng)開發(fā)周期,增強代碼可維護(hù)性與可重用性,增強游戲的體驗和表現(xiàn),提高大量場景對象繪制效率;考慮了空間一致性;若視見體遠(yuǎn)小于對象所處的場景世界,則可根據(jù)前述知識對大多數(shù)對象進(jìn)行定位;可將場景世界劃分為多個單元,若已知當(dāng)前某一或多個單元包含視錐體,則只需遍歷該單元或多個單元中的內(nèi)容即可。該組織方案可有效地降低對象的可見測試數(shù)量;考慮了渲染器狀態(tài)一致性,若對象根據(jù)其渲染狀態(tài)進(jìn)行排序,則可有效地改善渲染效率。
附圖說明
圖1所示為根據(jù)本發(fā)明實施方式的總體流程圖;
圖2a,2b所示為根據(jù)本發(fā)明實施方式的層次結(jié)構(gòu)圖;
圖3a,3b所示為根據(jù)本發(fā)明實施方式的場景圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖和具體實施例對本發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明的三維游戲引擎的場景圖設(shè)計方法及系統(tǒng)適用于游戲場景圖的設(shè)計。
圖1所示為根據(jù)本發(fā)明實施方式的總體流程圖。對場景圖進(jìn)行空間處理,包括對場景圖使用空間層次結(jié)構(gòu)和/或空間樹結(jié)構(gòu)進(jìn)行展開,其中空間層次結(jié)構(gòu)和/或空間樹結(jié)構(gòu)中的各節(jié)點引入了當(dāng)前子樹的坐標(biāo)系,同時,各節(jié)點還將維護(hù)相應(yīng)的轉(zhuǎn)換操作以及包圍體;對場景圖的渲染狀態(tài)進(jìn)行處理,構(gòu)造潛在對象可見集,采用后處理操作并根據(jù)渲染狀態(tài)對對象可見集執(zhí)行排序操作,以及,分離剔除操作和繪制操作。進(jìn)而生成對應(yīng)的場景圖。
其中還包括針對不同場景圖的類型使用對應(yīng)的接口進(jìn)行處理,其詳細(xì)如下(1)~(6)所示:
(1)幾何體類。桌子對象由模型頂點集形式的幾何信息構(gòu)成,該信息存儲于數(shù)組中。通常情況下,桌子對象采用三角形網(wǎng)格進(jìn)行建模,三角形定義為頂點3元組,并采用一致順序排列。從顯示角度來看,觀察者可據(jù)此分辨出三角形的正面朝向以及背面朝向。針對正面三角形,方案是使用逆時針排列順序:當(dāng)觀察者察看三角形平面時,且該平面包含指向觀察者一側(cè)的法線向量,則三角形頂點將以逆時針順序排列。多數(shù)時候,三角形信息可定義為索引3元組集合,并以此搜索頂點數(shù)組。因此元組將引用某一三角形。與游戲場景中使用的模型單元相比,最終的模型單元尺寸可能會發(fā)生變化。或者,與建模軟件包生成的模型相比,該模型將采用不同的尺寸進(jìn)行繪制。針對于此,美術(shù)可使用縮放功能以對上述情況進(jìn)行調(diào)整。該操作支持非均勻縮放,即各空間維度的縮放結(jié)果彼此無關(guān)。模型所占據(jù)的空間區(qū)域可通過模型包圍體表示,且多采用球體、盒體以及其他更為簡單的對象,進(jìn)而包圍當(dāng)前對象的全部頂點。此類信息多采用過程式方案生成且無須使用美術(shù)所提供的輸入數(shù)據(jù)。針對模型與觀察者之間的可見性,模型包圍體提供了有效的識別手段。幾何體類封裝了全部模型信息,包括美術(shù)創(chuàng)建的信息,以及在此基礎(chǔ)上采用過程式方案生成的信息。
(2)頂點和索引緩沖類。在本方案中,頂點位置和幾何體對象的其他屬性均存儲于頂點緩沖區(qū)中,并稱之為“結(jié)構(gòu)數(shù)組”。其中,各結(jié)構(gòu)包含了某一頂點的全部信息,對應(yīng)類定義為頂點緩存。對應(yīng)數(shù)據(jù)則存儲于索引緩沖區(qū)中,即索引緩存類。這里,兩個緩沖區(qū)類均視為數(shù)據(jù)容器且包含可綁定接口,并將系統(tǒng)內(nèi)存緩沖區(qū)與視頻內(nèi)存中對應(yīng)的繪制緩沖區(qū)進(jìn)行關(guān)聯(lián)。
(3)光照和視效類。幾何體對象包含渲染器所需的全部信息,進(jìn)而實現(xiàn)正確的繪制操作。這里,數(shù)據(jù)的應(yīng)用方式取決于當(dāng)前對象綁定的特效,或?qū)哟谓Y(jié)構(gòu)前驅(qū)節(jié)點綁定的全局視效。此類視效包括動態(tài)光照并通過燈光對象表示,其中,燈光對象綁定于層次結(jié)構(gòu)路徑中并通向幾何體對象。相關(guān)視效還包括局部視效并通過如下方式獲得:將著色視效對象綁定至幾何體對象上。本方案同時支持多個視覺視效。另外,對應(yīng)的渲染系統(tǒng)可自動提供多路渲染操作以處理多個視覺視效。幾何體對象也將受到全局視效的影響并可通過如下方式獲得:將視效對象綁定至幾何體對象的前驅(qū)結(jié)點上。
(4)空間類。美術(shù)負(fù)責(zé)創(chuàng)建桌子對象以及房間對象,且二者通常采用獨立的建模步驟。當(dāng)與房間對象協(xié)同工作時,可方便地加載創(chuàng)建完畢的桌子對象,并將其置于房間中。二者創(chuàng)建于各自的坐標(biāo)系。當(dāng)放置桌子對象時,該對象須經(jīng)過平移操作、旋轉(zhuǎn)操作甚至是縮放操作。當(dāng)前操作始于房間對象(父對象),并使用房間坐標(biāo)系將桌子(子對象)置于房間中。同時,房間自身還可能相對于其他對象進(jìn)行定位。例如,房間可局部轉(zhuǎn)換至房屋整體坐標(biāo)系中。此處,房屋坐標(biāo)系用作游戲的世界坐標(biāo)系,因而包含各對象模型空間至世界空間的世界轉(zhuǎn)換。除此之外,模型空間內(nèi)的對象包圍體在世界空間內(nèi)包含對應(yīng)的世界包圍體,對應(yīng)結(jié)果可通過如下方式獲得:將世界轉(zhuǎn)換應(yīng)用于模型包圍體上。局部轉(zhuǎn)換、世界轉(zhuǎn)換以及世界包圍體均封裝于空間類中。
(5)節(jié)點類。在上述(4)房屋、房間以及桌子示例中,另一個問題則與局部轉(zhuǎn)換和世界轉(zhuǎn)換相關(guān)。如圖2a所示,考察下列情形:房屋內(nèi)包含兩個房間,某一房間內(nèi)添加了一張桌子和一把椅子,桌面上擺放了一個盤子以及一副刀叉,下圖顯示了對象層次結(jié)構(gòu)。其中,各對象表示為層次結(jié)構(gòu)中的一個節(jié)點。
這里,各個對象均獨立創(chuàng)建。針對子對象與其父對象之間的相對位置,層次結(jié)構(gòu)體現(xiàn)了一種父子關(guān)系。盤子、餐刀以及餐叉包含了相對于桌子的局部轉(zhuǎn)換;桌子和椅子包含了相對于房子的局部轉(zhuǎn)換;房間1和房間2則包含了相對于房屋的局部轉(zhuǎn)換。另外,各個對象還包含了相應(yīng)的世界轉(zhuǎn)換,并可直接定位于場景世界中。
結(jié)點類包含了層次結(jié)構(gòu)中的對象分組行為,組合轉(zhuǎn)換可通過父子樹的深度優(yōu)先遍歷實現(xiàn)。其中,各個父節(jié)點針對其子節(jié)點提供了自身的世界轉(zhuǎn)換操作,進(jìn)而計算世界轉(zhuǎn)換結(jié)果,該過程通常以遞歸方式執(zhí)行,并沿層次結(jié)構(gòu)向下轉(zhuǎn)播(從根節(jié)點至葉節(jié)點)。
各對象均包含與自身關(guān)聯(lián)的模型包圍體,但獨立節(jié)點則不包含模型包圍體且僅負(fù)責(zé)執(zhí)行對象的分組操作(但可賦予世界包圍體)。
當(dāng)在場景節(jié)點處調(diào)整局部轉(zhuǎn)換時,須遍歷子樹(其根節(jié)點為當(dāng)前節(jié)點)以重新計算世界轉(zhuǎn)換。然而,世界轉(zhuǎn)換的變化也會引發(fā)世界包圍體的改變。當(dāng)轉(zhuǎn)換操作沿層次結(jié)構(gòu)向下傳播時,新的世界包圍體需在當(dāng)前子節(jié)點處重新計算,并沿層次結(jié)構(gòu)向上傳遞(從葉節(jié)點至根節(jié)點)至父節(jié)點,進(jìn)而計算父節(jié)點的世界包圍體。通過世界轉(zhuǎn)換,模型包圍體可轉(zhuǎn)換為世界包圍體。同時,子節(jié)點處的世界轉(zhuǎn)換還取決于其父節(jié)點的世界轉(zhuǎn)換。世界包圍體的重計算出現(xiàn)于下行遍歷層次結(jié)構(gòu)時。相應(yīng)地,下行遍歷和上行遍歷統(tǒng)稱為幾何更新。
(6)控制器和修改器類。引擎通過控制器實現(xiàn)對動畫操作的支持,對應(yīng)抽象基類為控制器類。轉(zhuǎn)換控制器是一類控制器,例如關(guān)鍵幀控制器和逆向動力學(xué)控制器。針對關(guān)鍵幀控制器,美術(shù)根據(jù)當(dāng)前對象(即該對象層次結(jié)構(gòu)中的節(jié)點)提供了一組位置和方向數(shù)據(jù)集。關(guān)鍵幀控制器將對關(guān)鍵幀執(zhí)行插值計算,進(jìn)而在一段時間內(nèi)生成平滑的運動視效。針對逆向動力學(xué)控制器,對象的位置和旋轉(zhuǎn)常通過某些約束條件加以確定,且需要對象位于特定結(jié)構(gòu)中。頂點和法線控制器常用于變形操作;渲染器狀態(tài)控制器則用于各種視效的動畫操作。索引控制器可動態(tài)調(diào)整三角形網(wǎng)格或三角帶。修改器體現(xiàn)了應(yīng)用于頂點、法線以及索引集上的附加語義,抽象類幾何體定義為此類數(shù)據(jù)項的容器。另外,派生于幾何體類的三角網(wǎng)格類是主修改器,并向基類提供索引值。其它還包括三角條帶類,其中,該類隱式地生成索引并提供至幾何體基類。
本發(fā)明的技術(shù)方案還將其他幾何類也是幾何體類的修改器,包括點類以及多段線類,且均可表示為頂點修改器。粒子系統(tǒng)類繼承于三角網(wǎng)格類,其中,粒子作為矩形“廣告牌”進(jìn)行繪制(三角形網(wǎng)格將三角形對存儲為矩形),因而是索引修改器。然而,粒子的物理特征應(yīng)與點的位置數(shù)據(jù)進(jìn)行關(guān)聯(lián)。此時,粒子系統(tǒng)表示為幾何體類的頂點修改器。
圖2a,2b所示為根據(jù)本發(fā)明實施方式的層次結(jié)構(gòu)圖。圖2b對應(yīng)于圖2a的新型層次結(jié)構(gòu),且?guī)缀螌ο髢H可為葉節(jié)點,并通過橢圓形表示,矩形則用于表示分組節(jié)點。由于桌子表示為幾何對象,且無法定義為樹形結(jié)構(gòu)中的內(nèi)部節(jié)點,因而須添加桌子集節(jié)點。這里,餐具對象(盤子、餐刀、餐叉)均為桌子的子對象。為了維護(hù)當(dāng)前結(jié)構(gòu),可加入餐具節(jié)點以聚合餐具對象。為了有效地維護(hù)原始層次結(jié)構(gòu)的轉(zhuǎn)換結(jié)構(gòu),桌子集賦予了桌子所擁有的轉(zhuǎn)換操作,卓最和餐具則分別賦予單位恒等轉(zhuǎn)換,進(jìn)而確保餐具集和餐具集位于同一坐標(biāo)系中。最終,餐具對象的位置和方向?qū)⑹褂门c圖1所示層次結(jié)構(gòu)相同的轉(zhuǎn)換操作。
圖3a,3b所示為根據(jù)本發(fā)明實施方式的場景圖。圖3a對應(yīng)于房屋和兩個房間的場景圖。其中,各房間包含相同的幾何模型數(shù)據(jù),即房間布局。圖3b為3a對應(yīng)的場景圖,但在底層(幾何數(shù)據(jù))而非某一節(jié)點級別執(zhí)行實??臻g層次結(jié)構(gòu)系統(tǒng)定義為樹形結(jié)構(gòu),除了根節(jié)點之外,各樹節(jié)點均包含一個父節(jié)點。這里,可將空間層次結(jié)構(gòu)視為場景圖的骨架,由于對象系統(tǒng)支持共享機(jī)制,因而場景圖實為一類抽象圖。若某一對象被兩個其他對象共用,則首個對象應(yīng)存在兩個對象實例。對象的共享機(jī)制稱做實例化操作。這里,不可對空間層次結(jié)構(gòu)中的節(jié)點進(jìn)行實例化操作,并可通過如下方式加以強調(diào),即空間對象僅包含一個父鏈接,且不可包含多個父對象。
層次結(jié)構(gòu)節(jié)點可包含多個父節(jié)點,如圖3a所示。另外,場景圖描述為包含兩個房間的房屋對象。其中,房間共享同一幾何模型數(shù)據(jù),并可視為同一模型數(shù)據(jù)的多個實例,對應(yīng)的數(shù)據(jù)結(jié)構(gòu)可表示為有向無環(huán)圖。房屋節(jié)點與房間節(jié)點之間包含兩個有向弧,各房間節(jié)點包含指向房間集葉節(jié)點的有向弧,因而共享房間集。共享機(jī)制可有效地降低游戲應(yīng)用程序的存儲空間以及美術(shù)的工作量,因而無須針對各個對象生成對應(yīng)模型。
以上所述,只是本發(fā)明的較佳實施例而已,本發(fā)明并不局限于上述實施方式,只要其以相同的手段達(dá)到本發(fā)明的技術(shù)效果,都應(yīng)屬于本發(fā)明的保護(hù)范圍。在本發(fā)明的保護(hù)范圍內(nèi)其技術(shù)方案和/或?qū)嵤┓绞娇梢杂懈鞣N不同的修改和變化。