欢迎光临散文网 会员登陆 & 注册

【炒冷饭】对于电竞游戏输入延迟的测量分析与优化

2023-08-07 14:57 作者:云居一号yunjuyihao  | 我要投稿

对于电竞游戏输入延迟的测量分析与优化

内容提要:

本文旨在指出windows平台上使用DX8 DX9渲染接口的游戏的延迟的测试方法,大小特点和优化方案。采用“慢动作键盘宏”法可将测量精度提升到4ms左右,并且通过对比实验与公式计算,进一步推导出DX8 DX9电竞游戏输入延迟随环境变量的变化特点。极大降低键盘延迟测试工具的成本,并提高精度和兼容性,发掘真正优秀的键盘。本文旨在一改电竞游戏的“玄学优化”与“玄学手感”的研究方式,将对游戏体验有影响的因素用数据的方式表现出来。

关键词:电子竞技 输入延迟 游戏优化 键盘 键盘延迟

笔者是一名Ballance(一种延时竞技游戏)竞速玩家,在使用不同的电脑和键盘时,水平的差距是极大的。一个“垂直同步”的开关,几乎决定了我是高手还是菜鸡。带着这样的疑惑,我开始研究不同的电脑为什么会让我有着天壤之别的水平。此时正值NVIDIA Reflex技术发布,它第一次以硬件形式而非感觉形式,测量了从usb到显示器的输入延迟,并精确到了1ms级别。然而,一台搭载NVIDIA Reflex技术的显示器高达数千元,笔者家境贫寒买不起,于是就依据其原理,设计了一套测量输入延迟的方案。

Reflex的原理是,比较从usb信号输入显示器,到显示器液晶分子变化的时间差,它囊括了除了外设以外所有部分的延迟(引用来源1)。根据这个原理,我们可以将游戏操作键与大写键绑在一起,比较大写灯和屏幕变化的时间差,也可以得出来相近的延迟数据。

准备材料:带键盘宏功能的键盘、有原生240fps慢动作摄影的手机、把视频从手机发到电脑的软件、可以逐帧的电脑视频播放器

操作方法:

1.编写一个键盘宏,同时摁下caps键和某个键,存在caps键上

2.找到一个瞬间发生的切换效果,一边连续摁caps键,一边用手机拍摄屏幕和键盘灯,以稍大的间隔连点20次caps键。

3.把视频发到电脑上逐帧看,从键盘灯亮的一帧开始(本帧不算)播放,直到屏幕开始出现变化的那一帧,经过了n帧

4.20次结果取平均,单位比较特殊,叫“延迟单位”,由于视频是240fps,所以其中一帧就是240分之1秒。N单位延迟=(N*4.17)ms

数据统计:至少包括系统版本,全屏状态,dwm状态,垂直同步状态,帧数,显示器刷新率等要素。

 


通过控制变量法可以得出以下结论:

对比1和2 :与是否使用mod无关

对比2和3 :win7上与全屏与否无关

对比6和7和8 :与用哪款软件锁帧无关(其实bandicam延迟会高出一帧,可忽略)

对比4和5和6 :FPS应该在240以上

对比4和9:绝对不能开启垂直同步

对比2和10 :win10的延迟远高于win7

对比10和11和12 :延迟与兼容性选项无关

对比2和13:将DX8转为DX9后,延迟将会降低为win7水平

查阅Microsoft官网文献可知,win7可以选择手动打开和关闭dwm(桌面窗口合成器),仅影响窗口化游戏,全屏无dwm。win10更为复杂,win10存在独占全屏(无dwm),假全屏(有dwm),窗口化(有dwm)三种情况。查阅Microsoft官网文献可知,“禁用全屏优化”将会使游戏强制处于独占全屏(引用来源2),但是,在ballance上,这个选项并未生效。并且,按道理说兼容模式会提高延迟,而实际情况并非如此。笔者推测是因为由于ballance年代较早,win10会强制为其开启兼容模式,并强制取消独占全屏。年代较早的游戏普遍采用Opengl1.1、DX7、DX8等渲染管线,而这些很可能是win10进行判断“老游戏”的依据。

扩大实验,选取其他DX8游戏进行延迟测量,如“东方永夜抄”“CS1.6”,“CS起源”,“东方花映冢”,“红色警戒2尤里的复仇”,并采用dxwnd中的wrapper工具相互转化,得出以下结论。凡是DX8 DX7游戏,都会被强制开启兼容模式,并强制取消独占全屏。Opengl1.1游戏,在NVIDIA平台非独占全屏,在intel平台独占全屏。DX9、D9ex、DX10、DX11均可独占全屏,dxvk1.0非独占全屏且延迟高,dxvk2.0独占全屏低延迟。

