PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

关于游戏玩家经常説的输入延时

[复制链接]
kingyesx1 发表于 2022-8-20 18:32 | 显示全部楼层 |阅读模式
点击数:1116|回复数:5
本帖最后由 kingyesx1 于 2022-8-20 18:42 编辑

论坛也冷了不少时间。讨论一下游戏的输入延时小破站等网站很多视频,论坛文章都经常提到输入延时这个东西,也説了游戏帧数对输入延时的影响

我这里説下我的观点。和上次一样,并不是找碴,都是用一些实际存在的东西来推理出来的逻辑

一、玩家按键盘,移动鼠标,点击鼠标键等,其实并不是被CPU直接处理的,是先放到输入缓存区里面排队的
什么是输入缓存区?这个可以某度搜索一下

这个输入缓存区有大小限制,实际我们长按键盘的某个键或以极快的速度按一大堆键,只要程序不能及时处理(程序大,而CPU速度慢或者死机等因素)或清空输入缓存区里面的数值队列,输入缓存区就会满
满了之后,一般都有明显的提示音,例如玩家这时候再按一下键盘或移动鼠标等喇叭或音箱就会嘟嘟或叮叮的提示响

游戏也一样,玩家按了按键,按键的值都会先存输入缓存区,这时候,就要看CPU是否在一直检输入测缓存区在新的键盘输入
这里分2种情况:
1,CPU根据程序指令一直监控着输入缓存区,这里有新数据进来,CPU会马上处理,根据玩家的按键改变角色的不同动作(也就是角色状态)
2,CPU根据程序指令在做其它的事情不监控输入缓存区,就算输入缓存区有新数据(也就是玩家按了键盘按键)也要等CPU忙完其它事后再去输入缓存区获取输入数据
CPU为什么会不监控输入缓存区?因为不同游戏对应玩家操作角色的动作频率是不一样的
举个例子:
武器攻击频率,手枪,自动步枪,射击速度不一样,需要不同的间隔时间
游戏角色技能也一样,不同技能需要不同的间隔时间,就连移动和跳跃都需要不同的间隔时间
怎样做到不同性能的电脑同一把枪或同一个技能产生的间隔是一样的?用帧来识别吗?
不,是CPU时钟,不同性能的电脑(包括服务器)他们的时钟都是一样的,不会説电脑性能好的。他的电脑时间就比电脑性能差的要快

玩家按了键盘,CPU从输入缓存区读取操作数据,程序就会根据角色当前状态(是否死亡,是否受伤等)和环境(空中或者水中等)计算按键后玩家的新状态
再根据旧状态和新状态实时生成或渲染一系列的帧生成形成动画
这个生成和渲染动画就看各玩家电脑(游戏服务器一般只计算角色状态,不涉及动画生成,所以大部分网络游戏服务器不需要显卡,例如MC服务器)的整机性能了

看到这里不知道能不能看懂?语言组织能力一般,请见谅

现在返回来説,游戏高帧数(实际应该説显示器高刷新率)会不会影响玩家输入操作?

游戏一般分多线程的
A.程序分配某1个线程(或一个纤程等)去实时监控输入缓存区读输入一个或多个数据(组合键),有新数据就丢给B,并停止也监控(是否一直监控也就看游戏是怎样设计的)
B.程序安排多个线程(需要几个线程看游戏类型,SLG,模拟经营,格式,射击等都不一样)根据按键数据计算角色状态和环境产生新的状态并要求C产生帧新的帧形成动画,还要根据不同的操作键,角色状态去重新安排间隔多长时间后A再去实时监控输入缓存区
C.安排多个CPU线程和显卡根据角色状态产生帧形成动画并播放(这个时间就看各玩家的主机性能了)

上面的ABC是独立的。例如C在产生帧和播放动画的时候是否会影响A监控输入缓存区获取新数据?可以想想




StormBolt 发表于 2022-8-21 00:42 | 显示全部楼层
不管C有没有影响A,C是参与到用户交互中的一个环节,没有它就形不成闭环,A再快或再慢用户都不知道,延迟是ABC合计的时间
kingyesx1  楼主| 发表于 2022-8-21 09:50 | 显示全部楼层
StormBolt 发表于 2022-8-21 00:42
不管C有没有影响A,C是参与到用户交互中的一个环节,没有它就形不成闭环,A再快或再慢用户都不知道,延迟是 ...

不管C有没有影响A,C是参与到用户交互中的一个环节
这句话很和稀泥

按照网上的很多游戏玩家的言论(大部分玩家完全没了解过计算底层的东西,相信这种言论情有可原),C生成帧和动画的时间长短,对A是有非常大影响,是100%会影响A送数据到B的时间
但实际没毛线的影响

