做爲一個專業web後端開發,很是業餘遊戲愛好者,普通硬件退燒者,雖然對遊戲研發一竅不通,想對遊戲性能的問題探討下。html
第一個問題,近幾年爲何遊戲主旋律都在GPU的選擇上,而每每都是CPU能力過剩,難道CPU就沒有壓榨的空間?web
先拿吃雞遊戲舉例,引用一張評測文章裏的CPU與顯卡不一樣組合配置的大逃殺benchmark圖:後端
能夠看到搭載了GTX 1080+i5 7500(4核4線程 3.4GHz)的配置跑分比GTX1070+i7 7700k(4核8線程 4.2GHz)高,說明此配置中顯卡還是決定因素。微信
而使用的CPU 與 顯卡的詳細參數以下網絡
爲何會這樣?先了解下常見的遊戲引擎,有助於瞭解其中的緣由。多線程
我對遊戲引擎不太瞭解,先找公開的資料。兩大遊戲引擎之一的Unity,代碼開源,文檔齊全,先從文檔瞭解他涉及的功能。架構
因此引擎包括了性能
2D : 顧名思義
圖形: 主要有燈光,攝像機,材質,貼圖。
物理: 主要控制遊戲世界物體相關的交互,如碰撞。
腳本: 提供對引擎建立的遊戲對象的控制,觸發遊戲事件,響應用戶輸入。
多人與網絡: 提供對網絡遊戲支持。優化
音頻: 音效必不可少,還提供聲源定位等。
動畫: 又是個無須解釋的。動畫
時間線: 經常使用來處理咱們常說的過場動畫。
UI: 定義遊戲界面,玩家最長時間觀看的地方。
導航與路徑尋找: 定義遊戲對象的導航點。
Unity服務&儀表板: 跟web後端同樣,管理員的控制檯,觀看各類遊戲數據。
XR: 提供VR/AR支持。
能夠猜想遊戲主入口的方法會加載以上功能組件,圖形/物理/網絡/腳本 層次上不相關,均可以在各自線程進行工做。
廣義上的遊戲,不管是單機遊戲仍是網絡遊戲,其主要的處理層面是在玩家與遊戲中物理世界中各類事件的交互處理上。做爲遊戲效果的直接體現上,3D遊戲中的貼圖與實時多邊形渲染是一個主要值得優化的性能點。
DX12是隨WIN10搭載的,針對現代多核CPU提供了優化。主要是下沉了API提供的基礎功能,更貼近硬件,固然這樣開發者須要管理更多的CPU與GPU的同步問題,之前在DX11中是隱含在runtime時進行處理的,DX12中對此的介紹:
圖形渲染是現代3D遊戲的主要任務之一。在DirectX 9中,原則上全部渲染API都必須在一個線程中調用。DirectX 10/11中增強了多線程支持,但各線程的負載很不平衡,渲染相關負載主要集中在遊戲的主渲染線程和圖形驅動中,這使得渲染任務沒法充分利用現代多核處理器的能力,常常成爲遊戲渲染管線的主要性能瓶頸之一。爲了提升圖形渲染效率,在DirectX 12中,多線程獲得了史無前例的支持。在從新設計的DirectX 12中,爲了讓應用程序的圖形渲染能夠達到最大的多核CPU的使用效率:一方面,DirectX 12儘量地預處理和複用渲染命令,下降渲染狀態的切換開銷,提高渲染API在CPU和GPU上的處理效率;另外一方面,爲應用程序提供了更高效的多線程渲染機制,容許應用程序最大程度地利用多任務得到性能提高。經過使用多線程手段可使圖形驅動在CPU端的開銷下降,同時也使GPU的工做效率顯著提高。DX12的多線程機制除了使渲染任務能更均衡地並行運行在不一樣的處理器核上以提高性能,還能下降CPU的功耗,這對移動平臺上的遊戲也很是重要。
從原文介紹能夠看出,因爲3D場景渲染工做是由CPU提交給GPU進行的,首先GPU要能在短期內完成運算,在此基礎上若是GPU有富裕,咱們但願能讓CPU開啓多線程提交更多的任務給GPU進行運算。
據瞭解畫圖渲染的過程是程序向顯卡提交一個Draw:App->DX runtime->User mode driver->dxgkrnl->Kernel mode driver->GPU ,到GPU前的工做量都在CPU, DX12的設計目的是減小中間層,提升效率。
基於此,參考如下使用了DX11與DX12的CPU負載對比圖:
下降了單核CPU的負載,平攤了一部分任務到其餘核上,比DX11時8核有2核徹底沒用上有改善。
看一下最近流行的吃雞最低配置:
處理器:i3-4340 / AMD FX-6300
顯卡:GeForce GTX 660 / Radeon HD 7850
DirectX : 11
DX11顯然是個問題,軟件老是落後於硬件更新的,硬件架構升級後,上層的操做系統纔會開始適配,而後是操做系統之上,應用層的遊戲引擎。
再看看DOTA2, 還在使用DirectX 9c。
遊戲引擎須要使用操做系統提供的新的硬件層的抽象API,封裝層高層API供開發者使用。
至少基於Unity3D的產品顯然尚未升級。
顯然與Web產品同樣,JDK已經開始發佈10了。還有大量的遺留產品在使用JDK6。JDK8的lambda使用方式也纔剛剛開始普及,應用層比底層設施仍是要遲緩的多。
參考內容:
https://msdn.microsoft.com/zh...
https://docs.unity3d.com/Manu...
本文來自微信公衆號「麥芽麪包,id「darkjune_think」
轉載請註明。微信掃一掃關注公衆號。
交流Email: zhukunrong@yeah.net