电子玩乐
首发于电子玩乐
CSGO深度教学7——从wNv被“黑”掉的世界冠军,到CS的Netcodes与客户端参数

CSGO深度教学7——从wNv被“黑”掉的世界冠军,到CS的Netcodes与客户端参数

​​我们大家都知道,中国CS队伍的第一个世界大赛冠军是wNv.gm 在2005年12月份的WEG S3上夺冠,这个比赛的含金量大概类似目前震中杯之类的比赛,还不及Major级别。这个事迹因为直到今天都被反复被提及,作为情怀被日常消费,所以新玩家还算有所了解。

但是中国第一次与大赛分站赛冠军失之交臂是在再之前半年的CPL2005新加坡分站赛上,wNv.cn被“黑”掉的冠军。这次比赛的剧情是,wNv从胜者组打进决赛,决赛中面对fnatic只需赢一张图就可以夺冠。

决赛第一张图nuke上加时输了之后,第二张图中国国图dust2上,做CT上半场11-4领先fnatic。2005年那个时候,SK的A台3点式防守都算先进战术,一般认为沙2还是个偏T图,wNv的冠军十拿九稳。就在这个时候,裁判突然检查了wNv的机器,说其中几台ex_interp参数违规,本身应该设置成0.01,但是wNv队员设置为0.1。之后fnatic比较有风度说重赛沙2就可以,wNv表示拒绝,因而被判负与冠军失之交臂。

至于故事情节,由于当时媒体不发达,年代也久远,具体细节莫衷一是。有阴谋论说fnatic主动投诉、wNv的参数是裁判挖坑设置的之类的,也有确实怀疑wNv队员错误设置了参数的。也许真相早已经无法挖掘,但是作为很合适引出这个系列的文章的引子:

网络参数(netcodes)和config设置,真的能给游戏带来特殊的优势吗?服务器和网络的情况,对游戏体验有多大影响?

netcode,就是网游中,服务器、网络及客户端连接,以及互相发送数据包的情况的相关内容的集合。Netcode状况好,游戏体验就好。

Netcode的Wiki百科解释:en.wikipedia.org/wiki/N

Netcode is a blanket term for anything that somehow relates to networking in online games; netcode is a term most commonly used by gamers when discussing synchronization issues between clients and servers. The actual elements of a game engine that can cause so-called "netcode issues" include, among other things, latency, lag compensation or the lack thereof skill, simulation errors, and network issues between the client and server that are completely out of the game's hands.[1] Netcode as a term tends to be used only in the gaming community, as it is not recognized as an actual computer science term.[2][3]

因为长度考虑,会将这篇文章分成两部分,客户端网络参数,和服务器端(改日发)。来说明网络参数和服务器、线路质量对游戏体验的影响。

这系列文章部分内容会比较晦涩难懂,可以直接跳过看干货部分,无脑copy这个设置,不会影响使用。

热身结束,正文开始


上篇:客户端Netcodes参数原理及设置

一般认为,对游戏体验有最大影响的客户端(即大家的CSGO程序)设置是下面要介绍的这5个,建议把这些写入config或者启动项。

1. 客户端上传下载参数。

下方这三个参数,是设置客户端的上传和下载的参数,因为有标准答案和最优设置,因此直接分享给大家。//后面的是解释。

Rate “786432” //这个默认值是196608,是客户端每秒可以接受字节数的最大值,只要不是6M以下小水管,都可以设置成最大值,6M以下的,按照你多少M,除以6,乘以786432就行了。这个以前CSGO初期默认最大值只有80000,现在已经提高很多了。

cl_cmdrate 128 //每秒客户端可以向服务器发送的数据包数量最大值,默认是64,与官匹匹配。因为大部分平台是128tick,所以这个要设置成128;打官匹的时候会自动上传64,不会有影响。

cl_updaterate 128 //每秒客户端可以向服务器申请接收的数据包数量最大值,默认是64,与官匹匹配。因为大部分平台是128tick,所以这个要设置成128;打官匹的时候,虽然你申请接收128,但是服务器只下发64,因此也不会有影响。

2.有意思的ex_interp参数

那么最有意思的来了,因为上面说的wNv那事,使得1.6玩家几乎是无人不知无人不晓的ex_interp参数。但是这个参数到底是干嘛的,原理是什么,真的对游戏平衡有那么明显的影响吗?却没几个人说得清楚。

Interp是view interpolation delay这项设置的参数。View在这里是视野的意思,interpolation是插值计算,帧间计算的意思,delay是延迟。这里插值计算指的是什么呢,比如说我们的游戏内FPS是300,但是服务器只有128tick啊,这样有的2-3frame之间没有tick产生,也就是没有上传和下载数据包,但是这两帧敌人也不是不动的呀,这就需要你的客户端在本地进行预测运算,来显示(rendering)画面。这就是插值计算interpolation。

