CS:GO甩枪手感怪异?解析帧率与网络代码的影响
CS:GO甩枪手感怪异?解析帧率与网络代码的影响
在CS:GO游戏中,许多职业选手和普通玩家都反映甩枪(flicking)手感怪异且违背直觉。本文将深入分析这一问题,并探讨其背后的技术原因。
在这个社区里,很多职业选手和普通玩家都在抱怨甩枪(flicking)的感觉很怪异且违背直觉,这种感觉确实存在。对于那些经常在社区里看到相关讨论的人来说,一直有声音强调CS:GO里的甩枪相较于其他第一人称射击游戏类型,感觉不自然且违背直觉。
然而,作者决定全面深入了解这个问题,花了几天时间试图量化究竟是什么让甩枪感觉怪异,这个问题主要影响了CS:GO里使用AWP的玩家。答案可能会让你惊讶,问题并不在于sub-tick。
帧率时间变化(Frametime Variance)和网络代码(Netcode)才是罪魁祸首。
不信?让我们来解释。去年,MrMaxim和qkNorris分别制作了视频,前者讨论了sub-tick射击,后者探讨了所谓的“鼠标输入延迟”。在MrMaxim的视频中,他解释了现在点击鼠标后,开火动画会在下一帧显示,而射击命中判定则在下一个tick显示。随着最近客户端侧伤害预测的更新,射击命中判定现在响应更灵敏,因为它们“似乎”将开火动画与下一帧的射击命中判定同步了(前提是服务器根据你的视角确认你击中了敌人)。
与此同时,qkNorris解释了射击命中判定是如何在点击鼠标时基于上一帧打上时间戳(time-stamped),而不是之后(这在与CS:GO里是不同的)。与点击之后才判定相比,在点击之前就进行射击命中判定有什么好处呢?这样一来,游戏无需等待下一帧渲染来确定你射击的位置,而是抓取你点击之前的那一帧(这一帧已经生成),让服务器能快速获取已生成的帧,从而减少客户端和服务器之间的信息延迟。所以,理论上它应该更好,因为响应更灵敏且更准确。
现在考虑到这些,帧率时间变化和网络代码是如何导致甩枪感觉糟糕的呢?还记得qkNorriss解释的点击鼠标时射击命中判定仅基于上一帧,以及MrMaxim解释的开火动画仅在下一帧显示这部分内容吗?
这种基于帧来处理射击命中判定和开火动画的特定方式存在问题,帧率下降(FPS drops)和帧率时间(frametime)变化会导致你的甩枪表现不稳定。
让我们举个典型的例子:
假设你在Mirage地图的VIP处拿着AWP架点,预计敌方阵营玩家在回合早期会peek。现在当敌方的人物模型出现在你的屏幕上时,由于CS:GO糟糕的FPS优化,当敌人的模型在你屏幕上移动时,可能会导致你的FPS下降、帧率时间飙升。就在你试图甩枪瞄准敌人的那一刻,由于渲染的帧不稳定,sub-tick更有可能检测到你点击鼠标错误的那一帧。
我再说一次,sub-tick在检测你点击鼠标这件事上是准确的。问题出在敌人向你探头以及你在屏幕上甩枪的整个过程中,你的帧率下降和帧率时间飙升。这就是为什么你觉得甩枪感觉怪异。
这并不是因为它违背直觉,作者承认之前错误地这么认为了。而是游戏没有生成稳定的帧,使得sub-tick无法通过准确记录你点击敌人时的那一帧来让玩家获得优势。
现在,再加上CS开发者因动画带宽大而正在努力修复的未优化网络代码,这就造成了一种感觉,即与CS:GO相比,现在的peek优势要大得多,因为你没有足够的机会去应对敌方随意的peek。
在CS:GO里,当敌人随意地向你peek时,架枪位是可行的,因为你仍有不错的机会击杀他,因为射击是在稳定且离散的tick(64或128tick)中判定的。
有了sub-tick后,射击基于你的帧来判定,理论上这更准确,因为你无需等待tick。
但这是一把双刃剑,虽然理论上更准确了,但CS新版本严重依赖你的硬件,除非你有一套旗舰级配置,能在相当的帧率下保持1%或0.1% Low FPS稳定,否则你会因为上述原因感觉甩枪打不中。
解决办法呢?
向Valve开发者呼吁,让他们修复CS新版本的帧率时间变化(以及整体的FPS优化)和网络代码问题。
免责声明
随着更多更新到来,帧率自然会有所下降。这是正常的,不正常的是1%和/或0.1%的低帧率给你带来不稳定的游戏内表现,从而影响你的游戏体验。这才是主要问题。
总结:甩枪依赖稳定的帧率时间和良好的网络代码。不幸的是,CS新版本优化太差,导致很多人因此在甩枪方面遇到问题。

