建立遊戲時,您需要不斷在特性和效能中作出權衡。 在遊戲中新增圖形效果和特性時,gpu 是最突出的瓶頸,但是遊戲同時也會受到 cpu 的限制。
除了來自遊戲邏輯的普通 cpu 負載以外,物理和人工智慧 (ai) 計算以及賦予遊戲浸入式體驗的圖形效果也是 cpu 密集型任務,在遊戲開發的過程中,gpu 和 cpu 通常交替產生瓶頸。
現代微處理器擁有強大的單核效能,但如果能夠充分利用多個 cpu 核心,遊戲將能夠實現更好的整體效能。 為了充分利用全部的 cpu 計算功能,應用在使用多執行緒時執行速度最快,此時它們可以確保在所有 cpu 核心上同時執行**。
oxide 建立了新的引擎並採用了 direct3d* 12,如此一來《奇點灰燼》便能利用處理器的所有核心。 該遊戲在常見的遊戲系統上執行良好,在搭載了更多核心的系統上表現更佳。 您可以在遊戲中採用相同的技術,以實現最佳 cpu 效能。
direct3d* 12 消除了瓶頸並提公升了效能。
為了在《奇點灰燼》中獲得最快的幀速率,oxide 團隊使用了 direct3d* 12 版本。 direct3d 的早期版本執行良好,但是存在幾個瓶頸, 在第 12 版中,api 進行了多項變更,消除了影響遊戲速度的瓶頸。這些變更包括:多個物件被簡化為管線狀態物件,更小的硬體抽象層最大限度地降低了 api 開銷,從圖形驅動程式中消除了資源障礙。
direct3d 11 能從多個執行緒中建立命令。 但是,由於舊版 direct3d 需要大量的序列化,遊戲從多執行緒中獲得的加速不多。 通過調整 api,direct3d 12 徹底消除了這一底層限制。 現在遊戲無需使用序列化,便可以使用多個執行緒填寫命令列表,從而顯著改善整體執行緒效能。
通過充分利用這些 api 變更,《奇點灰燼》在 direct3d 12 上能夠實現執行效果。
nitrous* 引擎使遊戲成為可能
oxide 想要建立乙個比以往遊戲更複雜的實時戰略遊戲,支援更大型的軍隊,擁有更多的單位和更廣闊的地圖。 為了建立下一代實時戰略遊戲,開發團隊一致認為需要乙個新的遊戲引擎,現有的遊戲引擎無法支援他們期望的單位數量和地圖規模。 為了成功開發出《奇點灰燼》,他們從頭開始建造 nitrous 引擎。
任何新的引擎必須首先提供高效能的渲染, 為了達到這個目標,他們對 nitrous 引擎進行了充分除錯,使其支援最新版圖形 api、多個 gpu 和非同步計算。
遊戲為每位玩家提供了多個單位的支援,還提供了大型地圖。 在廣闊的地形內模擬眾多遊戲內物件的物理結構生成了龐大的 cpu 負載。 更為重要的是,由於需要模擬每個單位的行為,人工智慧工作負載也非常龐大。 遊戲支援的大量單位還引發了突發特性。 隨著單位數量的增加,玩家直接管理單位的難度不斷加大。 oxide 打造了實現人工智慧的分層方法,使軍隊合理地協作,以利用每個單位的相對優勢,同時關注它們的相對劣勢。
為了實現這種拓展,nitrous 將工作分解為更小的任務,實行了引擎的執行緒化。 任務系統具有較高的靈活性,小型任務可以分散於盡可能多的 cpu 核心中。 由於多數英特爾® 處理器包含英特爾® 超執行緒 (ht) 技術,oxide 認真除錯了面向速度的任務排程器,排程器在任務之間尋找區域性性。 共享已快取資料的任務在相同物理 cpu 核心中的不同邏輯核心上進行排程,這一方法帶來了最佳效能和任務吞吐率。
不論採用何種方法,提公升遊戲複雜性的過程中總會遇到瓶頸。 開發遊戲時,需要考慮預期的相對 cpu 和 gpu 負載。 了解當 gpu 和 cpu 分別成為瓶頸時,遊戲將怎樣執行。
英特爾® 酷睿™ 處理器為遊戲添彩
英特爾® 酷睿™ 處理器能夠讓您的遊戲如《奇點灰燼》般閃耀。 在設計和優化遊戲的過程中,您應瞄準中端處理器,並提供擴充套件到最高端處理的能力。
借助上述技術,《奇點灰燼》在一流的英特爾® 酷睿™ i7-6950x 處理器至尊版上執行良好,這款處理器有 10 個物理 cpu 核心和乙個大容量快取記憶體,能實現最佳的整體效能。 將工作分解為任務後,借助強大的 gpu,遊戲的幀速率隨著 cpu 核心數量的增加而提高。 在 cpu 核心數量不同的相同系統上,幀速率穩定增長至最高 10 個物理核心。
該遊戲還包括大型地圖。 由於玩家和單位數量非常龐大,裝備齊全的一組玩家將造成巨大的人工智慧負擔。 經過認真的除錯,《奇點灰燼》借助任務排程器,自動將工作自動分配至全部核心中,只有在 cpu 核心(六個及以上)數量較多的系統中顯示地圖。 這是乙個不錯的方法,您也可以效仿:如果您想選擇性地啟用特性,可以利用 getsysteminfo() 等函式檢測系統的核心數量。
可擴充套件效果使遊戲更勝一籌
儘管遊戲主要關注如何在核心數量較多的系統上提公升幀速率,但是仍可以利用一小部分 cpu 空間為玩家帶來驚喜。 隨著核心數量的增多,《奇點灰燼》將在某些單位內自動啟用高階粒子效果,還會啟用臨時運動模糊。
《奇點灰燼》
圖 2: 兩個大型戰艦單元上的高階粒子效果看起來非常炫酷。
intel技術雙週刊已全面開啟:訂閱這裡。
Android系統為什麼不允許在子執行緒中訪問UI
這是因為android的ui控制項並不是執行緒安全的,如果多執行緒中併發訪問可能導致ui控制項處於不可預期的狀態.那為什麼系統不對ui控制項的訪問加上鎖機制呢?缺點有兩個 首先,加上鎖機制會讓ui訪問的邏輯變得複雜 其次鎖機制會降低ui訪問的效率,因為鎖機制會阻塞某些執行緒的執行.鑑於這兩個缺點,最...
在JavaScript中NaN為什麼不等於NaN
nan 即非數值 not a number 是乙個特殊的數值,這個數值用於表示乙個本來要返回數值的運算元未返回數值的情況 這樣就不會丟擲錯誤了 任何與nan進行運算的結果均會為nan,nan與自身不相等 nan不與任何值相等 nan 屬性是代表非數字值的特殊值。該屬性用於指示某個值不是數字 nan ...
Junit中為什麼不能啟動多執行緒
其實junit是將test作為引數傳遞給了testrunner的main函式。並通過main函式進行執行。test函式在main中執行。如果test執行結束,那麼main將會呼叫system.exit 0 即使還有其他的執行緒在執行,main也會呼叫system.exit 0 system.exit...