開心遊戲館

位置:首頁 > 單機圖文攻略 > 

求生之路2服務器tickrate的作用與網絡參數的優化

在《求生之路2》中,玩家能夠自己搭建服務器,這就不得不牽涉到服務器tickrate與各項網絡參數了,只有合理調整好這些,你的服務器才能夠盡善盡美。隨小編一起來看看關於服務器tickrate的作用與網絡參數的優化吧。

求生之路2服務器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的實際取值範圍也受服務器參數的影響和限制,服務器上很多參數都是有關聯的)