內測開放第三天,后臺監控面板上的長安城地圖區域亮成了一片白色。
那片白色不是正常的淺灰底色,是角色密度超過閾值之后系統自動標注的紅色警告疊了一層又一層,把整片主城區的網格染成了刺眼的亮斑。
梁永琪站在監控大屏前面,屏幕上長安大街的俯視圖里擠著上千個藍色的光點,每個光點代表一個在線角色,光點之間已經沒有了空隙,全部擠成了幾團密度過高的光團。
那些光團還在不斷膨脹,邊緣不斷有新的藍色光點匯入,像一滴墨掉進清水里,越暈越大,越暈越濃。
技術組的測試員在旁邊的工位上跑了一輪實機測試。
他的角色從長安大街的東側入口進去,剛走了三步,畫面就開始頓。
幀數從三十幀掉到十五幀,再掉到個位數,屏幕上角色的移動變成了跳幀式的推進,走一步停兩秒,再走一步又停兩秒。
他按了一下方向鍵讓角色往路邊靠,角色瞬移了兩米,像被什么東西從后面推了一把。
測試員又按了一下反方向鍵,角色沒有反應,過了三秒之后突然往反方向彈了五六米,直接卡進了路邊一個擺攤npc的模型里面,半個身子嵌在攤位桌板中間,只露出上半身在外面,兩只手還在空中做著奔跑的擺動動作。
“瞬移出現了。”測試員說了一句,手指在鍵盤上敲了兩下,把幀數日志導了出來。
他又補了一句,“比昨天嚴重多了,昨天只是偶爾跳一下,今天基本走不動。”
李軒從機房那邊走過來,站在測試員身后看著屏幕上的角色在原地跳幀。
他的眉頭皺著,兩只手插在口袋里,手指在褲袋里微微動著,像在腦子里跑代碼。
他站了大約兩分鐘,眼睛一直盯著屏幕上那個卡在攤位里的角色,看著它每隔幾秒就往不同方向彈一下,每次彈的位置都不一樣,有時候往左,有時候往右,有時候直接彈到半空中又落下來。
然后他轉身走回機房,打開了自己的主控機。
梁永琪跟在后面走進了機房。
李軒坐在主控機前面,屏幕上已經打開了渲染引擎的參數配置表。
他的手指在鍵盤上快速翻頁,翻到同屏渲染上限那一欄的時候停了下來。
那一欄的數值設的是八百。
他把光標停在那個數字上面,沒有改。
屏幕上的參數表密密麻麻排了幾十行,每一行都是一個可能影響性能的變量,但李軒的眼睛只盯著那個八百。
“引擎的同屏渲染上限是八百個角色。”他說,聲音不高,語速比平時慢一些,像在一邊想一邊說,“長安大街同時擠進來一千兩百多個人,超過上限的那部分角色全部被引擎丟掉了。
被丟掉的角色的位置數據還在服務器端存著,但客戶端不渲染。
服務器那邊把這些角色的位置廣播回來的時候客戶端不知道該怎么處理,就出現了瞬移——角色在屏幕上的位置和服務器端的位置對不上,系統嘗試修正的時候就直接跳過去了。”
他頓了一下,手指在桌面上輕輕敲了兩下,又補了一句:“客戶端本地算出來的位置和服務器發過來的位置中間差了一大截,系統每幀都在嘗試把這兩個位置拉到一起,拉不過來的時候就強制同步,那個強制同步的瞬間就是玩家看到的瞬移。”
梁永琪站在他身后。
“那把同屏渲染上限往上調呢?調到一千五或者兩千。”她往前走了半步,視線落在屏幕上那個八百的數字上面,“服務器端能撐住一千兩百個人,說明數據處理這塊沒問題,卡的是客戶端渲染。
那把上限放開,讓引擎多畫幾個人,問題不就解決了?”
李軒搖了搖頭。