《惡靈勢力2》伺服器tickrate的作用與網絡參數的優化
在《惡靈勢力2》中,玩家能夠自己搭建伺服器,這就不得不牽涉到伺服器tickrate與各項網絡參數了,只有合理調整好這些,你的伺服器才能夠盡善盡美。隨小編一起來看看關於伺服器tickrate的作用與網絡參數的優化吧。
首先,tickrate是服務端裡一個非常關鍵的參數,它影響了服務端與客戶端之間的更新頻率,理論上來說,tickrate越高的伺服器,玩家之間各種操作的反饋和判定就會更加精準,但是同時也會對伺服器和玩家的網絡有更高的要求。
畢竟tickrate越高,服務端與客戶端之間收發的數據包就會越多,所以產生loss的幾率就會變高,如果網絡帶寬不夠,就會產生choke,而loss和choke會嚴重影響遊戲體驗。
這裡只是簡單的介紹一下tickrate的作用,如果想要了解更多自己去網上搜索相關的資料。
然而,L4D2是一款09年的老遊戲了,那個年代的Source引擎(Source2009)版本比較老舊,存在很多問題,而且沒有開放接口對tickrate進行修改。但是後來有國外的技術大佬開發了一款名為Tickrate Enabler的插件(並不是Sourcemod插件,也不是Metamod插件,準確的說是Source Server-Side Addons),這個插件可以讓我們修改L4D2服務端的tickrate,打破L4D2服務端默認30Tick的瓶頸,嗨呀,發財啦發財啦
然後上面也簡單介紹了tickrate的作用,這對於L4D2來說是一個革命性的進步,但事實並非如此。。。高tickrate的伺服器往往存在著嚴重的choke,不僅如此,在高tickrate的伺服器裡也並沒有感覺到各種騷操作的判定變得精準,這就是服主和玩家經驗尚缺,對Source引擎網絡傳輸概念不了解的後果。
一些服主可能以為我把tickrate調高,整成100tick,我的伺服器就會變得高大上起來,對此我只能說too young
實際上你的伺服器只能說是最高支持100tick,並沒有發揮出100tick的作用,同樣的,玩家的參數設定不當,也只能說是在100tick的伺服器裡玩著30tick的判定。
所以,服務端不僅要將tickrate調高,同時還要修改一些網絡傳輸參數來達到對應tickrate的配置,這樣才能100%發揮出高tickrate的優勢,同樣的,客戶端也要修改一些網絡傳輸參數,才能享受到高tickrate帶來的優勢,而且服務端與客戶端的網絡傳輸參數要保持同步才是最佳效果。
打個簡單的比喻,tickrate和網絡傳輸參數好比兩根一樣大的水管,tickrate的那根水管閥門全開,而網絡傳輸參數的那根水管閥門隻開了一半,所以你tickrate再高,經過網絡傳輸參數水管的也就那麽多,所以毫無意義,而且還會產生較高的choke。
順便簡單一句話解釋下loss和choke是什麽意思,loss就是丟包,choke就是網絡帶寬不夠,導致的數據包被延遲送達,網絡瓶頸和參數設定不當都會產生choke,伺服器與客戶端的網絡連接品質有問題就會產生loss.
根據Valve Developer Community的解釋以及自己的理解和實際調試結果,我來分別介紹下客戶端和服務端的網絡傳輸參數(這裡只是介紹作用,後面再給出設定建議)。
首先,先說下客戶端的幾個參數:
1、rate - 客戶端每秒最大可以接收多少字節的數據包,默認值為10000(約等於9.76k),在L4D2這個版本的引擎裡最大支持30000(約等於29.3k)。這個參數控制著遊戲客戶端的帶寬,取值範圍受伺服器對應參數sv_minrate/sv_maxrate的限制。
2、cl_updaterate - 客戶端每秒向伺服器請求多少次刷新,這個參數控制著客戶端的遊戲世界更新頻率,理論上設的越高,那麽你在遊戲裡看到的東西就會跟伺服器更為同步。默認值為20 (也就是20Tick),最大值受伺服器Tickrate的影響,如果超過了伺服器的Tickrate,那麽毫無意義而且會浪費帶寬,取值範圍受伺服器對應參數sv_minupdaterate/sv_maxupdaterate的限制。
3、cl_cmdrate - 客戶端每秒最大可以向伺服器報告多少次動作,玩家在遊戲裡移動、射擊、推猴、秒牛等等都屬於一種動作。因為伺服器Tickrate的概念,服務端在收集捕獲這些動作的時候都有個頻率,不可能實時將各種細微的操作都立即計算出來反饋給客戶端,所以這個參數和Tickrate控制著遊戲裡各種判定的精準度。默認值為30(也就是30Tick),最大值為100並且受伺服器Tickrate的影響,如果超過了伺服器的Tickrate,那麽毫無意義而且會浪費帶寬,取值範圍受伺服器對應參數sv_mincmdrate/sv_maxcmdrate的限制。
4、這裡還要提到兩個參數cl_interp_ratio和cl_interp,也就是我們常說的lerp,國內L4D2對lerp這個東西有著非常嚴重的誤解,甚至還有很多人無腦跟風,所以我要重點並且簡單明了的介紹一下lerp的作用,以及如何根據自己的情況去設定合理的lerp值。
5、Lerp的作用:我上面介紹了伺服器Tickrate的概念,以及cl_updaterate參數的作用,所以看懂了的人都知道,服務端遊戲世界與客戶端遊戲世界的同步都有個頻率,這個頻率受Tickrate和cl_updaterate參數的影響,並不是實時的。因此,在兩次更新的間隔時間裡(1000ms/Tickrate=?ms),客戶端沒有收到來自伺服器的數據,就不知道該顯示什麽,所以就有了lerp這個概念。lerp用於預測和補償兩次更新的間隔時間裡該顯示什麽,也就是說lerp相當於在你原有延遲的基礎上再給你手動增加了個延遲,比如你現在的延遲(ping)是100ms,你的lerp值也是100ms,那麽你真正的延遲是100ping+100lerp=200ms,那麽你在遊戲裡看到的都是0.2秒(200ms)前發生的事情,所以就產生了為什麽我看hunter離我還有這麽遠就撲中我了,我charger撞出去模型都碰撞了為什麽沒有判定,tank拳頭賊J8長等情況。。同樣的,在伺服器刷新頻率不高(tickrate低或者網絡傳輸參數沒有優化)的情況下,你設定了較低的lerp值就會看到其他玩家以及小SS移動的時候模型一頓一頓的(一步一個小閃現)。這就是tickrate/ping/lerp/updaterate/cmdrate的鍋在正規比賽中禁止選手在中途修改lerp值也是有原因的,因為在某些情況下lerp值能給自己帶來優勢,屬於涉嫌作弊的行為。
6、所以lerp值要根據自己的網絡情況,以及伺服器的網絡情況和參數設定來得到最適合自己的lerp值,一般情況下,只要你不是那種玩啥都卡的村裡網,而且伺服器網絡和刷新頻率沒有問題,那麽我推薦lerp值都應該設定為0,這樣才能最大程度的保證你看到的東西沒有延遲。如果伺服器刷新頻率不夠或者你的網絡有點毛病,那麽在盡可能低的原則下(個人建議),找到一個能流暢遊戲的lerp值才是最適合你的,lerp值也跟你的反應速度和習慣有關,用慣了一個lerp的玩家可能需要一定時間才能適應新的lerp值。(以上均為個人建議,僅供參考)
具體lerp值該怎麽修改我這裡就懶得BB了,網上到處都有教程。(其實lerp值的影響範圍跟tickrate和updaterate有關,我這裡就不細說了,普通玩家可以不必關心這些,大概明白lerp的意思就行。一個合格的伺服器都會設定好自己的相關參數,因為客戶端lerp的實際取值範圍也受伺服器參數的影響和限制,伺服器上很多參數都是有關聯的)