我的世界伺服器有tickrate這個概念嗎?

聽說很多大型多人在線遊戲都有tickrate,比如守望先鋒,csgo,我的世界java版有嗎,如果有默認是多少呢,如何改變它呢


  先上結論:Minecraft伺服器有tickrate概念,默認是20tps,即每秒執行20次遊戲幀,每次間隔50毫秒,這個設定是可以人為更改的。

  1. 一般而言,我的世界伺服器tps在18以上就屬於流暢狀態,超過16就基本無法被感知到卡頓(瞬卡導致的tps掉落除外)
  2. 我的世界服務端(官方原版、Bukkit、Spigot、Paper、Sponge)的tickloop,即核心邏輯運算部分,是單線程的,並且我的世界的計算量比你想像的要大,tps20已經是一個上限,也是一個比較合理的數值 

    如何更改tickrate?以1.12.2的paper服務端為例:

    1. 在MinecraftServer里找到run方法(如圖)

  可以看出,只要服務端處於運行狀態就會每間隔一次wait周期就運行一次,這個wait周期默認是50毫秒,所以tickrate是20(一秒鐘是1000毫秒,除以50毫秒,1秒可以運行20次)

2. 不難看出wait周期是根據TICK_TIME計算出來的,接下來查找TICK_TIME(如圖)

  可以看出,你只需要修改默認20的TPS變數,把它修改為你想要的tickrate即可。

  如果你只是想體驗下不同的tickrate有什麼不同,可以下載tickratechanger模組在單機遊戲里體驗下,下載地址:TickrateChanger - Change the speed that your game will run 


mc里的tickrate就是tps(ticks per second),標準tps為20,即一秒鐘進行20次數據更新。

伺服器如果運算量很大,tps會下降,但是大部分情況下tps不低於16不會感受到明顯的卡頓,tps不低於19一般都被認為可以接受。

Spigot等基於BukkitAPI的插件伺服器直接使用/tps命令查看tps,Forge伺服器使用/forge tps查看tps,基於SpongeAPI的伺服器使用/sponge tps查看tps。

目前沒有相對成熟的提高/降低tps的手段。但是一方面,mc本身的運算量還是不低的,再綜合JVM的效率,試圖提高tps的可行性較低。另一方面,20的tps已經很低了,試圖降低tps會大大降低遊戲的流暢程度,甚至目前20tps的情況都很容易看到末影人瞬移時出現的位移插值(即末影人瞬移時能夠看到出現在兩地連線中間某處,這是fps比tps高數倍以及Mojang代碼綜合導致的結果),所以20tps是目前玩家廣泛接受的方案。


一樓說的比較詳細了,不過我還需要補充幾點。

  1、之前的MC很難有方法提升tps的表現,但是現在服主們可以通過安裝一款由Minecraft知名開發者「V樂樂」大神開發的「VLagger」插件來達到和tps提升相同的效果,注意這並非是直接提升tps,而是以另闢蹊徑的方法使得伺服器更加節能、高效、流暢,具體會在下面介紹

  2、全球首創的「TPS垂直同步技術」。這也是上文提到的「特殊方法」,我們都知道許多3D遊戲中的FPS垂直同步技術,可以防止遊戲畫面撕裂、高幀數表現不自然等問題,「TPS垂直同步技術」同理,通過對服務端數據運算的限制,使其在不必要運算時不運算,而是在集中的時間點統一處理,這樣既能保證伺服器浪費不必要的性能,也能提升伺服器的穩定性。「V樂樂」表示,這個功能重新定義了TPS。並且為了推動國內的開發者進步,大公無私的對代碼進行了開源,我們可以欣賞一下:


推薦閱讀:

TAG:我的世界遊戲 |