独占全屏是否等于低延迟?窗口化是否等于高延迟?其实不一定,要具体分析。我们必须要搞明白,何为独占全屏?dwm又是怎么增加延迟的?查阅外网文献得知,一般来说,独占全屏能够覆盖音量悬浮窗和输入法,假全屏不能,但这种方法仅适用于DX而不适用于Opengl(引用来源3)。对于情况复杂多变的Opengl、vulkan等非微软硬件接口,我们就不应当纠结于独占全屏,一切用延迟数据说话。Dwm本质上是一层筛选与组合的“膜”,一般来说,游戏画面先从Rasterizer交到GPU,显卡画好了以后发给DX surface,再发到显卡缓冲区,然后显示到屏幕上。但是dwm会从DX surface拷贝到DWM自己的缓冲区,然后等各个窗口画面都提交之后,再统一发送到显卡缓冲区,画到屏幕上,所以得名“桌面窗口合成器”。Dwm为了确保显示出的内容丝滑流畅,缓冲区会留2-4个“显示器完整画面”。游戏画的速度再快,完整的画面也无法抢占缓冲区内存好的2-4个画面,从而导致整体滞后,这就是它导致高延迟的原因。

罪恶的dwm,左边高延迟,右边低延迟,现在你知道为啥很多老游戏在win10高延迟了吧

游戏内的垂直同步就是在缓冲区中强制存上2-4个“显示器完整画面”,而dwm是在游戏外再开辟一块缓冲区存上2-4个“显示器完整画面”,所以两者造成的额外延迟是直接相加,互不干扰。同理,在一个60hz显示器上,无论游戏FPS有多高,即使一秒输出了1000个画面,能够画上的只有第32张,第64张,第96张……缓冲区的帧永远是过时的,而新的却还得等16.6ms才能进入,大部分帧被直接丢弃。

对抗dwm的方法只有三个:第一个是绕过dwm,直接输出到屏幕,也就是所谓“独占全屏”。第二个是干死dwm,win7可以直接关,win8.1和win10早期版本可以通过stopdwm软件来关,win10晚期版本和win11不可关。第三个是改良dwm,d9ex、dx11、dx12都可以通过Flip model来改良dwm的帧缓冲区。比方说,在60hz屏幕,游戏1000fps,缓冲区三帧的情况下,当第一帧被画到屏幕上时,此时游戏已经提交了更新的完整帧,此时通过算法筛选,丢弃掉本来的“第二帧”和“第三帧”,而是把这个最新的帧画上。也就是说,只要fps高于显示器刷新率,这样做就一定能让缓冲区的滞后帧废弃,让更新的帧进来,fps越高,最新帧抢占缓冲区内滞后帧的概率越大。这样,既保证了高fps意味低延迟,又可以在fps剧烈波动时依靠缓冲区内滞后的几帧使画面丝滑连贯。(引用来源4)目前来说,绝大部分电竞游戏没有对此作出优化,有一部分游戏使用硬件手段降低延迟(如配合Gsync Freesync等)但效果并不好,仅仅能提升观感。

但这都是理想情况,实际情况还要再复杂一些,比方说,很多游戏存在物理帧与渲染帧的错误耦合,导致当前渲染帧提交后才开始算下一个物理帧。我们通常采用低fps法来探究此类问题,当fps仅有20时,系统本身和硬件的延迟在巨大的帧间隔时间面前不值一提,也就是说,你在当前帧的操作,一定会在下一帧马上反映出来。如果下一帧仍然没有反应,只能说你在按下的时候,物理引擎并没有立即开始处理,当你看到没反应的那个“下一帧”的时候,此时才开始处理你的操作,然后会在“下下帧”看到反映。我将其命名为“跳过帧”,跳过帧在低fps会极大拉高输入延迟,而在高fps下不值一提(毕竟帧间隔很短了)。

此外,当一个游戏出现cpu满载或gpu满载的情况下,输入延迟会有不同程度的提升,当cpu和gpu交替满载时最为致命,而NVIDIA Reflex技术对于高负载下的延迟有良好的解决方案,这里既不考虑也不赘述(引用来源1)。

所以,延迟通用定理为2+500/引擎刷新率+500/fps+500/屏幕刷新率+“DWM”*2000/刷新率+“垂直同步”*2000/刷新率+1000/fps*跳过帧(ms),这个公式是比较基础和理想化的的,对于opengl、vulkan、flip model、高负载游戏会有不同程度出入。另外,Freesync和Gsync在fps远高于显示器刷新率时,对延迟几乎无影响。

