資源的後台載入

2022-06-23 07:18:10 字數 1077 閱讀 3837

現代的遊戲大多資源量都比較大,無法做到遊戲啟動之初就載入了全部資源,所以資源動態載入必然要做。下面說一說一些不同的資源動態載入方案。

第一種方式,分貞載入。所謂分貞載入顧名思義就是把遊戲資源的載入分解到不同貞去做,這樣可以降低某一貞突然載入大量資源導致的幀率急劇下降。這種分貞可以是以資源為單位,也可以載入步驟為單位。比方說第一步進行磁碟io,第二步進行一些資源使用前的準備工作(如提交顯示卡等),這些步驟也可以分別放在不同貞中進行。為了使貞率更加平穩,可以限定每貞載入的量,或者時間閾值。比方說目前渲染以貞的時間是10ms,目標幀率是30貞,這樣還有20ms左右的空閒時間,這時可以在載入的時候累計耗時,如果超過20ms則停止當前貞的載入,剩下的放到下一貞進行,直到載入完為止。這種方式的好處就在於控制比較簡單,容易,當然他的問題也比較明顯,就是資源將會乙個個載入,在遊戲時看到的東西乙個個的出。

第二種方式,後台載入。所謂後台載入就是在後台執行緒中進行資源的載入,它不影響主線程。從資源的整個載入過程來看主要有兩個比較耗時的地方,首先是磁碟io,再有就是申請顯示卡資源並提交資料。這兩個耗時的地方又以磁碟io耗時最多,同時磁碟io本身就是裝置阻塞的,cpu時間很低,因此資源的磁碟io一定是要放在多執行緒中的。而對於顯示卡資源申請,提交資料等,獲多或少會涉及加鎖的問題。我不太推薦這一塊也放入多執行緒中,原因很簡單,經過測試磁碟io後台載入已經可以解決掉80%以上的載入效率,顯示卡資源的申請和提交即使能夠提高渲染效率也不多,但是他會提高程式設計上的複雜性,簡單的事情簡單的設計將會被更多的加鎖,解鎖操作打亂,不值得。

下面我具體說一下我的後台載入方案。

在引擎裡面(也可以在引擎外)有乙個後台io池,之所以是io執行緒池是因為磁碟io會在裝置級阻塞,對cpu幾乎沒有消耗,也就是說它是乙個運算量比較低需求。而使用io執行緒池可以同時載入多個又不會造成cpu資源占用過多。而到底多少個合適取決於載入的資源量和細碎程度,他是可以外部配置的。與此同時磁碟io可以做得很獨立很模組化,和引擎其他模組互動到最少,這樣極大的減少了加鎖減鎖的操作,設計上也會比較簡單。

綜上所述,場景裡面的靜態模型特校等使用後台io進行資源載入,載入後直接顯示即可,npc這樣的邏輯的東西需要把他們分一分類,那些是最常用的那些不是,最常用的則在遊戲啟動的時候就把資源載入好,而不常用的npc可以使用分貞進行載入。

3D資源的後台載入

編輯 收藏引用 所屬分類 3d圖形學研究 我們也是這麼處理,除主線程外,開6,7條執行緒,每條負責從乙個mpq包,負責完成io操作,io執行緒和主線程通過訊息機制進行通訊。完全非同步。2006 12 11 17 40 wjk 很可惜今天才讀到你的文章,我最近一直在為這個問題苦悶,因為我們公司的乙個專...

Glide之後臺執行緒載入及快取資源

為了使後台執行緒載入和處理 資源更容易,glide新增了兩個api load yoururl downloadonly 500,500 file cachefile future.get glide.with yourfragment load yoururl diskcachestrategy d...

web 資源的載入

web 資源的載入 在web中,可以載入一些檔案到專案中去,可以是配置檔案,也可以是普通的txt檔案等,而檔案載入的方法有三種。而談到檔案載入必須用到的乙個類就是property。而必備的操作就是 properties props new properties props.load 讀取流 三種載入...