csgo费率可以设置为0吗?

本文将教大家如何利用CSGO自带的网络图分析网络连接质量,以及如何根据网络连接质量合理设置游戏中的网络参数,从而获得最佳的命中注册。

想必在你的CS游戏体验中,一定遇到过射击时明明瞄准了敌人,却打不中敌人的情况。大多数情况下,这并不是因为你的枪法不准,而是因为你的电脑和服务器之间的网络连接质量不好,或者你的游戏网络参数设置与实际网络连接质量不符。点击率注册是FPS竞技游戏中最重要的概念,直接决定了FPS游戏的整体满意度。为了理解CSGO如何计算命中决策,我们必须从源引擎的网络通信架构开始。

源引擎的网络通信架构

众所周知,著名的FPS竞技游戏如CS 1.6、使命召唤系列、重返狼穴系列、早期的荣誉勋章系列都采用了雷神之锤3引擎改编的游戏引擎。CSS和CSGO使用的源引擎,虽然是Valve独立开发的,但是使用的网络通信架构和Quake 3引擎一样。

这种FPS游戏引擎采用的网络通信架构是客户端-服务器网络架构。在这个架构中,服务器是指运行在专用服务器上的游戏服务器端程序,客户端是指运行在玩家电脑(PC)上的游戏。当然,你也可以用PC运行游戏服务器端程序,但是由于硬件能力的根本差异,用PC作为服务器载体并不能保证服务器的稳定运行,最明显的表现就是服务器容易丢包和卡顿。

在这种网络架构中,客户端之间不能直接通信,必须通过服务器(在P2P网络架构中,客户端可以直接与客户端通信)。游戏世界的一切都是由服务器决定的。这里的“一切”包括地图的空间大小,游戏中的时间、重力等物理系统,玩家在地图中的位置,玩家的HP值/护甲值,所持武器/弹药的种类和数量,玩家的移动速度和方向,子弹的速度和飞行轨迹等。一切由服务器决定。

服务器端技术

那么,什么是“当家”?比如在你的电脑上,你操作一个游戏角色,让他缩到一个地堡里。如果因为某种原因,你的游戏没有“告诉”服务器端程序这个行为,在服务器世界里,你还是站在角落外面。这就是为什么有时候,在你看来,明明已经退入地堡了,还是被敌人击中。

在上面的例子中,我们可以看到服务器通过接收客户端发送的数据(鼠标、键盘、麦克风的输入)来确定玩家在服务器世界中的地位。实际上,服务器不仅接收数据,还向客户端发送数据。如果服务器根据客户端提交的数据确定你击中了一个敌人,它会将击中确定以数据的形式返回给客户端。这样,客户端收到数据后,会在你的屏幕上渲染敌人被击中的画面,并播放敌人被击中的声音。

滴答声

其实我们把服务器发来的一个数据叫做tick,里面不仅包含了你的状态信息,还包含了服务器里其他所有玩家的状态信息。例如,在一个快照中,玩家A正在向北跑,玩家B刚刚按下了换弹匣按钮,玩家C已经对着一个敌人扣动了扳机。可以看出,服务器眼中的游戏世界并不是连续的,而是由快照组成的,实际上相当于数码相机上的连拍功能,服务器只是以一定的频率对游戏世界进行拍照。用过相机连拍功能的玩家应该有一定的经验。连拍越快,照片会越连贯。动画时画面过渡越平滑。在源引擎中,快照的连拍速度称为tickrate。tickrate越高,服务器看到的世界越连贯,渲染的世界越准确。

那么,这是为什么呢?在解释这个问题之前,我们需要了解客户端是如何工作的。

客户端技术

帧速率

帧率,也称为FPS(每秒帧数),表示客户端显卡每秒渲染到屏幕上的图片数量。

插值和外推。

CSGO服务器的默认tickrate是64,即服务器每秒捕获64个快照。所以,如果我们使用128的帧率,即电脑屏幕每秒渲染128张图片,那么剩下的64张图片是如何渲染的呢?显然,客户端不会将每个快照渲染两次,因为如果这样,你的游戏就会变成幻灯片。实际上,客户端会根据前两个快照的内容估算出1个快照并插入到原来的两个快照中(这叫做插值帧),一起渲染在显示器上。这样就可以看到游戏中运动物体(主要是游戏角色)的连续运动画面。

插值可分为内插法和外推法。插值是指客户端根据两个连续快照的内容来估计两个快照之间发生了什么。这种框架系统在实践中被证明是非常有效的,因为我们有理由相信,如果一个游戏者在两个连续的快照中向北移动,那么他在这两个快照之间的移动也一定是线性向北的。

内插法是根据已有数据进行估算,而外推是在已有数据缺失的情况下(比如服务器包的发送速度跟不上客户端的接收速度或者网络丢包)凭空猜测,所以精度比内插法低很多。如果服务器和网络状况良好,在游戏中应该只看到内插,看不到外插。

