為了流暢玩遊戲,英特爾在背後做了那麼多
最近筆者肝了 500 多個小時在玩兒《戴森球計劃》,雖然這款遊戲依舊在搶先體驗階段,但在完成度上實際還是非常高的,擋不住它真的好玩兒,這樣的“期貨”遊戲吊足了玩家的胃口,即便是“期貨”如今也收穫了一大批的玩家。
通過《戴森球計劃》這款現象級的遊戲我們看到,開發期的遊戲往往面臨著諸多的困難和挑戰,工作室人手不足、遊戲中 bug 太多、貼圖鬼畜、一核有難多核圍觀…… 這些問題《戴森球計劃》在初期開發的時候都有遇到,遊戲雖然好玩,但不少玩家也在吐槽“一幀不卡,兩幀流暢,三幀電競”,當然,遊戲優化問題不是一朝一夕能立馬解決的,這需要大量的時間和精力進行錯誤定位、演算法優化、程式碼重構等操作以此降低遊戲整體對資源的損耗,最大化的利用系統資源。
好在《戴森球計劃》團隊花了大把的時間已經完成了對遊戲的初步優化,包括多執行緒支援、程式碼重構、各種 bug 修復、新功能的增加,這些優化極大的提高了遊戲的可玩性。
此前《戴森球計劃》的開發方柚子貓工作室也解答過這款遊戲不單單是多核遊戲也是一款 GPU 遊戲,隨著處理器和顯示卡分工越來越明晰,這類擁有大量的高度自由化素材遊戲對 CPU 和 GPU 要求越來越高。
比如在《戴森球計劃》遊戲後期有數萬架運輸機在不同星系之間來回穿梭,數萬個設施同時運作,還有幾萬乃至幾十萬的太陽帆在恆星周圍環繞,幾百萬的產物同時生產,這些必須全面通過 CPU+GPU 協同處理進一步提升遊戲的體驗。《戴森球計劃》官方也表示,凡是可以平行計算的那部分計算工作,全部交給了 GPU,剩下的那部分計算量,只要 GPU 能在 16ms 之內按時渲染出來,CPU 就絕不會掉鏈子。
相比於一些大的工作室,小的開發團隊不像大型遊戲公司有著豐富的工程師團隊和專業的技術裝置,他們在進行遊戲開發的時候更加註重效率,利用現有的工具進行高效敏捷開發也成為了開發過程中常見的一種方法。
圖片來源於網路
畢竟自己花一大把時間去設計一個遊戲引擎,或者寫一個自認為高效的演算法,比直接去呼叫現成的開發引擎和演算法更加節省時間。
說起大團隊也有些比較例外的,比如 R 星開發的《GTA 5》聯機版此前就有一個存在了 7 年的史詩級“屎山”程式碼,一條需要執行 19.8 億次的 if 語句嚴重影響遊戲的載入速度。大團隊如果人員迭代非常快的話,很多祖傳的程式碼可能連註釋都沒有,新來的人不敢進行維護優化,老員工不願意接手,這樣的陳年“屎山”越堆越大,導致整個程式執行效率越來越低,畢竟碼農眼裡,既然它能執行起來,就不要管它怎麼執行的了。
圖片來源於網路
不過,玩家扒出這個驚天“屎山”後,對 R 星嚴重的不滿,《GTA 5》聯機版這個祖傳“屎山”程式碼終於在玩家的強烈吐槽下被優化了,這其中也進行了大量的工作去重構程式碼。當然,R 星這樣的“甩手掌櫃”在遊戲的開發過程中還是少的,更多的開發者都在盡力發揮軟硬體排程的效率保證遊戲的高效流暢執行,在遊戲優化過程中我們也看到類似《英雄聯盟》這樣的網遊不管是在什麼硬體條件下都能進行流暢的遊玩,這些歸根結底還是通過工具快速定位問題,並進行專門的優化和除錯以此適應不同硬體場景。
圖片來源於網路
其實在遊戲優化這件事情上,軟體和硬體都需要共同努力才可以達到最好的執行效果,對於開發者而言,完全吃透硬體而進行優化是一件非常難的事情,特別是小團隊的遊戲開發商,他們更多的是依託現有的遊戲引擎進行開發。
《戴森球計劃》就是一個例子,它基於 Unity 引擎進行開發,而很多優化引擎方和大型遊戲開發商已經和硬體提供方進行了深度的合作進行聯合調優。最典型的例子就是英特爾,英特爾目前在處理器的效能表現上已經有著非常不錯的表現,在此之前,英特爾就早早的成立遊戲合作技術部門,希望遊戲整個生態可以做的更好。
英特爾遊戲合作技術經理盧卷彬在今年 ChinaJoy 期間向我們介紹了現階段在遊戲優化領域英特爾做的一些工作。對於遊戲生態來講,硬體是基礎,軟體優化則是非常重要的,通過這幾年硬體市場的觀察來看,儲存系統是處理器計算能力的一個瓶頸,這裡主要是 L1、L2、L3 快取以及系統記憶體,CPU 架構上提升這些模組都可以帶來不錯的效能提升,就以 11 代酷睿高效能移動處理器來說,英特爾提升了 L2 和 L3 快取的大小,以此帶來了更大的資料吞吐能力。
前面我們提到,很多小的遊戲開發公司都不會重複發明新的工具或者引擎,針對遊戲開發者,“工欲善其事,必先利其器”這一點非常重要,工具是提升開發效率的關鍵也是幫助開發者進行錯誤定位、軟體優化的重要組成部分。在遊戲發發過程中,遊戲效能是非常複雜的,特別是一些元素特別多、每個元素都有自己對應的動作、每個元素之間都有碰撞,這要求遊戲開發者進行高度的效能優化,才能保證在絕大部分的硬體裝置上都能流暢的進行遊戲。
實際上,這些複雜的場景首先會有專門的遊戲引擎公司進行開發,前幾年虛幻引擎宣佈引入 Chaos 物理破壞引擎,通過 Chaos 引擎,遊戲中的各種元素都可以破壞,破壞出來的粒子和石塊之間也可以互相碰撞,有了這些專業的遊戲引擎,小的遊戲工作室也可以快速的利用這些現有的開發工具進行遊戲製作。如今虛幻、Unity、Cry Engine 等遊戲開發引擎已經覆蓋了 PC 和移動端的遊戲製作,這些遊戲開發引擎非常複雜,每個當中都有上百萬條程式碼,涵蓋的模組也非常多,包括資源管理、記憶體管理、角色行為、AI、圖形渲染、聲音、網路、物理、UI、特效、動畫等等,極大的方便遊戲開發者進行開發。即便是一些大的遊戲開發公司,他們也會利用現有的遊戲引擎進行二次開發,大的遊戲開發商以及遊戲開發引擎需要從底層進行優化,因為他們直接面對的是硬體,小的遊戲開發商雖然在遊戲引擎基礎上進行開發,但程式碼的簡潔性和效率等問題同樣也要進行優化,只要開發就一定會涉及到優化問題。
這裡,英特爾在幫助遊戲開發者和遊戲引擎開發商提供了 Intel Vtune Profiler、Intel Graphics Performance Analyzers 等工具實現快速的問題定位。
Intel Vtune Profiler 是一款業內名氣比較大的分析工具,無論是伺服器還是客戶端,它可以幫助開發者分析每個 DLL、每個函式、每條程式碼、每個執行緒,甚至每條組合語言都可以清楚的進行分析。從高層到底層,都可以通過 Vtune Profiler 進行全面、直觀的分析。
通過 Vtune Profiler 我們可以瞭解到遊戲的執行在哪裡出現了問題,每個執行緒在不同的時間節點活動是什麼樣的,執行緒之間是否有同步或者競爭關係,對於開發者來講,他們通過 Vtune Profiler 就可以對遊戲有一個整體的瞭解,知道哪個模組是瓶頸、哪個程式碼有問題,知道在哪裡修改會得到最好的優化,開發者和引擎廠商有的放矢,這樣才能更高效的進行產品提升。
我們看到 Vtune Profiler 為遊戲開發者和引擎廠商提供了翔實的效能分析資訊,以上這些都是基於處理器和儲存體系,針對 GPU 調優,英特爾還推出了 Graphics Performance Analyzers 工具,預計明年英特爾的 DG2 顯示卡上市後,估計也會增加對自家獨顯的支援。
這一工具通過高度視覺化的 UI 幫助開發者從高層到底層定位每一幀,檢視每一幀實時渲染的引數,通過分析每一幀的引數資訊,以此定向的進行優化。當然,以上工具只是幫助開發者快速定位問題,還有一些遊戲開發的初期,英特爾的技術工程師團隊也會加入其中,另外在新的硬體平臺釋出的時候,英特爾也會為一些遊戲開發者提供測試版的機器以便他們可以快速支援新裝置。
通過工具的快速定位問題,接下來就是進行落實到具體優化上。這裡通常有四種辦法進行優化。第一種方法就是修正明顯的問題程式碼,由於遊戲開發涉及的程式碼量比較龐大,並且也非常複雜,特別是一個團隊既有程式開發又有美工,這時候二者可能不會互相考慮,因此修正問題程式碼就可以很好的解決這些問題。
其次就是並行優化,目前不少的處理器都是多核多執行緒的設計,但“一核有難,多核圍觀”這樣的情況非常常見,明明可以多個車道一起跑,但由於優化的問題導致執行緒都是在擠一個車道。
就拿《戴森球計劃》來說,這款遊戲在初期對多執行緒的優化支援並不好,很多邏輯計算全都擠在一兩個執行緒中,在優化後,遊戲中的部分資源由 CPU 處理轉到 GPU 處理,CPU 所處理的內容也都通過多執行緒方式進行高效處理,保證硬體時刻都在高效的處理資料,這就是平行計算的好處。當然,《戴森球計劃》使用的 Unity 引擎對多執行緒支援本身就很好,Unity 引擎支援 ECS 和 Job System,可以快速的利用分配多個執行緒以此提高執行的效率。另外,指令集並行也是重要的優化手段,這裡主要還是英特爾和引擎開發商之間的配合,以虛幻引擎為例,在虛幻 4 和虛幻 5 中,虛幻引擎通過修改演算法程式碼使得諸如 Chaos 這樣的物理破壞引擎可以實現指令集並行,開發者通過呼叫這些工具進行簡單的設定就可以在高效效能的基礎上實現更加豐富的遊戲畫面展現。
第三點優化方法就是演算法優化,演算法這個問題要具體情況具體分析,不同的遊戲所遇到的瓶頸時不同的,利用更好的資料演算法或是資料結構進行鍼對性的調整這些需要遊戲開發者進與英特爾這類硬體廠商深入去探討。最後一點優化方法則是從底層架構進行優化,這一點是英特爾這類硬體廠商和開發者共同來完成,遊戲開發者前面的工作如果都做好了但仍然覺得效能不夠好,他們有能力和餘力可以進行底層架構的優化,英特爾的工程師也會提供相關建議給他們,讓他們自己評估這對 CPU 程式碼架構改變會有多大,是否影響維護針對這些問題由開發者做取捨。
在過去兩三年中,英特爾和一些我們熟知的遊戲都進行了深入的技術合作,比如《自走棋》、《逆水寒》、《仙俠情緣 3》、《新倩女幽魂》、《天涯明月刀》、《PUBG》等,通過遊戲的優化,這些遊戲能夠更大範圍的覆蓋各種型別的硬體裝置,以此降低玩家的硬體成本,帶來更好的遊戲體驗。就拿《英雄聯盟》這類主流網遊來講,現在無論是獨顯還是核顯都可以進行實時暢玩,降低了遊戲的硬體門檻,這其中優化帶來的效能提升非常的關鍵。英特爾也表示,也將通過與開發者和遊戲引擎開發商進一步深入合作,不論是先有的硬體產品還是未來即將釋出的新架構處理器產品,英特爾都將持續支援。
在出色的遊戲引擎和諸如英特爾這樣的硬體提供商的扶持下,現在我們國產遊戲開發者開發新遊戲的門檻越來越低,我們樂見類似《戴森球計劃》這樣優秀的國產獨立遊戲能越來越度多的在遊戲市場上有著更多的話語權,隨著更好的工具的出現,國產獨立遊戲也有著更加高效的開發環境,讓更好的遊戲概念加速落地以呈現在玩家面前。