想获得全屏低延迟,只有DX9独占全屏;想获得窗口低延迟,只有DX11并使用independent flip模式(引用来源6)。在win11中,无边框全屏dx11游戏也是低延迟。Dgvoodoo2和specialk是非常强大的工具。Dgvoodoo2可以将任何游戏的渲染方式变为dx11,但并不会带有flip model,而specialk能为任何dx11游戏打开flip model,并提供实时的延迟显示和帧率控制。该延迟显示的实质是从请求渲染到显卡提交画面的时间差,并不包含两帧的间隔时间(frametime),也不包含物理运算,屏幕刷新间隔等,理想情况可低于1ms。Specialk可能在多人网游中存在安全风险,如封号与笔者无关。

Win10和win11的窗口化低延迟有着极为苛刻的条件,下面列出几个必要不充分条件:窗口不得部分超出屏幕(仅win10),窗口不得覆盖任务栏(仅win10),不得开启10bit色深,不得开启HDR,不得开启freesync,不得在前后堆叠窗口或悬浮窗,不得使用屏幕录制录屏,显卡驱动不得早于2021年,若系统存在缩放需要禁用高dpi下的缩放。我们可以使用presentmon这款软件,测量所有窗口化程序的画面延迟,也可以使用specialk,测量全屏或窗口状态下的dx11游戏画面延迟,确保不要坑了自己。

对于延迟的探究不能只停留在机箱里,机箱外面同样有三个物件值得注意,它们就是鼠标键盘显示器。

键盘内的延迟包含首字符延迟、尾字符延迟、次字符延迟、硬件灯效延迟等(引用来源5)叫首字符延迟,可以理解为两键盘同时导通,看谁先把信息传到电脑里,即从触点触发到信号导通。终止延迟的术语叫尾字符延迟,可以理解为两键盘同时取消导通,看谁先把停止的信号传到电脑里,即从触点断开到信号终止。次字符延迟,是键盘对于特定游戏的针对性延迟补偿,比方说,当一个游戏短时间(0.5s)内的连续输入,延迟依次加3ms,那么键盘可以通过调整次字符为3ms,第一下敲击故意晚一些发码,然后几下敲击依次比前一次少等3ms,这样虽然提高了整体的延迟,但是像拼图一样抵消了游戏的延迟特性,让操作更加符合直觉。硬件灯效延迟即为在主控中因为处理灯光效果而造成的处理滞后,如果延迟设定过为激进则会非常不稳定。

键盘的回报率数值也对延迟有较大影响,125hz相当于每8ms上传一次信号,平均延迟4ms,1000hz则是每1ms上传一次信号,平均延迟0.5ms,但是2000hz、4000hz、8000hz等超高回报率,对延迟的影响则不大。对于一些不采用xinput的游戏,过高的回报率反而会造成一些负面影响。

KeyResponsePK是比较键盘首字符延迟的常用软件,它是由血手幽灵公司开发的开源键盘测试软件(现源代码与程序本体均从官网下架)。用一根筷子连接两个键盘的不同按键进行压下,软件会自动计算出两个信号到达的时间差,从而反映出两键盘的首字符延迟差距(相对值)。压下的时候必须要迅速,否则会让短触发键程的键盘有优势。

Keyboardtest是测试键盘尾字符延迟的常用软件。举个例子,一个16ms尾字符的键盘,输入电脑总的信号长度,一定大于16ms,即使你瞬间接通和断开,实际效果就是先等待首字符延迟,然后向电脑发信号,再等待16ms,停止信号。根据此原理,我们可以用手指反复刮键帽,刷“按下时间”的最小值,此数值即为键盘尾字符延迟。该方法并不完全准确,近年来不少键盘设定了“最短输入时间”。比如说“最短输入时间”为30ms,如果你只按了18ms就松手,键盘会帮你补到30ms;如果按了31ms,当你抬手后瞬间就会断开。那么这个键盘应该属于尾字符0ms,而不是软件所显示的30ms。

由于上述两种方法均存在不小的误差,甚至测尾字符会出现错误。我们需要更强大的硬件与软件进行测试。主流方法有两个,第一个是高速摄影机拍示波器法,但这个方法过于昂贵且麻烦,只适用于工厂测试,且与实际体验存在不小偏差。第二个是ultralink回传法,电脑控制ultralink再控制继电器模拟机械轴触发,再通过键盘内部电路传回电脑,该方法只能用于测试机械轴而不能测试光轴,成本在500元左右,同样不适用于普通玩家。

网名叫“ae”的一名外设爱好者,设计了并联光耦测试电路。其原理是利用一个开关,绝对同时(误差远小于0.1ms故忽略不计)短接导通和断开两个外设的不同开关,相当于一根超级准的“筷子”。并且,由于是采用短接导通,不会因键程而产生误差。并联光耦成本仅为一毛钱,几根跳线的成本更是直接忽略,操作十分简便,具有可推广性。