Hitbox移动

这就是服务器端的Hitbox移动,可见是128tick下也是一段一段的过去的。但是我们游戏内看人物还是比较顺滑的过去的。

我们来形象说明一下这个参数的原理

要解决的问题:

假设A和B两位玩家,隔着墙角互相架枪,谁都看不见谁。只要他们不移动,他们就一直互相看不见(废话)。那么这时候突然有一个人开始移动的情况下,假设在这个tick(frame)期间(虽然128tick这个间隔只有128分之一秒,但是我们为了说明问题,假设这个tick足够长), A拉出了墙外,B还在墙后?那么谁会先看到谁呢?

理论上应该是,A拉出了墙外,因为客户端有上一 tick B的位置信息,通过本地运算,A已经可以看到B了。但是A拉出来的信息会在下一个tick里,服务器还没有收到A拉出来的信息,B也就还没有从服务器接到A拉出来的信息,在同一时间,B的客户端是不知道、也无法显示A拉出来的画面的。

这问题就来了,A会获得一个tick持续时间的提前视野优势,也就是主动拉出来的一方,会提前一个tick看到对方,先发现、先开枪,从性质上来说,是巨大的优势。

从量化来说,1.6的客户端默认ex_interp 0.1的参数是与20的tickrate相匹配的,tickrate 20也就是每50ms服务器下发一次信息,也就是说,A会至少提前50毫秒看到B。128tick的话是8ms左右。我们知道现在电竞显示器1ms,系统内各项延迟几ms,网络好的话十几ms,这个50ms可以说是巨大优势了,即使8ms,也不算小。

解决问题的方式:ex_interp参数

这个参数的目的就在于,人为的将你拉出来的时间,和你获得墙后人物视野的时间中间人为的设置一个延迟,也就是惩罚,来延后A获得B视野的时间,这样让A和B能够公平地、同一时间地获得对方视野。

Cl_interp的单位是秒,也就是0.01就是这个延迟是0.01秒,0.1这个延迟是0.1秒。CS1.6客户端出于2000年代大部分在线游戏的网络情况考虑,将这个延迟默认设置的比较高,0.1,上面重复了,去跟20左右的tickrate去匹配。原理是这个延迟要是tick之间时间间隔的两倍,确定你的视野都是服务器下发的确实信息,不出现那种本地运算给你优势的情况。但是CPL是线下赛,服务器质量很高,刷新率(即现在的tickrate)很高,网络是局域网环境,因此不需要设置这么高的延迟,0.01秒足够了。CPL的规则书上,也是这么要求的。

回到wNv上,这个参数怎么影响游戏平衡?

那么,看起来wNv的设置延迟更高,应该吃亏呀?怎么还判违规了呢?个人理解应该是三点:

1、 无论你设置成0.1或者0.01,只对你自己的客户端有影响,影响的就是服务器Hitbox,和本地的Hitbox的呈现方式不同。虽然可能说是你抽到了在你电脑上看起来是人,在服务器实际上是空气,但结果服务器却考虑你延迟比较高,给你判命中了,也就是服务器端的Hitbox,和你本地的Hitbox出现了很大的差别。

2、 根据公式, Command Execution Time (服务器执行你的命令的时刻)= Current Server Time(现在服务器的物理时刻)– 网络延迟Packet Latency - Client View Interpolation 插值计算滞后值,也就是ex_interp设置的越高,服务器反而执行你的命令越早(没错服务器里的物理时刻晚于你客户端的)。也就是说,如果两个人网络延迟一致,然后电脑运算速度一致,又在绝对的同一时刻开枪的话,ex_interp 0.1的那位会领先于0.01的那位被服务器判定先开枪,这就是优势。

3、 也可能就是规则就是规则,必须按照规则来,设置错了就要受罚。


客户端和服务器端Hitbox存在差别

红色和蓝色分别是客户端和服务器端Hitbox,可见两者是有点差别的,ex_interp设置的大,这个差别就大,对平衡还是有影响的。


那么,CSGO的情况是这样的。

cl_interp 0 //默认是0.03125,与64tick匹配,即每两个tick之间的间隔是64分之一秒,0.015625秒,默认设置成这个时间的2倍,确定客户端给你的视野,都是服务器上一tick计算的结果,而不是你客户端本地提前给你的。那么128tick是不是应该设置成再小一倍,我却推荐设置成0呢?这个就与下面这个参数有关。

cl_interp_ratio 1 //这个参数默认是2,是2009年版Source引擎最新加入的参数,CSGO是2011年版Source引擎。之前说了,CSGO默认认为合适的cl_interp 应该是客户端接受tickrate的时间间隔(等于1秒除以cl_updaterate)的2倍,这个cl_interp_ratio 设置的就是这个2倍关系。

