《求生之路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的实际取值范围也受服务器参数的影响和限制,服务器上很多参数都是有关联的)