2021-05-12 14:32:11
GTA5線上模式載入速度緩慢的原因找到了
「看雲模擬器」或將成為歷史。
長久以來,GTA5玩家們深受遊戲異常緩慢的載入速度困擾。雖說遊戲已經發售七年有餘,玩家群體或多或少都提升了裝置配置,讀取線下故事模式的速度也縮短至1-2分鐘。
但是線上模式的GTAOL似乎沒有受到玩家配置提升的影響,亦沒有在這七年裡得到R星的任何優化。從進入遊戲看見R星的巨大LOGO,到成功進入線上模式獲得角色的操控權,這一過程仍然需要花上數分鐘。
在暢遊洛聖都之前,停留在洛聖都的天上「看雲」,成了每位GTAOL玩家的日常。
根據Reddit上7個月前發起的某項271人蔘與的不記名投票,僅有少數坐擁高階配置PC或次世代主機的玩家能夠在3分鐘內進入GTAOL,享受不到這種體驗的玩家則佔據了81.2%。
玩家們也試過尋找GTAOL載入速度奇慢無比的原因。有人將載入慢的問題歸結於GTAOL的P2P戰局系統,系統強制擁有不同網路環境的玩家互連,資料同步困難致使載入緩慢。也有人認為,硬碟的讀取速度會影響從遊戲檔案中讀取模型的速度,進而影響載入速度。
此外在玩家社群中還流行著一種玄學,即先進入故事模式再進入線上模式,比起從主選單直接進入線上模式會快個幾秒。
然而這樣的玄學並沒有技術宅T0ST最近釋出的補丁來得實在。他只是破解並重寫了一下程式程式碼,便把GTAOL的載入時間縮短了近70%。
T0ST上個月重新拾起GTAOL,他的老電腦配置不算高,讀取線上模式大概需要6分鐘左右。T0ST無法理解一部擁有七年曆史的線上遊戲讀取時間為何仍要如此之久,便結合網路搜尋結果與自用電腦的情況著手展開研究。
T0ST首先同時打開了GTA5與Win10系統的工作管理員。工作管理員顯示,當GTAOL進入讀取畫面,電腦的硬碟佔用率完全可以忽略不計;網路佔用率一開始很高,在兩分鐘後也降到了較低的水平。
值得注意的是,CPU的佔用率在這幾分鐘里居高不下,始終保持在60%-70%左右,CPU的八個核心處理器中只有一個在持續運作。
T0ST所使用的CPU單核效能並不優秀,因此讀取GTAOL的速度大幅落後於同等配置;但這無法解釋遊戲讀取時對CPU的異常高佔用。由於他不可能從R星那裡要到原始碼,他只好自己著手反彙編,找到那份耗盡CPU效能的檔案,並破譯檔案中一部分未經嚴格加密的程式碼。
這份佔用CPU的檔案負責匯入一份10MB大小的JSON文件,文件記錄了遊戲中玩家能夠買到的所有物品——載具、設施、武器,加起來大概有63000個條目。
T0ST發現,遊戲程式碼匯入文件與物品的效率奇低無比。首先,程式碼每次解析JSON文件中的一項物品後,都會重新計算文件中的字元數量,這就需要63000次計算。
其次,程式碼解析一項物品後,需要讀取這項物品的相關資料。每樣物品都有與之連結的資料,例如物品售價、一輛車的時速、一把武器的屬性等等。物品與物品資料之間通過雜湊演算法得出的特定值一一對應,這個特定值有如這一物品的身份證號,便於程式碼查詢。
為了防止「身份證號」重複,導致檔案衝突、遊戲報錯,每次遊戲匯入一項物品及其資料之前,程式碼都會例行檢查其他所有物品的演算法值避免出現重複,這種檢查還要重複63000次。
T0ST算了一下,GTAOL的讀取工作共計需要約1984531500次計算,這對CPU來說確實是很大的工作量。
然而對文件字元的數萬次重複計算本身毫無意義,且物品與物品資料對應的演算法值經T0ST驗證,都是獨一無二的,根本不會出現重複,因此在這近2億次的計算中,絕大部分的計算都在浪費用電。
於是T0ST自己編寫了兩個補丁。針對第一個問題,T0ST創建了一個快取,當R星的程式碼嘗試計算文件字元數量的時候,會讀取快取裡的資料,將計算次數從63000次減少到僅讀取快取的1次。第二個問題就更好解決了,T0ST讓程式碼跳過了檢查演算法值的步驟,直接省去了上億次的計算。
有了這兩個補丁,GTAOL在T0ST電腦上的讀取速度一躍縮短為1分50秒,整整提升了69.4%。
R星團隊七年都沒有解決的問題,T0ST一個人不到一天便搞定了。2月28日,T0ST發表了一篇部落格記錄他的測試結果,並公開補丁及原始碼供玩家們下載。
不過他也指出,補丁對於不同電腦的優化效果必定存在差異。另外,使用補丁可能觸發遊戲的反作弊機制,進而導致賬戶封禁。
鑑於R星對於GTAOL修改與破解檔案的行為一向毫不手軟,T0ST只能希望R星看到相關報道後放過自己,完善遊戲從未修改過的程式碼,讓「看雲模擬器」成為歷史。
相關文章