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