專利名稱:游戲場景管理方法
游戲場景管理方法
技術領域:
本發(fā)明涉及游戲引擎領域,特別是關于游戲場景管理方法。背景技術:
游戲是人們日常生活中必不可少的娛樂項目,幾乎現在每一款游戲的背后,都有一款與之匹配的游戲引擎,游戲引擎掌控著游戲中各種資源,現代游戲引擎基本包括圖像引擎、聲音引擎、物理引擎、控制引擎、人工智能或者游戲邏輯等。所述圖像引擎用來繪制具體的游戲場景,其中游戲場景是指顯示器顯示出來的游戲畫面。圖1示出了一個現有技術中的簡單游戲場景100。請參考圖1所示,所述游戲場景100包括液晶電視102、電視盒104、電視柜106、桌子108、本子110、第一杯子112、第二杯子114以及房間116。所述圖像引擎在繪制游戲場景時,通常采用場景圖來組織管理相關的場景數據。所述場景圖采用一種自頂向下的、分層的樹狀數據結構來組織場景數據。場景圖樹狀結構的頂部是一個根節(jié)點,從根節(jié)點向下延伸為組節(jié)點或葉節(jié)點,從組節(jié)點向下延伸為葉節(jié)點或下一層的組節(jié)點,每層的組節(jié)點都可以再向下延伸出葉節(jié)點或下一層的組節(jié)點,而所述葉節(jié)點位于場景圖樹狀結構的最底部,每個節(jié)點與其延伸出的其他節(jié)點的關系為父子關系,每個節(jié)點都存儲有場景數據,比如幾何模型、渲染狀態(tài)、空間方位等,其中父節(jié)點中的數據信息會影響到其子節(jié)點。具體到圖像引擎繪制所述游戲場景100時,其可以采用的場景圖請參考圖2示出的場景圖200。所述場景圖200包括根節(jié)點202、家庭影院節(jié)點204、液晶電視節(jié)點206、電視柜節(jié)點208、電視盒節(jié)點210、桌子節(jié)點212、本子節(jié)點214、第一杯子節(jié)點216、第二杯子節(jié)點218以及房間節(jié)點220。其中家庭影院節(jié)點204是組節(jié)點,液晶電視節(jié)點206、電視柜節(jié)點208是家庭影院節(jié)點204的子節(jié)點,其中液晶電視節(jié)點206為葉節(jié)點,電視柜節(jié)點208為組節(jié)點,電視盒210是電視柜節(jié)點208的子節(jié)點,電視和210也是葉節(jié)點;桌子節(jié)點212是組節(jié)點,本子節(jié)點214、第一杯子節(jié)點216和第二杯子節(jié)點218是桌子節(jié)點212為葉節(jié)點并作為桌子節(jié)點212的子節(jié)點。一個組節(jié)點可以擁有一個或多個葉節(jié)點,而葉節(jié)點則位于場景圖的最底部。場景圖中的組節(jié)點的邏輯關系、空間方位、渲染狀態(tài)等信息可以影響其子節(jié)點,比如桌子節(jié)點212發(fā)生移動,它也會影響它的子節(jié)點(比如本子節(jié)點214、第一杯子節(jié)點216和第二杯子節(jié)點218)發(fā)生移動。所述場景圖200中的房間節(jié)點220在實際中也可能是組節(jié)點,還擁有其他諸如墻壁之類的葉節(jié)點。在實際的場景圖中,場景圖包括了多種類型的節(jié)點以執(zhí)行各種各樣的用戶功能,來構成豐富多彩的游戲。例如,開始節(jié)點可以設置其子節(jié)點可用或者不可用;細節(jié)層次節(jié)點可以根據觀察者的距離調用不同的子節(jié)點;變換節(jié)點可以改變子節(jié)點幾何體的坐標變換狀態(tài)。面向對象的場景圖使用繼承的機制來提供這種多樣性,所有的節(jié)點類都有一個共有的基類,同時各自派生出實現特定功能的方法。當游戲需要繪制場景時,采用某種遍歷方式(比如更新遍歷、揀選遍歷和繪圖遍歷等)遍歷場景圖就可以繪制出需要的場景。但是在具體的場景中,可能會碰到相同或者類似的場景對象需要構建,這種相同或類似的場景對象可以是任何節(jié)點,我們以相同或類似的物體的幾何信息為例。舉例來說,圖1所示的第一杯子112和第二杯子114,假設第一杯子112和第二杯子114的幾何信息一樣,只有空間方位和渲染狀態(tài)不同,例如在游戲中第一杯子112是一罐可樂、第二杯子114是一罐雪碧,只需在相同杯子幾何體上貼上不同的圖片就可以實現。圖3示出了現有技術中實現相同或者類似場景對象的管理方法。請參考圖3,在場景圖中采用一個葉節(jié)點302來存儲杯子的幾何信息,組節(jié)點304和306分別存儲第一杯子 112和第二杯子114的空間方位和渲染狀態(tài),這樣的好處是實現了數據的共享。在游戲運行后實際渲染場景時,游戲引擎需要遍歷場景圖,并將遍歷到的各節(jié)點的數據加載到內存中, 在內存中產生的關于第一杯子112的數據中包含一份杯子的幾何信息,在內存中產生的關于第二杯子114的數據中也包含一份杯子的幾何信息,很顯然這樣就需要為該游戲分配更多的內存。當游戲中相同和類似的場景對象較多時,比如一些大型游戲在一個場景中可能存在數十甚至數百個同類型野怪或類似樹木等,上述實現方式就極大增加了游戲場景圖的復雜度而且內存浪費比較嚴重。此外,在內存管理上,復雜的引用關系將導致內存釋放錯誤和指針錯誤等問題。因此,有必要提出一種更優(yōu)地的方案來解決上述問題。
發(fā)明內容本部分的目的在于概述本發(fā)明的實施例的一些方面以及簡要介紹一些較佳實施例。在本部分以及本申請的說明書摘要和發(fā)明名稱中可能會做些簡化或省略以避免使本部分、說明書摘要和發(fā)明名稱的目的模糊,而這種簡化或省略不能用于限制本發(fā)明的范圍。本發(fā)明的一個目的在于提供一種游戲場景管理方法,通過添加引用計數機制來實現相同或類似場景對象的管理。為了達到本發(fā)明的目的,本發(fā)明提供一種游戲場景管理方法,用于對游戲引擎中的場景圖進行管理,所述場景圖包括若干具有父子關系的組節(jié)點和葉節(jié)點,部分葉節(jié)點包括有引用計數,所述方法包括在所述游戲引擎遍歷所述場景圖第一次引用一個包括引用計數的葉節(jié)點時,游戲引擎將所述葉節(jié)點裝載到內存空間并獲得一個地址指針,初始化所述葉節(jié)點的引用計數; 在所述游戲引擎又一次引用所述葉節(jié)點時,所述游戲引擎通過所述地址指針引用所述葉節(jié)點,并增加所述葉節(jié)點的引用計數;所述游戲引擎對所述葉節(jié)點的一次引用完畢時,并減少所述葉節(jié)點的引用計數;和當所述葉節(jié)點的引用計數小于其初始化值時,所述游戲引擎釋放所述葉節(jié)點占有的內存空間。進一步地,所述葉節(jié)點用來存儲可供復用的游戲對象的數據。進一步地,所述游戲對象的數據為對象的三維模型。進一步地,所述葉節(jié)點可以用vertexbuffer類來實現。進一步地,與所述葉節(jié)點有父子關系的組節(jié)點用來存儲空間方位和渲染狀態(tài)。進一步地,所述初始化所述葉節(jié)點的引用計數是指初始化所述葉節(jié)點的引用計數為1。進一步地,所述增加所述葉節(jié)點的引用計數是指將所述葉節(jié)點的引用計數加1。進一步地,所述減少所述葉節(jié)點的引用計數是指將所述葉節(jié)點的引用計數減1。
進一步地,所述當所述葉節(jié)點的引用計數小于其初始化值時是指當所述葉節(jié)點的引用計數等于0時。與現有技術相比,本發(fā)明中的游戲場景管理方法通過為葉節(jié)點添加引用計數,以此來實現相同或類似場景對象的管理,從而可以提高內存利用率。游戲場景中包含的類似對象越多,本發(fā)明的效果越明顯。
結合參考附圖及接下來的詳細描述,本發(fā)明將更容易理解,其中同樣的附圖標記對應同樣的結構部件,其中圖1示出了一個現有技術中的游戲場景;圖2示出了現有技術中的圖1示出游戲場景的場景圖;圖3示出了現有技術中實現相同或者類似場景對象的管理方法;圖4示出了本發(fā)明中的游戲場景管理方法在一個實施例中的方法流程圖;圖5示出了本發(fā)明中的游戲場景管理方法在一個實施例中的應用示意圖;和圖6示出了利用本發(fā)明實現的包括類似場景對象的游戲場景。
具體實施方式本發(fā)明的詳細描述主要通過程序、步驟、邏輯塊、過程或其他象征性的描述來直接或間接地模擬本發(fā)明技術方案的運作。為透徹的理解本發(fā)明,在接下來的描述中陳述了很多特定細節(jié)。而在沒有這些特定細節(jié)時,本發(fā)明則可能仍可實現。所屬領域內的技術人員使用此處的這些描述和陳述向所屬領域內的其他技術人員有效的介紹他們的工作本質。換句話說,為避免混淆本發(fā)明的目的,由于熟知的方法、程序、成分和電路已經很容易理解,因此它們并未被詳細描述。此處所稱的“一個實施例”或“實施例”是指可包含于本發(fā)明至少一個實現方式中的特定特征、結構或特性。在本說明書中不同地方出現的“在一個實施例中”并非均指同一個實施例,也不是單獨的或選擇性的與其他實施例互相排斥的實施例。此外,表示一個或多個實施例的方法、流程圖或功能框圖中的模塊順序并非固定的指代任何特定順序,也不構成對本發(fā)明的限制。本發(fā)明的游戲場景管理方法可以利用計算機結合相關程序實現成為一個場景圖系統(tǒng),位于整個游戲引擎的場景管理位置,通過對場景圖中實現相同或類似場景對象需要或者其他原因導致重復使用的葉節(jié)點加入引用計數機制。實現了在數據共享的同時,降低游戲場景圖復雜度、提高內存管理效率的目的。在具體實施時,在場景圖中首先對相同或類似場景對象的有關數據設計為帶有引用計數的葉節(jié)點。在一個實施例中,所述葉節(jié)點可以用vertexbuffer類來實現。圖4示出了本發(fā)明一種游戲場景管理方法400在一個實施例中的方法流程圖。請參考圖4,所述方法 400包括如下步驟。步驟402,在所述游戲引擎遍歷所述場景圖第一次引用一個包括引用計數的葉節(jié)點時,游戲引擎將所述葉節(jié)點裝載到內存空間并獲得一個地址指針,初始化所述葉節(jié)點的引用計數為1 ;
步驟404,在所述游戲引擎又一次引用所述葉節(jié)點時,所述游戲引擎通過所述地址指針引用所述葉節(jié)點,并將所述葉節(jié)點的引用計數加1 ;步驟406,所述游戲引擎對所述葉節(jié)點的一次引用完畢時,并將所述葉節(jié)點的引用計數減1 ;步驟408,當所述葉節(jié)點的引用計數等于0時,所述游戲引擎釋放所述葉節(jié)點占有的內存空間。圖5示出了本發(fā)明一種游戲引擎的場景管理方法的一個實施例中的應用示意圖。 請參考圖5,在圖1所示的第一杯子112和第二杯子114采用本發(fā)明的實現方式是場景圖采用一個葉節(jié)點502來存儲杯子的幾何信息,組節(jié)點504和506分別存儲第一杯子112和第二杯子114的空間方位和渲染狀態(tài),在構建葉節(jié)點502時就同時添加引用計數,當游戲引擎需要顯示所述場景100時,遍歷到第一杯子112這條路徑時,就會在內存中創(chuàng)建葉節(jié)點 502的存儲空間,并將引用計數初始化為1 ;等遍歷到第二杯子506這條路徑時,就會通過指針引用內存中的葉節(jié)點502,并將引用計數設為2 ;當游戲場景切換或者有關杯子事件觸發(fā) (比如杯子被壓扁等)時,第一杯子112或者第二杯子114不需要在游戲場景中出現了,游戲引擎就減少相應數量的引用計數,當引用計數為0時,游戲引擎就會將所述葉節(jié)點的內存空間釋放。圖6示出了利用本發(fā)明實現的包括類似場景對象的游戲場景,其中所述場景600 包括第一人物620以及第一人物620手中的第一把刀622和第二把刀624 ;第二人物640以及第二人物640手中的第三把刀642和第四把刀644。其中第一把刀622和第二把刀6M 是黑色;第三把刀642和第四把刀644是黑白色相間。由于第一把刀622、第二把刀624、第三把刀642和第四把刀644的幾何信息都一樣,所以我們可以用一個葉節(jié)點來儲存所述刀的幾何信息并添加引用計數,第一把刀622、第二把刀624、第三把刀642和第四把刀644都作為組節(jié)點分別存儲相關的空間位置和渲染狀態(tài),然后引用所述葉節(jié)點儲存的刀的幾何信息就可以實現四把刀共用一個內存共享數據,大大減少了內存占有率。當一個游戲內的類似場景對象較多時,使用這種方法的效果更為明顯。上述說明已經充分揭露了本發(fā)明的具體實施方式
。需要指出的是,熟悉該領域的技術人員對本發(fā)明的具體實施方式
所做的任何改動均不脫離本發(fā)明的權利要求書的范圍。 相應地,本發(fā)明的權利要求的范圍也并不僅僅局限于所述具體實施方式
。
權利要求
1.一種游戲場景管理方法,用于對游戲引擎中的場景圖進行管理,所述場景圖包括若干具有父子關系的組節(jié)點和葉節(jié)點,部分葉節(jié)點包括有引用計數,其特征在于,其包括在所述游戲引擎遍歷所述場景圖第一次引用一個包括引用計數的葉節(jié)點時,游戲引擎將所述葉節(jié)點裝載到內存空間并獲得一個地址指針,初始化所述葉節(jié)點的引用計數;在所述游戲引擎又一次引用所述葉節(jié)點時,所述游戲引擎通過所述地址指針引用所述葉節(jié)點,并增加所述葉節(jié)點的引用計數;所述游戲引擎對所述葉節(jié)點的一次引用完畢時,并減少所述葉節(jié)點的引用計數;和當所述葉節(jié)點的引用計數小于其初始化值時,所述游戲引擎釋放所述葉節(jié)點占有的內存空間。
2.根據權利要求1所述的游戲場景管理方法,其特征在于所述葉節(jié)點用來存儲可供復用的游戲對象的數據。
3.根據權利要求1所述的游戲場景管理方法,其特征在于所述游戲對象的數據為對象的三維模型。
4.根據權利要求1所述的游戲引擎的場景管理方法,其特征在于所述葉節(jié)點可以用 vertexbuffer 類來實現。
5.根據權利要求1所述的游戲引擎的場景管理方法,其特征在于與所述葉節(jié)點有父子關系的組節(jié)點用來存儲空間方位和渲染狀態(tài)。
6.根據權利要求1所述的游戲引擎的場景管理方法,其特征在于所述初始化所述葉節(jié)點的引用計數是指初始化所述葉節(jié)點的引用計數為1。
7.根據權利要求1所述的游戲引擎的場景管理方法,其特征在于所述增加所述葉節(jié)點的引用計數是指將所述葉節(jié)點的引用計數加1。
8.根據權利要求1所述的游戲引擎的場景管理方法,其特征在于所述減少所述葉節(jié)點的引用計數是指將所述葉節(jié)點的引用計數減1。
9.根據權利要求1所述的游戲引擎的場景管理方法,其特征在于所述當所述葉節(jié)點的引用計數小于其初始化值時是指當所述葉節(jié)點的引用計數等于0時。
全文摘要
本發(fā)明揭露了一種游戲場景管理方法,用于對游戲引擎中的場景圖進行管理,所述場景圖包括若干具有父子關系的組節(jié)點和葉節(jié)點,部分葉節(jié)點包括有引用計數,其包括在所述游戲引擎遍歷所述場景圖第一次引用一個包括引用計數的葉節(jié)點時,游戲引擎將所述葉節(jié)點裝載到內存空間并獲得一個地址指針,初始化所述葉節(jié)點的引用計數;在所述游戲引擎又一次引用所述葉節(jié)點時,所述游戲引擎通過所述地址指針引用所述葉節(jié)點,并增加所述葉節(jié)點的引用計數;所述游戲引擎對所述葉節(jié)點的一次引用完畢時,并減少所述葉節(jié)點的引用計數;和當所述葉節(jié)點的引用計數小于其初始化值時,所述游戲引擎釋放所述葉節(jié)點占有的內存空間。
文檔編號G06F19/00GK102214263SQ20101014373
公開日2011年10月12日 申請日期2010年4月12日 優(yōu)先權日2010年4月12日
發(fā)明者朱波, 梁久禎, 袁旭東, 許多 申請人:無錫科利德斯科技有限公司