U:有线键盘,无线键盘,有线鼠标,无线鼠标,游戏摇杆等输入设备
----------------------------------------------------------
A:输入缓存区,保存用户或玩家的按键队列,等程序来访问或清除
--------------------------------------------------------
B:(就是所谓的游戏服务器,分单机和网络服务器 )根据操作按键计算处理角色状态(NPC,玩家角色,敌对角色,炸弹是否爆炸,判断有没有死亡等),变更游戏场景等
--------------------------------------------------------
C: 显卡GPU,部分CPU生成帧和动画等显示场景,角色状态相关的工作(可以是2D动画,3D动画,单张图片,甚至只有文字输出)

U里面各种设备的延时是不一样的,这只会影响数据到达A的时间(无线基本都是MS为单位,1秒=1000MS,1MS=1000NS)
可以将A想像成中巴站,U是以各种不同方式走向中巴站的,例如步行或骑自行车的甚至飞机飞船的(外挂模拟键盘鼠标等的输入)

A的数据到B是非常短而且稳定的。以NS为单位(单机游戏,主机本身就是客户端 也是服务端,自身内存的速度,所以一般请无视这个延时),如果是网络游戏,那A的数据是先通过网络向B网络服务器送数据(这个就是以基本以MS为单位,网络好不好是另一个讨论范围)

B就是所谓的服务器,A的按键都要先经过这里来进行判定处理,就是检验这个按键是否对游戏角色状态或会不会产生影响
例如角色已经死亡,用户按了射击或跳跃键就不能进行相关的处理。移动键就检测下一步是走向空中还是走向水中还是需要转换场景等
做完判定和相关的数据处理,会将结果保存到内存某个地址(单机,网络游戏就将结果通过网络发回给客户端C,这个受网络质量影响)

C就是将B传回来的结果输出到显示器上面告诉玩家
但同一个结果可以做成不同方式来展现,例如3D动画,2D动画,一张图片或者只输出文本都可以。但这几种方式产生的时间可完全不一样。3D动画就是现在流行的3D游戏(对GPU要求最高),2D动画就成2D游戏,文本呢?就是以前的文本MUD游戏了。

看明白没?C对A完全没影响
现在大部分游戏只需要在B上面修改一下技能名字,技能时间间隔,技能特性(就是能不能打断,是在空中放还是水下使用等),再在C做一下动画的变更就是另一个游戏了
至于C是什么特效动画?是2D还是3D,还是文字游戏,都可以自己改(玩家也可以自己建模自己改,只需要弄懂游戏的数据文件格式,外挂其实就是接收结果,跳过动画部分)
StormBolt 发表于 2022-8-21 14:26 | 显示全部楼层
逗呢,长篇大论的,用户的反应不是通过眼睛接收C?你把眼睛闭上,永远收不到C,是不是延迟就无限大?跟A有关系?

人家说的是C影响ABC,你怎么理解成C影响A了
kingyesx1  楼主| 发表于 2022-8-21 21:04 | 显示全部楼层
StormBolt 发表于 2022-8-21 14:26
逗呢,长篇大论的,用户的反应不是通过眼睛接收C?你把眼睛闭上,永远收不到C,是不是延迟就无限大?跟A有 ...

説根据显示器刷新的图像再做输入操作那是没问题了。
那就跑回我上次发的贴子了。
高帧需要高刷显示器  那个帧子里説的问题了。也可以回去看看自己的发言
也没必要只讨论主机生成帧而不説显示器刷新率了
网上的言论都只在説主机生成帧对输入延时的影响,没错吧。


StormBolt 发表于 2022-8-21 22:17 | 显示全部楼层
kingyesx1 发表于 2022-8-21 21:04
説根据显示器刷新的图像再做输入操作那是没问题了。
那就跑回我上次发的贴子了。
高帧需要高刷显示器  那 ...

第X帧的内容能给用户反馈,高系统这个第X帧来得比低系统早,但是高低系统在帧缓存里面的情况是一样的,都是有那么多帧,只是低系统挑了部分显示出来而已,比高系统少掉的是过渡部分,不会影响缓存里第X帧出现的时间。代入具体数字就是“等高帧低刷系统”显示第1,1,3,3,5,5,7,7,9,9帧,“等高帧高刷系统”显示第1,2,3,4……9帧,少的是2,4,6,8,但并不会影响第1,3,5,7,9帧到来的时间,只是如果这个关键帧是4,需要等到5才看到,一帧的差距我想不是你要钻的牛角尖,你只是没明白原理

这些其实上次已经说得很明白了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部