3d游戲渲染引擎的資源管理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及3D游戲渲染引擎,尤其涉及一種輕量高效的3D游戲渲染引擎的資源管理方法。
【背景技術(shù)】
[0002]3D游戲渲染引擎,是各類程序系統(tǒng)中的一類,相對于絕大部分其他程序系統(tǒng),它需要高頻率地執(zhí)行大規(guī)模的復(fù)雜計(jì)算,耗能高,因此需要基于合理的管控系統(tǒng)來實(shí)現(xiàn)3D游戲渲染引擎。
[0003]市面上各種3D圖像渲染引擎很多,其中,F(xiàn)lash Stage3D是跨平臺的系統(tǒng),可以運(yùn)行在PC、網(wǎng)頁、移動(dòng)端等。3D圖形渲染系統(tǒng)是通過實(shí)時(shí)計(jì)算來動(dòng)態(tài)生成圖像,而這其中的3D游戲渲染引擎是通過GPU實(shí)時(shí)運(yùn)算來實(shí)時(shí)呈現(xiàn)不同時(shí)間點(diǎn)不同視角的各種游戲畫面,以便讓游戲玩家感覺置身其中,因此其對于系統(tǒng)動(dòng)態(tài)運(yùn)行的性能要求比較苛刻。
[0004]3D游戲渲染系統(tǒng)要求能盡量快的計(jì)算出盡量豐富的畫面,以保證玩家的視覺體驗(yàn)和交互體驗(yàn)。一個(gè)游戲啟動(dòng)之后,玩家可能會(huì)持續(xù)玩很長時(shí)間,經(jīng)歷不同的內(nèi)容,因此系統(tǒng)穩(wěn)定性是一個(gè)重要的需求。良好的效能和穩(wěn)定性是建立在良好的系統(tǒng)結(jié)構(gòu)和運(yùn)行機(jī)制基礎(chǔ)上的。對于游戲渲染程序系統(tǒng)而言,需要不停的通過代碼來操作CPU、內(nèi)存、GPU這些相關(guān)的硬件,因此完成相同的任務(wù),操作越少,效能就越高。操作少就是耗能少,由此可以說,優(yōu)秀的系統(tǒng)就是能量利用率高的系統(tǒng)。
[0005]現(xiàn)有技術(shù)中,基于Flash Stage3D的引擎市面上現(xiàn)有不少,例如:Away3D、Flare3D、Minko、Alternativa3D 這四個(gè)引擎。
[0006]Away3D引擎開源,其系統(tǒng)結(jié)構(gòu)完善但是運(yùn)行機(jī)制繁冗,不能達(dá)到高性能。運(yùn)行時(shí)產(chǎn)生的大量冗余對象和冗余計(jì)算,隨著游戲運(yùn)行的時(shí)間增加會(huì)逐漸消耗掉越來越多的內(nèi)存以及CPU性能。
[0007]Flare3D引擎不開源,其為商業(yè)引擎,能實(shí)現(xiàn)的畫面效果頗多,引擎體系結(jié)構(gòu)復(fù)雜,但是用于游戲中的大規(guī)模實(shí)施渲染性能平平,其沒有深入的考慮運(yùn)行時(shí)資源問題,運(yùn)行時(shí)性能無法達(dá)到一個(gè)新的高度。
[0008]Minko引擎開源,能實(shí)現(xiàn)頗多的畫面效果,系統(tǒng)結(jié)構(gòu)合理,只是沒有考慮有效的運(yùn)行時(shí)資源管理,而且冗余對象會(huì)在運(yùn)行時(shí)也會(huì)大量產(chǎn)生,所以無法作為真正意義上的游戲引擎。
[0009]Alternativa3D結(jié)構(gòu)完善,可以實(shí)現(xiàn)頗多的渲染效果,它是以游戲引擎為最終目的來實(shí)現(xiàn)的。只是引擎本身并沒有完全封裝運(yùn)行時(shí)資源管理機(jī)制,依舊需要用戶來做比較多的資源管理的底層工作。
【發(fā)明內(nèi)容】
[0010]本發(fā)明要解決的技術(shù)問題是如何提高資源利用率。
[0011]為了解決這一技術(shù)問題,本發(fā)明提供了一種3D游戲渲染引擎的資源管理方法,包括:
[0012]在進(jìn)行渲染計(jì)算和渲染時(shí),統(tǒng)一調(diào)配管理運(yùn)行時(shí)建構(gòu)出來的內(nèi)存資源、顯存資源以及從外部加載的原始靜態(tài)資源,使得其中的數(shù)據(jù)資源在未被銷毀前能被引用和使用到所有顯示對象中;且使得:
[0013]當(dāng)其中某個(gè)或某些數(shù)據(jù)資源在預(yù)設(shè)的第一時(shí)間內(nèi)未被引用和使用時(shí),相應(yīng)的數(shù)據(jù)資源被放至相應(yīng)的待銷毀隊(duì)列中;
[0014]待銷毀隊(duì)列中的數(shù)據(jù)資源經(jīng)過預(yù)設(shè)的第二時(shí)間后即被銷毀;若在第二時(shí)間內(nèi)又被引用或使用,則將相應(yīng)的數(shù)據(jù)資源從所述待銷毀隊(duì)列中移除。
[0015]可選的,在銷毀數(shù)據(jù)資源時(shí),優(yōu)先銷毀顯存資源數(shù)據(jù)和外部加載的非共享原始靜態(tài)資源,內(nèi)存資源數(shù)據(jù)次之,最后是外部加載的共享原始靜態(tài)資源數(shù)據(jù)。
[0016]可選的,在渲染中,還包括:
[0017]依據(jù)當(dāng)下所需的邏輯以及輸入的變化更新各顯示對象的靜態(tài)數(shù)據(jù)和/或動(dòng)態(tài)數(shù)據(jù),將更新后的所述靜態(tài)數(shù)據(jù)和/或動(dòng)態(tài)數(shù)據(jù)傳至GPU或用于CPU計(jì)算的內(nèi)存;
[0018]所述GPU和CPU響應(yīng)更新后的所述靜態(tài)數(shù)據(jù)和/或動(dòng)態(tài)數(shù)據(jù),做渲染前置計(jì)算,進(jìn)而所述GPU以渲染前置計(jì)算的結(jié)果以及已確定的渲染場景、渲染層、渲染節(jié)點(diǎn)、渲染樹以及渲染單元進(jìn)行每一幀3D圖像中的各顯示對象的渲染。
[0019]可選的,在渲染前,還包括:
[0020]將顯示對象加入渲染場景中,為各顯示對象準(zhǔn)備靜態(tài)數(shù)據(jù)和初始的動(dòng)態(tài)數(shù)據(jù);
[0021]得到所述顯示對象的若干渲染單元;
[0022]將所述渲染單元加入到對應(yīng)的渲染層中,生成渲染節(jié)點(diǎn),確定各渲染層的渲染樹。
[0023]可選的,得到所述顯示對象的若干渲染單元后,還包括對所述渲染單元依據(jù)功能做分類的過程;將同一類別的渲染單元合并,再加入到對應(yīng)的渲染層中。
[0024]可選的,所述顯示對象包括不需要矩陣運(yùn)算的基礎(chǔ)顯示對象和需要矩陣運(yùn)算的高級顯示對象,所述CPU用以對所述高級顯示對象對應(yīng)的靜態(tài)數(shù)據(jù)和/或動(dòng)態(tài)數(shù)據(jù)進(jìn)行渲染前置計(jì)算;所述GPU用以對所述基礎(chǔ)顯示對象對應(yīng)的靜態(tài)數(shù)據(jù)和/或動(dòng)態(tài)數(shù)據(jù)進(jìn)行渲染前置計(jì)算。
[0025]可選的,在進(jìn)行渲染計(jì)算和渲染時(shí),針對每一幀3D圖像:
[0026]若其中的靜態(tài)數(shù)據(jù)和/或動(dòng)態(tài)數(shù)據(jù)已經(jīng)完成過渲染前置計(jì)算,則不再對其進(jìn)行再一次的渲染前置計(jì)算,采用已計(jì)算出的結(jié)果進(jìn)行渲染。
[0027]可選的,對其中的靜態(tài)數(shù)據(jù)和/或動(dòng)態(tài)數(shù)據(jù)完成渲染前置計(jì)算后,還將此計(jì)算的結(jié)果存放,并將其標(biāo)注為無需再次更新操作的狀態(tài);否則將其標(biāo)注為需要再次更新操作狀態(tài),然后在該幀3D圖像渲染的后續(xù)處理中依據(jù)相應(yīng)的狀態(tài)標(biāo)注判斷是否進(jìn)行渲染前置計(jì)笪并ο
[0028]本發(fā)明認(rèn)為,對于實(shí)現(xiàn)高效的程序系統(tǒng)有以下普適原則:
[0029]i)運(yùn)行時(shí)程序代碼對象能不創(chuàng)建就不創(chuàng)建。
[0030]ii)運(yùn)行時(shí)程序代碼邏輯能不執(zhí)行邏輯計(jì)算就不執(zhí)行。
[0031]iii)運(yùn)行時(shí)程序代碼對象能不銷毀就不銷毀。
[0032]通過這個(gè)普適原則,實(shí)現(xiàn)最大限度的重復(fù)使用現(xiàn)有結(jié)果,以便減少冗余操作。要達(dá)到這個(gè)目的就需要引擎程序系統(tǒng)中有嚴(yán)格的運(yùn)行時(shí)資源管理機(jī)制。在3D游戲渲染引擎系統(tǒng)中,運(yùn)行時(shí)資源這個(gè)概念包含了邏輯對象、數(shù)據(jù)對象、加載到內(nèi)存中的外部資源、上傳到顯卡中的顯存資源,以及被執(zhí)行的邏輯計(jì)算等。
[0033]管理好運(yùn)行時(shí)資源,才能實(shí)現(xiàn)上述三原則。因此實(shí)現(xiàn)3D游戲渲染引擎,系統(tǒng)結(jié)構(gòu)和運(yùn)行時(shí)機(jī)制要優(yōu)先考慮資源的良好管控。有了這個(gè)基礎(chǔ),實(shí)現(xiàn)具體的游戲功能就方便很多。
[0034]基于該認(rèn)識,本發(fā)明至少做了以下改進(jìn):
[0035]通過資源管理模塊對內(nèi)存、顯存以及外部加載的原始靜態(tài)資源的統(tǒng)一管理,在引擎中整合完善的運(yùn)行時(shí)資源管控機(jī)制,讓上層開發(fā)者不用再處理引擎中的這類問題;
[0036]進(jìn)一步在本發(fā)明可選的方案中,還通過對渲染流程的優(yōu)化,盡量減少了運(yùn)行時(shí)不必要的渲染操作,以提高資源的利用率。
【附圖說明】
[0037]圖1和圖2是本發(fā)明一實(shí)施例中資源管理的流程示意圖;
[0038]圖3是本發(fā)明一可選實(shí)施例中渲染流程基本邏輯的示意圖;
[0039]圖4是本發(fā)明一可選實(shí)施例中將所述渲染單元分類并加入到對應(yīng)的渲染層的示意圖;
[0040]圖5是本發(fā)明一實(shí)施例中渲染中流程的示意圖;
[0041]圖6是本發(fā)明一實(shí)施例中顯示對象的示意圖;