这个插帧系统对于普通网游来说完全够用。但是对于争分夺秒的竞技型FPS玩家来说,这个系统已经暴露了它的不足。

在tickrate为64的服务器中,服务器每秒捕获游戏世界的64个快照,两个快照之间的时间间隔为1/64 = 15.625毫秒。15.625ms对于一个职业FPS玩家来说,可以有天壤之别。如果一个敌人在你收到最后一张快照后的15.625毫秒内闪现出地堡,而你的客户端根据前两张快照推断出敌人还在地堡里,敌人在你的屏幕上不会移出地堡,但实际上,敌人可能在这十毫秒内把你的脑袋轰掉。在你看来,敌人可能只是露个胳膊,废了你。

另一方面,如果一个敌人在你收到最后一张快照后的15.625ms内突然变线(比如突然由奔跑变为静止),而你的客户端根据前两张快照推断出敌人仍在做直线运动,那么即使你瞄准了敌人的头部,你也会发现你的子弹并没有穿透他的头盔,因为在服务器眼里,你只是瞄准了敌人头盔的前点。

为了减少这种情况,CSGO的游戏服务器都使用128的tickrate。此时服务器每秒捕捉128个快照,两个快照之间的间隔只有7.8125毫秒,可以快速捕捉游戏世界的变化并发送给客户端。但是这种设置的副作用是服务器的计算负担也会加倍。

由此可以得出结论,如果你使用FPS在tickrate为128的服务器中玩游戏,并且服务器的运行状态和你与服务器之间的网络状态良好,此时客户端不会插入任何帧,你在屏幕上看到的游戏世界和服务器眼中的游戏世界是一模一样的。这就是中国电竞CSGO选手标准配置中设置网络参数的由来。

当然,这里的前提是服务器和客户端的带宽速率都能够满足发送和接收这么大数据量的需求。

费率设置

在CSGO,客户端的速率设置可以通过以下三个参数来设置:

cl_cmdrate

cl _更新率

速度

注:虽然这三个参数与CS 1.6中的参数相同。然而,在CSGO,这三个参数的设置受到服务器的限制。

Cl_cmdrate控制每秒发送到服务器的数据包数量。应该指出的是:

首先,这个参数的值不受服务器tickrate的限制。也就是说,在tickrate小于128(比如64)的服务器中,每秒钟也可以向服务器发送128个包,但是64个包不包含快照信息。另一方面,如果服务器的tickrate是128,而您的cmdrate设置为64,那么您的每个数据包将包含2个快照,从而增加了数据包的大小。

其次,这个参数的实际值取决于客户端的FPS。如果客户端的FPS只有100,那么即使你将这个参数设置为128,客户端实际上每秒上传的数据包也只有100。

cmdrate的设置一般不影响玩家的命中判断,主要取决于参数updaterate和rate,直接控制客户端插入的帧数。

Cl_updaterate控制服务器每秒接收的数据包数量。该参数的理想设置是服务器的tickrate。因为如果服务器每秒只抓取64个快照,那么即使你接收128次,仍然只有64个快照,那么在这种情况下,你的下载带宽就浪费了。

此外,该参数与cl_interp和CL _ cl_interp_ratio*** *一起控制插值算法。CS 1.6及之前版本中cl_interp对应的参数是ex_interp。Johnny R在那些年非法使用了这个参数,很长一段时间都是CS里的热门话题。但是在源引擎中,这个参数不再有神奇的作用。该参数的最佳设置为0,即根据客户端的更新率自动设置插值值。Cl_interp_ratio用于控制插值算法对损失的容差。源引擎默认的插值算法允许1个损失,即cl_interp_ratio=1。

Rate控制服务器向客户端发送数据包所使用的最大网络带宽(以字节为单位)。在tickrate为64的服务器中,我们建议将其设置为80000,在tickrate为128的服务器中,我们建议将其设置为128000。

网络图

不过这里描述的情况只是一种理想状态,并不是每个玩家每天都会遇到的。首先,你的客户端和不同服务器之间的网络连接质量差别很大。其次,不是每一个运行在服务器上的硬件设备都能处理这么大的数据量,即使是使用128 tickrate。所以在选择服务器的时候,不仅要看服务器设置,还要审查服务器的硬件规格,服务器的网络连接质量,服务器是否过载(很多服务器出租方为了利润最大化,假设一台服务器上有20台服务器,只能设置10台服务器。当这20台服务器满了,即使服务器硬件配置再漂亮,你也会发现服务器里有很多的噎废食。

那么,有没有一种有效的方法可以一下子判断出服务器的好坏呢?答案是肯定的。源码引擎为我们提供了一个非常有效的网络分析工具——网图。有了这个工具,我们不仅可以轻松判断服务器和客户端之间的网络通信质量,还可以将网络参数调整到最适合当前服务器网络的状态。

加入服务器后,我们可以在控制台输入net_graph 1,回车打开网络图。网络图的默认显示位置在屏幕右下角,挡住了屏幕右下角的HUD图标,所以可以使用net_graphpos 2命令将其移动到屏幕正下方。