那么问题来了,如果我设置cl_interp 0,cl_interp_ratio 1,cl_updaterate 128,服务器真实tickrate也是128,两个设置的延迟就不一样了,一个是0秒,一个是1/128秒,客户端怎么选呢?

(什么?真实tickrate和设置tickrate还会不一样?那当然,你看吃鸡,理论tickrate可能是60左右,但是刚落地的时候服务器人数太多,CPU运算不过来,网络吞吐也压力大,一般只有10几tick,就是90年代网游水平,所以大家落地卡,捡枪难。具体可见文末资料)

CSGO会选取两个数字中的最大值,而我们的目标是把这个延迟设置到最小,因此就用上面的cl_interp 0和cl_interp_ratio 1最好,这样能保证客户端把延迟定在最小的1/cl_updaterate,也就是1/128秒,比默认的0.03125秒也就是1/32秒小了4倍。是最佳设置。

延伸点说,我们可不可以通过把分母cl_updaterate设的更高,来进一步缩小这个延迟?答案是不可以,一是会对你的网络造成负担,连接不稳定,二是高于服务器tickrate本身也没有意义。

还有,之前说了,设置view interpolation delay会让你获得优势,而1.6认为是不正当的。那么现在我们这样投机取巧,会不会也是不正当的?我觉得不是。因为现在的服务器和网络条件今非昔比,现在CSGO追求的不是强制让大家都同一时间看到对方来获得公平性,而是力求能够让大家更准确的看到服务器端的Hitbox人物模型,也就是本地运算的hitbox和服务器端Hitbox偏差尽可能小。我们现在高质量的服务器比如FaceIt和线下比赛的服务器,已经有条件让大家的view interpolation delay尽量设置的更小,来获得更顺畅的游戏体验,不会出现我瞄准头了,但是却没命中的情况。


服务器端与客户端命中点

注意在右下角,sv和var比较高的烂服务器和网络连接会导致:红色蓝色就分别是服务器端子弹命中和客户端显示子弹命中,可见差别就很大了。

这也回答了网友一个问题,

​原因很简单,就是由于某服务器烂,导致服务器运行状况不稳定,从而导致本地弹道与服务器弹道不一致。简单的说,我们知道64tick相对于128tick,连跳跳不起来,跳投扔雷容易出问题。这就是烂服务器实际tickrate到不了128或者不稳定导致的问题。比如你扔雷的时候碰巧服务器掉到90帧了,你扔了个128的雷当然进不去。


这就引出了下篇服务器端的情况,今天大家也看累了,我先挖个坑回头再填上。

下一篇《服务器Netcodes参数原理及质量评判》,会依据服务器端的参数和表现,对我们能接触到的几个平台,包括官匹、5E、B5、FaceIt、完美平台等进行一个对比。告诉你谁是良心服务器,谁是土豆服务器。

补充知识:

1、Valve对于Netcode和view interpolation delay的官方解释,技术向,需要一定的英语基础和理解能力。

Source Multiplayer Networkingdeveloper.valvesoftware.com图标

2、关于Hitbox:CSGO深度教学1——Hitbox、伤害与护甲 - Kryp的文章 - 知乎

Kryp:CSGO深度教学1——Hitbox、伤害与护甲zhuanlan.zhihu.com图标

3、关于tickrate和游戏间tickrate的对比:通过Tickrate告诉你CS:GO为什么是世界上最好FPS电竞游戏 - Kryp的文章 - 知乎

Kryp:通过Tickrate告诉你CS:GO为什么是世界上最好FPS电竞游戏zhuanlan.zhihu.com图标

4、CSGO深度教学2——弹道机制与控枪 - Kryp的文章 - 知乎

Kryp:CSGO深度教学2——弹道机制与控枪zhuanlan.zhihu.com图标

5、wNv在弃赛后的声明:

(声明) wNv就CPL新加坡被取消资格声明(组图)_电子电脑文章池_电子电脑文章池_游戏_腾讯网games.qq.com图标

6、CPL2005新加坡阴谋论:

网易新闻sports.163.com图标

7、第三方关于CPL2005新加坡的说法:

《反恐精英》CPL新加坡wNv事件:聆听第三方的声音_反恐杂谈_太平洋游戏网fight.pcgames.com.cn图标

对深度教学系列其他文章感兴趣的,可以关注我的知乎专栏《电子玩乐》

电子玩乐zhuanlan.zhihu.com图标

欢迎关注我的微博,@CSGO逗比君

发布于 2018-10-23

文章被以下专栏收录

    EDM与电竞相关原创资讯,及时更新请关注微信号“电子玩乐”,号码ElectroFun。联系作者请私信。