【FF14】GCD偏移和幀率稅的詳解與再分析

1?? ? ? 什么是GCD偏移和幀率稅
????????在統(tǒng)計2.48GCD時,我發(fā)現(xiàn)游戲內(nèi)預(yù)設(shè)GCD與實際GCD存在偏差,如下圖所示。

????????參照國際服Kekona在5.3版本的武僧攻略以及山羊奶巴伐露@延夏在6.0版本的舞者攻略中做出的假設(shè)和結(jié)論:GCD偏移的原因與幀率稅有關(guān),主要來自于GCD與幀率的對齊程度以及服務(wù)器相應(yīng)程度這兩方面。
????????首先是GCD與幀率FPS的對齊程度問題。
????????在FF14中,因為游戲的底層邏輯原因,GCD是基于幀率FPS的,就算在某一幀我們的GCD的冷卻已經(jīng)結(jié)束了,游戲的客戶端也需要等到下一幀被渲染才能處理下一個GCD。
????????以1.95sGCD下的武僧為例,下圖是59FPS和61FPS時GCD間隔和FPS之間的對應(yīng)關(guān)系。

????????可以看到,在59FPS下,我們的1.95GCD會在第115.05幀冷卻完畢,而受限于游戲底層邏輯,下一個GCD會在第116幀后才能使用。
????????多出的0.95幀就會因此對GCD造成0.95/59≈0.016s的延后,而使用61FPS則是在第118.95幀轉(zhuǎn)好,多出的0.05幀對GCD造成0.05/61≈0.0008s的延后,幾乎不造成影響。
????????然而,以0.999幀為例,幀率稅的影響隨著FPS增加而減少,且在FPS≥60后,最多影響0.017 s,相較于0.04 s微不足道。

????????其次就是服務(wù)器影響程度。
????????玩家的數(shù)據(jù)先是上傳到服務(wù)器,在服務(wù)器在檢測到玩家的GCD間隔后,為了保證GCD盡量穩(wěn)定,會按照GCD±0.04s相對應(yīng)地進(jìn)行修正。
????????如果FPS與GCD對不齊,會被認(rèn)為是服務(wù)器過快,因此會頻繁的對GCD進(jìn)行+0.04s的修正,這種修正被認(rèn)為是壞修正。
????????反之,如果FPS與GCD對齊很好,那么服務(wù)器會認(rèn)為GCD比實際慢了,因此會頻繁進(jìn)行-0.04s的修正,這種修正被認(rèn)為是好修正。
????????好修正會GCD在延遲+幀率稅的情況下仍然符合實際的值。理論上來講只需要用:GCD×FPS=整數(shù),就能獲得一個很好的幀率斷點。此外,在FPS和GCD不匹配的情況下,會有非常大的可能性達(dá)不到應(yīng)該有的技能速度閾值。以舞者為例,在2.47GCD、60FPS的情況下,受到幀率稅的影響,計算下來的實際GCD為2.478s,接近2.48s,相當(dāng)于技速掉了一檔。
????????然而,如果將FPS鎖在斷點的話會得到相當(dāng)多的壞修正,這是因為實際的FPS會在鎖幀點上下波動,并且有略低于鎖幀點的趨勢。以武僧1.95GCD為例,在鎖60FPS時,實際FPS略低于60,修正結(jié)果接近使用59FPS的情況。而鎖在斷點的下一幀,即61FPS,能得到相當(dāng)多的好修正。

2? ? ? ?GCD偏移和幀率稅的再分析
????????然而,在實際的驗證中,發(fā)現(xiàn)在一些武僧1.95GCD的斷點+1值(如:101FPS)并沒有出現(xiàn)優(yōu)于斷點的情況,甚至101FPS時的好修正并沒有高出太多,甚至101FPS的實際GCD還高于100FPS的實際GCD(受于電腦配置問題,121FPS的情況無法復(fù)現(xiàn))。


????????我又對赤魔法師2.48GCD進(jìn)行了測試,發(fā)現(xiàn)在其斷點+1值(如:51、76、101FPS)上的實際GCD值并不是最小的。

測試得到的赤魔2.48GCD
????????那么這是否代表前面對于幀率稅的結(jié)果是錯誤的?并不完全是FPS對游戲GCD確實有影響,GCD技能確實是在冷卻結(jié)束的下一幀才能使用。主要的問題在于±0.04s的好壞修正與FPS和GCD的關(guān)系。
????????受于FPS限制,服務(wù)器會首先對玩家的實際GCD進(jìn)行一個計算,會同時參考玩家的FPS和游戲內(nèi)設(shè)置的GCD,所計算的理論GCD值=GCD+因為幀率延后的時間,即:理論GCD=GCD+[1-mod(GCD×FPS,1)]/FPS????(mod為取余函數(shù),對GCD*FPS除以1進(jìn)行取余)。
????????例如:我在游戲中選用2.48GCD,F(xiàn)PS=101,那么服務(wù)器就會假定玩家的理論GCD=2.48+[1-mod(2.48×101,1)]/101=2.48+(1-0.48)/101≈2.485s。
????????而修正原因是因為GCD偏移到了2.485±0.04s之外,服務(wù)器認(rèn)為需要將GCD修正回2.485s,隨后服務(wù)器就會對玩家進(jìn)行好修正和壞修正,也就是說,好修正和壞修正的數(shù)量和斷點并沒有直接關(guān)系,好修正多不代表當(dāng)前FPS最優(yōu),而有壞修正也不代表當(dāng)前FPS最差。好/壞修正則是取決于玩家的實際GCD與理論GCD相比是否偏移過大。
????????將上述假設(shè)帶回到實際,可以看到理論GCD與實際GCD非常接近,對于我之前所實測的武僧1.95GCD,相關(guān)性85.57%,而對于樣本量更大的赤魔法師2.48GCD,相關(guān)性有95.89%,可以證明上述假設(shè)是較為準(zhǔn)確的。




????????此外,值得注意的是,在斷點(50、75、100FPS)上,實際GCD會顯著低于理論GCD,具體原因未知,但依舊不是最低的實際GCD,不影響對FPS的擇優(yōu)選擇。
????????基于上述假設(shè),我給出了赤魔法師在2.50-2.47GCD下不同F(xiàn)PS情況的理論GCD,可作為幀率選擇參考使用,其它的GCD情況可根據(jù)我前面提出的計算方法進(jìn)行計算,即:理論GCD=GCD+[1-mod(GCD×FPS,1)]/FPS。

3? ? ? ?小結(jié)
????? 服務(wù)器會根據(jù)FPS與游戲內(nèi)設(shè)置的GCD計算理論GCD值,并根據(jù)玩家實際GCD與理論GCD的差值進(jìn)行±0.04s的修正。
?? ? ?服務(wù)器所計算的理論GCD值=GCD+因為幀率延后的時間,即:理論GCD=GCD+[1-mod(GCD×FPS,1)]/FPS。