网名为“Swung0x48”的一名程序员开发了一款新的键盘测试软件KeyboardLatencyTester,这款软件使用imgui界面与每帧的触发检测,精度与fps成正比,一般可达0.25ms左右。结果输出为两个按键的“下压抬起图”与每个按键的“下压抬起时间戳”,再借助Excel则可以直接计算出按下时间差与抬起时间差,同时得出首字符与尾字符数值。

“并联光耦KeyboardLatencyTester法”不仅可以测试出首字符延迟与尾字符延迟,还可以测出外设本身的延迟稳定程度与接口对于延迟稳定性的影响。结果表明,机箱后置usb口无延迟波动,显示器、前置usb口、正常布线或混乱布线的hub,均存在1ms的延迟波动。其局限性在于,它不可以直接测试“断开触发型”光学开关,需要加上一个非门电路,并且数值为相对值,必须用一个延迟已知且稳定的外设当基准。

以xm1r鼠标作为0ms首字符基准,以b820r作为0ms尾字符基准,对其他键盘鼠标进行测试。结果显示,绝大部分热插拔机械键盘“首20尾20”,绝大部分普通机械键盘“首16尾16“,棱镜轴键盘“首16尾16”,游侠rx光红“首4尾11”,雷蛇天平光轴“首6尾1”,雷蛇模拟光轴“首4尾1”,海盗船K70pro“首0尾0最短输入时间30ms”,宁芝plum84v2“首0尾2”或“首0尾0最短输入时间18ms”,并联光耦电路和鼠标测试结果参看下表。

磁轴好像也不行来着……

然后是显示器,显示器的响应时间很重要。液晶分子的偏转带来颜色的变化,但这个过程是需要时间的。显示器的刷新率决定了画面传进来等待的时间,而响应速度是指从开始变色到变色完成的用时。一般来说,手机的960fps慢动作摄影加上ufotest的网页就可以胜任一般的测试。通过计数飞碟后残影和个数与持续时间,一般的TN材质屏2ms,一般ips屏10ms,fast-ips屏6ms,va屏20+ms,va屏的响应速度太慢导致你观察到变色的时候,画面已经滞后10ms左右了,所以va屏不适于电竞游戏不仅是因为严重的拖影,还因为延迟太大。如果优化得当,系统和键盘延迟总共不超过10ms,而主要矛盾,就变成了显示器。在响应速度跟不上的时候仅提升刷新率,是没有任何意义的。

选择低延迟的键盘鼠标显示器,有助于游戏水平的快速提升。很多电竞游戏的延迟非常之高,而不少玩家对其无感或漠不关心;现在的市场鱼龙混杂,虚假宣传层不出穷,掌握科学的测试手段,不被广告牵着走,是高玩的必修课。现在,硬件方面,低延迟外设处在发展低谷,低延迟测试工具和结论没有统一的标准,很多伪低延迟产品大行其道,真低延迟产品存在各种体验问题;软件方面,微软对老电竞游戏持淘汰目的,legacy flip和independent flip的条件有待挖掘。看向未来,我们要推动flip model的发展与应用,深究独占全屏的原理与获取方式,发展各类wrapper,宣传低延迟相关理论与科学方法,提升光学开关的使用体验,与国内OEM厂家积极沟通与合作,提高光学开关产品的国际竞争力,研究外设特点与游戏需求间的客观联系,深入研究rapid trigger技术。

参考文献:

[1] https://www.nvidia.cn/geforce/technologies/reflex/

[2]https://learn.microsoft.com/en-us/windows/win32/direct3d9

[3]https://www.gamedeveloper.com/programming/fullscreen-exclusive-is-a-lie-sort-of-#methods-of-enabling-fullscreen-exclusive-mode-in-opengl

[4]https://learn.microsoft.com/zh-cn/windows/win32/direct3darticles/direct3d-9ex-improvements

[5] https://www.bilibili.com/read/cv7465854

[6] https://wiki.special-k.info/en/SwapChain

 

 

 

 

 

致谢

变形的木球(协助测试、方法指导)

Swung0x48(文献翻译、键盘测延迟工具开发者)

ae(并联光耦,极大量外设测试数据)

加菲电竞外设(电竞导师、宁芝合伙人)

东方圈(前人研究成果)

血手幽灵(光轴键盘领军者)

瑞翼鲨(光学开关领军者

方方土(很大概其的论文写作指导)

马特(协助测试)

欣小欣(好耶

其他划水小组成员


【炒冷饭】对于电竞游戏输入延迟的测量分析与优化的评论 (共 条)

分享到微博请遵守国家法律