呵呵 小刀啊 鼓捣了半天还是不行
大鸵鸟 顶晕去B又改名字了 咋看不见你玩? 鸟人。。。。。。 又仔细研究了一下大师的帖子,第一个是fps到100,下面几个就不明白了,谁给解释一下~~~~~~~~~~~~ 又仔细研究了一下大师的帖子,第一个是fps到100,下面几个就不明白了,谁给解释一下~~~~~~~~~~~~
BABY.Q 发表于 2010-5-12 08:13 https://www.slit.cn/images/common/back.gif
哥给你丫简单解释一下。。。。。
cl_cmdrate "101"
cl_updaterate "101"
是与服务器同步数据的网络参数,根据网络速度不同来设置数值,这两个数值越大,cs越流畅,俗称不卡哈哈,缺点是数值越大弹道越散,很难控制,比较逼真,CPL标准设定就是101,适用于LAN game,局网速度基本和LAN一样,可以这么设定,大网就不行了,需要设置在30-60之间,菜鸟们也不用改了,改完了站着不动打定点都打不准,需要长时间练习,高手适用。。。。。。。
rate "25000.000000"
这也是适用于LAN的设定,同样也是为了cs的流畅度,在不清楚服务器端sv_maxrate数值的情况下只好按照最大值设定,那就是25000.。。。。。。。
以上3个参数the CPL、ESWC还有WCG均允许设置,不属于违规参数,而且都与服务器端的设置有关系,设置成最大数值也未必有好处,在服务器端有限制的情况下会产生choke,那就要用到下面两个参数了。。。
net_graph "3"
net_graphpos "2"
这两个参数是用来查看自己cs客户端的网络状态的,有没有choke啊有没有loss啊fps是多少啊上传下载速度啦什么的,第一个是显示方式,第二个是显示位置,这两个数值纯属哥的个人喜好,各位可以在1-3内随意调。。。。。。。。 小迷糊够笨的,在目标里最后打上空格——console 例:(cstrike.exe -console)! 感谢大师教诲,不过看了一下,似乎目的只有一个,那就是为了让CS运行更流畅,这个需要尝试一下,难道差别真的很大么? 看了下偶的config中相应的几个参数,如下:
fps_max "150"
cl_cmdrate "20"
cl_updaterate "30"
rate "9999.000000"
net_graph "3"
net_graphpos "3" 感谢大师教诲,不过看了一下,似乎目的只有一个,那就是为了让CS运行更流畅,这个需要尝试一下,难道差别真 ...
BABY.Q 发表于 2010-5-13 08:15 https://www.slit.cn/images/common/back.gif
当然不是很大。。不过这几个数值改大了以后弹着点确实散了,流畅与否没感觉,因为只要服务器没问题就从没卡过哈哈哈哈。。。。。。。。 本帖最后由 ███████ 于 2010-5-13 21:01 编辑
看了下偶的config中相应的几个参数,如下:
fps_max "150"
cl_cmdrate "20"
cl_updaterate "30"
rate ...
BABY.Q 发表于 2010-5-13 14:40 https://www.slit.cn/images/common/back.gif
cl_两个参数值小了,256K以下的带宽才使用这么小的值,还有一个比较重要的参数:ex_interp局网应设置在0.05-0.1之间。。。。。。。。 在config里没找到ex_interp这个参数,难道是在控制台里输入?:em62: 本帖最后由 BABY.Q 于 2010-5-14 12:13 编辑
另外,从网上搜了一下ex_interp这个参数,发现很有玄机哦,MS跟cl_updaterate 这个参数有密切关系啊~~~
借大师的帖子,发两篇有关这两个参数的文章,感兴趣的TX研究一下呗~~~~~~~~~:em08: 第一篇:ex_interp参数中文最详解释
编者按:很久以来,有关ex_interp的争论就不断,目前国人的对其的认识,我想大多数都是这么认为的:Value已经修正了有关ex_interp的BUG,ex_interp 0.1 和0.01都是合法的,并不会造成不公平现象,而且相比之下ex_interp = 0.01更占便宜。所有这些认识,我想应该都是源于OGC在《向CPL新加坡致敬》中引用的关于ex_interp的解释,那篇解释之前已经被包括我在内的无数人看过,也在心中植下了根深蒂固的印象,OGC还在寻找原作者署名吧?不要找了,原作者是个外国人,如果真有人来了那一定是假冒的……
其实,在那篇文章里,对于ex_interp的解释是基本正确的,呵呵。
最后,作者额外的解释了两句:
另外一点,如果你想你的cs更象“街头混战”一样的话,用另外的话说平滑而无顿挫感,那么我建议你将ex_interp设定为0.1。
不过如果你想你增加你的准确度的话(子弹打在你所实际瞄准的位置),那么就把ex_interp设定到最低值。
这么一句话,让每个人都以为ex_interp 为0.01占到了便宜。没错,应该是这样,服务器通过插值运算出来的人物运动只是模拟而已,也就是说,如果你的枪刚好在模拟运算欺骗了你的眼睛的同时开火的话,子弹是注定打不到你想打的人的。
不过请看Gotfrag上John Mellin写的文章《Cs 1.6 NetCode Explained》(付费内容)
ex_interp:Set this variable to 0 and nothing else. Counter-Strike will automatically set your ex_interp to 1/cl_updaterate (i.e. your console will say: ex_interp forced up to xx msec?. This is because the time in between each packet is exactly 1/(the # of updates per second), so this is how long you want your client to interpolate. Adjusting your cl_updaterate will automatically adjust your ex_interp (when ex_interp is set to 0). I recommend only changing your cl_updaterate, and letting Counter-Strike set your ex_interp. You cannot set this command lower than 1/cl_updaterate anymore, and setting it higher is an exploit. Using a value above 1/cl_updaterate forces you to shoot behind the actual model displayed on your screen, which should be considered an exploit. For example, if you use cl_updaterate 101, the correct value for ex_interp would be 1/101 = 0.009 (9 milliseconds), but by using the default value of ex_interp 0.1 with this high cl_updaterate, the aforementioned exploit appears.
Recommendation:
ex_interp 0.
这么一段话的意思是:
ex_interp:
把这个值设成0,CS会自动把你的“ex_interp”设成“1/cl_updaterate”(控制台会告诉你“ex_interp”被强制设成XX毫秒。原文“ex_interp forced up to xx msec”)。这是因为两个数据包之间的时间间隔就正好是1/(每秒更新次数),这就是你需要客户端做出插值预算的时间长度。调整“cl_updaterate”会自动调整“ex_interp”(当“ex_interp”设成0的时候)。我建议你只修改“cl_updaterate”,而让你的CS来自动修改“ex_interp”。你现在不能把“ex_interp”设置的低于“1/cl_updaterate”,而把它设高则导致了你射击对手的时候不得不瞄准出现在屏幕上的人的后面,这种行为通常被认为是exploit。比如,如果你的“cl_updaterate”是101,你“ex_interp”的正确值就是“1/101=0.009”(9毫秒)。而使用默认值0.1就形成了前面所说的exploit。注意到这里有段:而把它设高则导致了你射击对手的时候不得不瞄准出现在你屏幕上的人的后面。
这段话看起来是不是很别扭?字面上看还是设高了吃亏嘛,呵呵,别着急,这是这个外国人没解释好,一会我会给出中国人能看懂的解释。现在肯定有人想问,什么是exploit?我是搞计算机的,一般在网络攻击中,exploit是代表“溢出”,“漏洞”的意思。
再看cpl的相关规则:Any competitor or team accidentally utilizing ANY exploit or bug in a map or game will forfeit that round and all remaining rounds for the half. Players need to be responsible for their actions in regards to know map or game bugs/exploits.
大概意思是:
任何人利用任何BUG或exploit在一副地图或者一场比赛中将被判当局以及该半场内之后所有之局为负,选手们有责任了解在地图和游戏中什么样的行为可能导致BUG和exploit的产生。
所以,如果我们把BUG翻译为错误的话,那么可以把exploit看做是漏洞。但是,在这篇文章里,还是没有详细的解释清楚,为什么ex_interp 设置高了会是一个exploit?而Using a value above 1/cl_updaterate forces you to shoot behind the actual model displayed on your screen这句话真是只有鬼才看的明白。要怪就怪Value,从来没有官方声明能把这些参数完全解释清楚,是否那些做程序的人自己都不玩CS呢?这虽然可能有人知道,但至少你不知道,我不知道,我们中国人也都不知道。即便是在国外,大多数的人的相关认识也是通过以上2篇文章以及由这2篇文章衍生出的其他一些文章建立起来的。但是所有的文章,都没有给出一个可以让人看懂的解释,看完所有这些文章以后,我们的疑问反而越来越多,究竟ex_interp的修改对游戏的效果有没有影响,为什么有人会说,ex_interp 高是'Indeed Cheating'?
那么现在我来对ex_interp做个更详细的解释,似乎好像应该仿佛国内外还没有我这么对ex_interp解释完全的文章,希望看了这篇文章之后,你对ex_interp的认识会超过70%以上的老外,也许他们明白怎样修改ex_interp会导致犯规,但是也未必清楚真正导致犯规的原因。
其实所有的分析都基于以下几个已经确定的内容(请注意,这里只讨论1.6,1.5由于存在bug,无法用以下说法解释)。
已知:
1. ex_interp设置为0即为一个开关,作用是ex_interp开始根据你的cl_updaterate数值进行全自动调校,我们可以认为,此时的ex_interp实际值即为value的推荐值,也是理论上最适合的值。
2.cl_updaterate 的概念为每秒从服务器接受的数据包数量。这个数值能否正常发挥其作用,取决于2个方面,一个是服务器的FPS是否大于你的cl_updaterate数值,一个是服务器端是否设置了sv_maxupdaterate 大于或等于你的cl_updaterate数值。
3.ex_interp的实际数值决定了插值运算的强度,ex_interp越小,在你看到一个人的完整运动轨迹之中,由插值运算所产生的比例越小。
4.ex_interp的数值(0.1,0.01等)实际上可加上一个单位s,其实0.1就代表0.1秒。
我们来对比一下两种情况下cl_updaterate和ex_interp的关系。
当cl_updaterate 为100时 ,ex_Interp最佳值为0.01 即0.01s=10ms
当cl_updaterate 为10时, ex_interp最佳值为0.1即0.1s=100ms
我们可以注意到,第一种情况,100X10=1000ms,第二种情况10X100=1000ms。
而1000ms=1秒。你可以试一下别的数值,最后的乘积一定也是1000ms。
注意到cl_updaterate为每秒从服务器接受的数据包数量。
所以我们可以这么解释,当客户端每接收到一个数据包之后,可以确定一次你的对手的真实位置。自你接收到第一个数据包开始xxms之内,你看到的对手运动轨迹为插值计算所得,这个xx=ex_interp的数值。举例说明,当clupdaterate 为100时,每隔1/100=10ms你接收到一个数据包,所以ex_interp 设置为10ms为最合适的数值;因为刚好10ms之后你又能收到第二个数据包,从而完美的实现衔接过程。同理cl_updaterate为10时,ex_interp=0.1就是最佳的数值。
现在我们来用目前争议最大的wNv和Fnatic的战斗过程来举例:
Fnatic 的设置:
cl_updaterate=100,ex_interp=0.01=10ms
wNv(或者说wNv-Kin'z)的设置:
cl_updaterate =100,ex_interp=0.1=100ms
两者都是每秒接收到100个数据包,但由于wNv的ex_interp设置为100ms,所以当kin'z接收到第一个数据包后,客户端根据插值运算虚拟计算出了100ms内对手的可能行为。
而此时Fnatic队员的cs客户端只虚拟计算出了10ms内对手的可能行为。
现在有人会想当然的认为,这样wNv队员不是'提前'90ms预知对手的行为了?实际上这也是John Mellin和被其影响的相当多数外国人的想法。然而我要说这种想法是错误和主观的。首先,客户端虽然“预知”了对手未来的行为,但是操作客户端的玩家却无从知晓,客户端要想反应出敌人未来100ms的情况,同样需要花100ms的时间。其次,上面所说的情况其实根本不会产生。
我们注意到此时双方的cl_updaterate 都为100。这意味着,在接收到第一个数据包之后10ms,客户端将接受到第二个数据包。对fantic这一方而言,第二个数据包处于刚好衔接上的状态。对wNv这一方而言,虽然在第一个数据包到达之后,客户端虚拟出了未来100ms内对手的行为。但是10ms后,第二个真实反映对手位置的数据包到达了。
我们可以想象出此时程序的2种处理方式,如下:
第一,忽略多出的90ms虚拟计算数据,采用到达的真实数据。
第二,忽略第二个数据包的内容,继续采用虚拟的计算数据,直到第10个数据包到来。
第二种情况是不科学的,也不可能是value实际采用的,因为如果按第二种情况处理的话,其实cl_updaterate 10和cl_updaterate 100在ex_interp为0.1的情况下没有任何区别。你可以去一个服务器里把cl_updaterate 改成10 ,试下你的感觉……
那么我们可以认为程序是按第一种模式运行的。
于是我可以提出我的结论:
在cs1.6中,当cl_updaterate数值足够且网络状况良好的情况下,ex_interp为0.1或ex_interp为“1/cl_updaterate数值”这2种设置并没有实际区别。采用其中任何一种设置均获得近似相等的效果,并不存在所谓的不公平性因素。
那有人要问,为什么value把最佳值设为'1/cl_updaterate数值'而不统一设定为0.1?
我想,那是一个最优数值,使用这个数值,可以避免cpu时间被无谓的浪费要知道cpu计算数据量的不同耗费的时间也不同,在这里也存在一个'延迟',而且可能还会略微的影响FPS。所以我在结论中用了一个'近似相等'。至于影响的大小是可以完全忽略不计还是可以微微感觉的到,这就不在本文研究的范围之内了。在平时进网络服务器打比赛或混战的时候,使用ex_interp 0.01等参数可能会导致人物一跳一跳,这是由于互连网络连接状况不稳定, 如果产生了lost(丢包),choke(阻塞),那么使用ex_interp 0.01等参数就有可能出现插值运算结束后不能衔接上下一个数据包,这样反映出来的效果就是人物会跳动。
最终我依然推荐平时将你的ex_interp设置为0,而cl_updaterate设置为60-100,比赛时设置为ex_Interp 0.01,cl_updaterate设置为100。
另外,有人抱怨在国内的大多数服务器中无法修改ex_interp,这里呼唤一下所有粗心的服务器架设者们,请到服务器安装目录下的cstrike\addons\wwcl子目录下修改下wwcl的配置文件。具体过程:首先查看wwclconfig.cfg确定你现在用的wwcl模式。注意前面没有//注释的就是目前你采用的wwcl模式,然后修改该模式对应的config文件,以ex_interp做关键字查找到锁定ex_interp的那一行将其删除,并把brightness参数由原先锁定的1修改为3。
而对于玩家而言,也不必过于担心此事,如果你能习惯ex_interp=0.1,那么你就能习惯ex_interp=0.01 。
关于ex_interp,我想以上已经解释的足够清楚了。
:em22: 第二篇:关于弹道与ex_interp的关系
我经过查找资料及亲身验证,可以很肯定的说,平常大家所说的弹道很漂,画面很卡的原因绝对与ex_interp有直接关系(当然前提是fps能稳定在100),究竟最理想的弹道是怎样的呢,你可以在局域网自己建主进去感受一下就知道了,那就是最理想的的状态。可是平时我们一般都是登录服务器进行游戏的,所以弹道是否理想,决定于服务器的设置及质量,同时需要客户端正确的网络参数配合才能在到最优化。像在局域网中服务器是经过加速并且是以sv_maxupdaterate 100来架设的,客户端是以rate 25000,cl_updaterate 100,cl_cmdrate 100,ex_interp 0.01来设置的情况下,也可以达到最理想状态。可是在互联网上的服务器,绝大多数无法达到最理想状态,所以我们必须通过一定的途径找出客户端的最佳设置以达到所能达到的最优状态。
那究竟ex_interp有什么作用,大家可以自己搜索一下,不过大多数应该都知道的是这个值设置高随机性会高一些,设得低会更准确一些,但是如果服务器无法满足我的设置,客户端这边人物的动作就会闪烁,不流畅。据我自己的感受,这个值设得太高,我以前设置为0.1(因为不习惯0.01时人物的闪烁),会明显感受到滞后感,就是已经按键了,但感觉子弹不是马上打出去的,而且准心恢复也慢了一点,而究竟是什么原因,我也弄不明白,当然这不是今天的重点,今天的重点是找出最合适的ex_interp值。在网上有人说过会根据网络带宽,或是根据PING值来设置,其实那是完完全全错误的,因为CS的下传速度仅仅10KB以内,上传也就6KB以内,所以以现在大家的宽带来讲绝对是可以完全应付的,不会因为把参数设得高了点就会造成ping值飙升的,除非是线路有问题或是上网高峰造成的拥挤。对于ex_interp这个值理论应该是越小越好的(最小0.01),可是我前而说过了,如果服务器的updaterate无法满足客户端ex_interp,虽然弹道状态可以达到最优,可是客户端敌人的移动动作不连贯,多多少少会影响射击,所以如果不在意的话,你可以在任何情况下都使用0.01这个值。我在网上看到很多人会使用类似0.05或是0.075等值(迪酷版的CS里的H菜单是这么设置的),这些值都偏大了,至以原因,一会儿就会知道。好了,现在我们进入重点吧,应该如何设置才能把所有的一切调到最佳值。
1。在控制台里输入“net_gragh 3”,调出网络状况信息;
2。在控制台里输入“rate 25000"或是"rate 20000",其实两个没什么差别,因为CS最大的下载流量也不过10000左右,上传6000左右,所以对于cl_rate 这个参数我这里也没要求大家改,因为默认的cl_rate 是9999,完全够用了。
3.在控制台里输入“cl_updaterate 100”和“cl_cmdrate 100",其实100和101效果是一样的,因为在半条命引擎里的帧上限就是100,设高于100的都自动换成100;
4,输入”ex_interp 0",ex_interp为0的意思是让程序根据cl_updaterate 来计算出最匹配的ex_interp值,其换算公式为:ex_interp=1/cl_updaterate,这也是为什么我上面设置cl_updaterate使用100的原因,如果用101算出的interp值是1/101=0.009,而不是0.01;
5,这步是最关键的地方,这个时候我们进入服务器,查看屏幕下方的net_gragh信息的最后一行,即是loss=? choke=?的那一行,如果loss不等于0,那代表着你的上传达不到cl_cmdrate设置的速率,因为决定cl_cmdrate设置的是服务器与客户机FPS较低的的一方,现在大部分机器fps稳定在100应该没有问题,而服务器方面,我想现在的服务器都应该是经过加速的,一定是会大于100fps的,所以按理说cl_cmdrate 设为100应该是没有问题的,除非是你的网络无法稳定的提供6k的上传速率,或是服务器网络忙无法接收由你发出的6k数据,如果真是这样的话,试着降低cl_cmdrate直至loss为0,不过我是没有碰到过这种情况,我这边无论进任何服把cl_cmdrate设成100都没问题。所以网上的服务器大多数的情况是无法达到updaterate 100 的要求,而且有绝大部分服务器并没有专门调过sv_maxupdaterate 这个参数,也就是说其使用了默认的30这个值,即使有的服务器有调成100,但由于服务器端硬件或网络的关系,并不能保证在任何时段都能达到最大值。其实以我的感觉,服务器能稳定在默认的30,我已经觉得弹道很舒服了。所以你可能已经可在猜到了网络设置的关键就在这里了,就是如何判断一个服务器在某一时刻的updaterate稳定值,在服务器端网络状况良好的情况下,这个值应该就是服务器的sv_maxupdaterate一致,当然我们都不必去关心这些,刚才提到出现loss,我们就调cl_cmdrate,如果现在现在出现choke,即choke值不为0,就说明了我们设置的cl_updaterate 100高于服务器所能提供的,当然有的时候也可能是客户端的网络出现问题,我前面也说过了cs最高的下行流量也不过10K,所以是客户端这有的原因的可能性比较低,但不管怎样,这都说明了你不能从服务器得到每秒100次的数据更新,这时你应该试着降低cl_updaterate的值,每次试着将数字减少10,直至choke为0,当然,并不是要求其绝对为零,只要大部分时间内其为0就是正确的,因为服务器的updaterate有时是不太稳定的,偶尔会突然很低,所以choke偶尔的不为0并不代表着updaterate达不到那个值,只要choke大部分时间内为0,就代表着此刻服务器的updaterate就是cl_updaterate所设置的值。其实这里还可以有另一种调法,只要我们设置的ex_interp值不大于"1/服务器updaterate",弹道都是此刻此服务器所能达到的最优状态,之所以要把interp调到最合适的数值,无非是在保证弹道的情况下,尽可能的让人物的移动更平滑,所以我们可以不关心choke值,往下调低cl_updaterate的值,ex_interp在设为0的情况下,其值会随着cl_updaterate的改变而根据“1/cl_updaterate"这个公式由系统自动调整(注意,如果cl_updaterate是由小至大设置,ex_interp不会自动调整,你必须在每次更改updaterate时,再输入ex_interp 0来让系统对它进行更正),当每次interp变大时,你会发现人物的移动的闪烁感越来越不明显了,只要达到一个你可以接受,让你觉得人物移动已经很平滑,不会影响到你的射击时,你就可以不用再往下调了。
6.输入“ex_interp 0”,此刻系统就会把ex_interp的值设为1/cl_updaterate,也就是针对此服务器此时刻的最佳设置,也就是此时即能让弹道达到应有的最优状态,又能保证客户端画面平滑。我前面说过,大部分服务器都可以稳定在30的updaterate,如果按照30来计算的话,ex_interp=1/30=0.033,也就是说,对于绝大多数服务器来讲,ex_interp的最佳值是在0.01至0.033这个范围内,所以我前面说过的0.05或0.075这些值都明显偏大的原因,而对于默认的0.1更是大得离谱,也许对于一般玩家来说,可能感觉不出其中的差别,但对于有一定水平的玩家来说,其差别真的是非常大的。
好了,现在给大家一个参考设置
线下专业的比赛(指的是经过专业搭设的局域网服务器)可以使用下面的参数:
rate 25000
cl_updaterate 101
cl_cmdrate 101
ex_interp 0.01
线上对战,如果是比赛服,应该sv_maxupdaterate 100,只是可能无法达到最高值,可以这样设置:
rate 25000
先cl_updaterate 100 然后以10为单位往下调找出最佳值
cl_cmdrate 101 (没有loss就不用调低了)
ex_interp 0
线上混战,基本上混战服的sv_maxupdaterate都使用默认的30,即使有调过,但是由于混战服人数太多,基本上服务器端很保证较高的updaterate,所以基本上能达到的上限也不会比30高多少,所以一劳永逸的做法是,所有的混战服你可以认为其updaterate就是30,那么可以这么设置:
rate 25000
cl_updaterate 30
cl_cmdrate 101
ex_interp 0 or 0.033
另外,一般在网吧几个朋友一起娱乐,从游戏里创建房间(浩方平台也属于此类)的,只要没有特意去调sv_maxupdaterate这个参数的,也可以用这个设置。如果你是个追求极致的人,即使是打混战的时候只要不怕麻烦可以采用第二种设置,像我这边就在一个同城网吧服务器,大多数时间updaterate可以达到80,那个弹道真的好的没话说,而且可以很肯定的说,cs1.6已经对事件判定机制做了一定的优化,只要弹道不错,ping值不同的人之间的优劣势已经不太明显了。
哈哈,当然还有最省心的设置,就是不管任何情况,都使用线下比赛的设置,或许人物的动作在眼中不平滑,但在心中却是平滑的,不过这不是本文所追求的。
好了,我说完了,你可以按照我的方法,看看效果怎样,希望对你们有所帮助。
进行一些补充
我再次分析一下,为什么ex_interp不同会造成弹道的不同。
因为我们知道CS运行的机制是不停地收集玩家的事件信息(比如位置信息,开枪信息等)然后进行比较确认后再将确认结果发给客户端,例如,服务器会根据某人的位置及射击角度,以及对方的位置等信息进行比较来确认此人是否击中对方,所以一切在客户端的显示的信息都必须被服务器确认才算数,或许大家有这个经验,在PING不好的情况下与人对狙,明明已经显示击中对方,对方已出现掉血的画面,可是死的却是自己,而查看对方血量还是100,这就是说你击中对方这个事件虽然在客户端处出现,但是到在服务器端时,服务器端的记录是对方已经先击中了你,所以击中对方的这个事件被判无效,服务器会重置你这边的状态,这也是为什么在PING不好的情况下,经常会发生在移动中与敌人对枪时,会无缘无故的弹回先前的某个位置,这因为经过服务器的确认,其实你在那个位置上已被击中,服务器把你的状态重置回去了而已。
好了,现在我们大概知道服务器的运作方式,那我们看一下不同的ex_interp,到底对我们都有什么影响。为了把问题简化,先假设服务器到客户端以及机器处理数据的延迟都是0,即无延迟。
第一种情况,服务器稳定在最佳100 updaterate,有两台客户端,fps,cl_updaterate和cl_cmdrate都是100,不同的是一台ex_interp是0.1,另一台是0.01。对于0.1这台可以从服务器端每秒收到100次数据包(平均10ms一次),但是每次收到的数据包的信息不会在下一帧显示出来,因为ex_interp 0.1决定了它必须等到0.1秒(100ms)后才显示出来,例如,它在0ms时收到第一个数据包,可是这个数据包所包含的信息不会在第一时间(收到数据包的10ms后)在客户端显示出来,而是等100ms(0.1秒)后,即相当于收到第11个数据包的同时,才在客户端处显示出来,而对于0.01这台客户端,当它收到一个数据包时,会在0.01秒(10ms)后显示出来(10ms是CS反应的最快时间,因为cs的fps最大为100,即最快每10ms更新一帧画面),所以现在假设两客户端都在50ms的时候开了一枪,在60ms时两客户端都把这个信息发到的服务器端,服务器会在第一时间,即70ms的时候将确认信息发回两客户端,而两客户端的分歧就在这里体现了,0.1这台客户端虽然与0.01客户端同时在70ms时收到服务器发回的确认信息,可是它必须在170ms的时候才在客户端显示出来,而0.01这台客户端却是在80ms的时候,就显示刚才数据包里的信息,所以说0.1客户端总是会比0.01客户端慢90ms,虽然这在服务器判定时不会有差别,因为服务器在判定开枪命中时,会把客户端的ex_interp值考虑在内的,但在客户端上会有很大的差别,你会发现0.1会令你所有的动作都变慢了,例如开枪变慢了,准心恢复变慢,尤其在ak快速单点时,或是压枪扫射时对于弹道的控制,都无法实现自己建主与POT练枪时的那种感觉了,而0.01这台确是正常的。刚才我说过了0.1与0.01在服务器上的判定是一致的,只在在客户端的表现不同而已,虽然这里的具体运作机制究竟如何没办法弄明白,我的猜测是,可能客户端ex_interp的不同,会造成服务器端判定的不一致性的增大,从而增加了重置客户端数据的次数,所以各种专业langame会强制所有玩家的ex_interp为0.01,因为局域网服务器可以满足这一设置。
那么我们来看第二种情况,这种情况中,除了服务器的updaterate是50外,其它的假设都和第一种情况一致。这种情况下,两客户端在0.1秒内从服务器收到的数据都是5,由于0.1这台是在0.1秒后才在客户端进行显示,所以此时,它已经具有5个数据点,客户端会通过这5个人物的位置信息模拟出10个位置信息(为了满足10帧的画面),所以在0.1这台机器显示的人物移动轨迹是平滑的,但与服务器里的轨迹不是100%一致的,但应该是非常接近的。而在0.01这台客户端,它在0ms时收到一个数据包,在10ms后客户端显示出来,而在10ms时,却收不到服务器的数据包,所以在20ms时,客户端这边是无法显示人物位置信息的,所以这个时候我们使用0.01时,客户端里的画面是不平滑的。然后我们再看两台机器的动作延时,0.1这台是100至110ms秒,而0.01这台是10至20ms,所以不管你怎么设,你都无法达到10ms的延时。现在假如有第3台客户端,其ex_interp为0.02,那其动作延时也是10至20ms,即弹道还是可以达到最优的,同时每20ms内的一帧缺失的人物动作客户端也会模拟出来,所以此时不但保证了弹道,而且确保了人物动作的平滑,为ex_interp的最优设置。
所以结论是,弹道的好坏决定于服务器updaterate的状态,而客户端ex_interp设置的正确与否,决定了是否能最好的弹道设置出来,而且保证画面的流畅度,所以,如果只使用默认的0.1这个值是极不推荐的,但如果一成不变的任何情况下都使用最高设置即最低值0.01,对于弹道来讲是有好处的,但是要想弹道与画面流畅都达到最优状态,应该使用最优值。也就是可以通过我上面所讲的方法进行。 发这两篇文章,是为了让TX们了解一下有关的参数,偶自己也学习一下,不知道这跟平时某些TX所说的那些BT脚本有没有关系,因为偶不会用也从来不用,欢迎大家发表一下意见哦~~~~~~~~~~~~:em15: 哈哈哈!!!!!!!!! 哈哈,今天算是跟参数干上了,又发现一篇烙铁,贴在这里,原来N年前就有人研究这个了啊~~~~~~~~~~~~~~~~~:em13:
解释cs网络参数ex_interp
CS在进行绘图的时候,是一幅一幅画绘成的,但是如果你在网络游戏的时候,再宽的带宽也不允许你将每一个位置的数据进行传送。 因此CS使用了另一种绘图办法:在你得到敌人位置数据的时候,它不会仅仅在次位置绘制敌人的图像,他会继续平滑的在敌人行进路线上绘制敌人平滑走动的图像,直到它接收到网络传来的下一个敌人的位置(两次间隔100ms即0.1秒),再以此位置进行下一次绘图。问题出现了,这 种办法,你会发现平滑图像上敌人走在了他实际位置的前面一点,其实这个距离很小只有100ms走过的那点距离。CS使用了补偿技术,就是故意给你延时100ms以便找回平衡。ex_interp这个参数就起这个作用,他故意让画面有100ms延时,以使画面更加准确反映敌人的真实位置。
问题在于画面的延时不仅仅取决于这个参数,网络的快慢,你硬件的性能都会最终影响在你屏幕上绘出敌人的位置和真正hitbox位置 的延时。很多人将ex_interp从0.1改为 0.075 或者 0.05 我们看会产生什么后果。后果就是他们看见了"未来的世界",这也是这个参数造成的 不公平的地方,也是为什么大家称这个参数为神奇参数的原因。问题不是这么简单,再看下面的情况。
如果一个人150 ping另一个人10 ping在同一个服务器打,理论上说当两人同时照面时,10 ping的人会提前140ms发现对方,如果低 ping的人立刻做出反应进行射击,150 ping的人身上已经挨了好多枪才看见对方,150 ping的人如果改动了ex_interp为0或者接近0的数,那么 他实际的补偿延时就减少了100ms,实际上他可以看见50 ping的人应该看见的图像,这样高ping的人就不是很吃亏了,尽管仍然不如10 ping的 人。所以保留这个参数是可能程序员考虑到这种情况,这样可以灵活调整,使ping对游戏者的影响不是那么大。但是CS并没有这种聪明的办法自动给不同ping的人调整这个参数,无论如何这个参数还是保留了,不管是公开还是非公开的。
再考虑如下情况,两个人ping都很低,10 ping左右,那么如果有一个人把自己的ex_interp 调整为50 那么它会看到未来40 ms的景象,调整为0就会看到未来90ms的景象。这种情况下,进行这个参数的改动就会造成不公平。因为他可以比对方先看到对方的位置,然而这个位置 要比实际的hitbox的位置还要早,因此如果此时你想打中对方不能往你看到的目标上打,你要打提后量,就是对方刚才所处的位置。(这种情况与高ping打提前量恰恰相反)有些人觉得这样并不便宜,因为你不能往你看到的图像上瞄准,你要打提后量,这样反而影响了射击。不错, 如果你不适应,你当然觉得这样更糟糕,那样你可以不修改为0改为0.075 0.05也可以使你受益不少,如果设置的正好可以抵消你ping值或其他因素的延时,你会发现这确实是一个神奇的参数,因为你画面的显示和hitbox的位置完全重合了。如果某些人长期在低ex_interp下面打,并且已经适应打提后量,这会怎么样?你会在服务器里看见一个反映力超强的超人。因为他的反映力快得以至于能预见未来!
关于这个参数讲到这里我想你已经比较清楚了,cl_lw,cl_lc,ex_extrapmax几个参数也有些效果,不过没人问HeatoN,所以我也不需要讲了。希望了解更多的我推荐另一篇发表在sogamed的长篇大作,netcode详解,我是没时间翻译了,大家感兴趣就自己找找吧。
最后我想想说说我个人看法。很多人觉得写这种文章会助长作弊,因为改config算作弊。其实我想说明一下我的观点,CPL规定,比赛中任何参数只能通过点击游戏中的选项更改,不能用控制台改变。如果你改动了ex_interp这种参数,肯定要通过控制台改,CPL叫做config hack算违规。用OGC这种作弊软件,那就是cheat(作弊)了。CPL的规则只是他一家的规定,比方说ClanBase也有规定,某些细节上也和CPL不 一样。但是我们绝大多数人都认同支持CPL的规则。我个人也认为没必要更改,Heaton这种王者都说坚决不改,我们改啥?再说Heaton这种大腕都发话希望下个版本ex_interp 0.1作为标准,那么很可能在CS 1.6中,这个参数就内置了,倒时候要想再修改只能改二进制文件了,那就真的 成为作弊了。等你练成提后量神功的时候,CS 1.6一推出,你肯定就傻了。
我写这篇文章只是让你知道的多一点,不要吃亏。联想到最近WCG比赛,东北赛区投诉ID战队将动态准星这个参数关闭,我觉得组织者有很大责任,动态准星这个参数如果给关闭了,裁判站旁边一眼就看到了,如何能比赛完了都没察觉呢?这个参数早就被老外讨论烂了,很多人都知道了,还有一批人大费周折地去测试弹道是否也偏移,这只是准星是否动态显示而已,和弹道偏移有什么关系,改这个参数只能通过控制台或者config,这才是问的关键?既然规定采用CPL规则,那么按CPL说法这就算config hack啦。既然改动了这么明显的参数裁判都看不出来, 如果我改动了ex_interp这种很难看出来的参数,裁判就更一无所知了。本届WCG比赛的裁判我看应该事先集中培训,参加一个考试,不然仅仅靠热情没有水平也当不了裁判。
如果你想成为真正的高手去打比赛,HeatoN说你必须从一开始使用默认的config练习。不过显然他比我们都更早,更清楚config 中的每个参数。如果你凭借着一点伎俩,就算混进了世界比赛,但是在老外担当裁判的比赛中,你绝对不会有任何机会。
:em22:
哥的config就是CPL标准。。。。。。。。。。。。:em06: 都说的那么精彩! 也不知道哪个是真正的高手! 又几个参加过比赛!
页:
1
[2]