PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

游戏高帧数需要高刷新显示器搭配才有效果

[复制链接]
141#
kingyesx1  楼主| 发表于 2021-2-27 07:32 | 只看该作者
Ivanonline 发表于 2021-2-27 01:37
我同意你的观点。看来还是你是完全理解了我的意思。。

实际传输的数据也就是一帧的数据,只不过这一帧包 ...

没上限不停传输整帧的数据就会有我説的传输率上限的问题你可以算一下你説的模式所需要的传输上限是多少,就现在的DP或HDMI,CSGO或LOL只要帧数高点
传输上限就会超过DP或HDMI标准上限。明显不合现在的事实


142#
StormBolt 发表于 2021-2-27 09:11 | 只看该作者
Ivanonline 发表于 2021-2-27 01:22
你的意思是不是类似虚拟机的“系统快照”。在1/60这个时间点快照主机前缓冲区。显示器这时候显示的画面既 ...

是这个意思,也知道颜色不同其实差别不大,但是只有2帧的原因是因为只放得下2帧,如果你要放3帧,中间那帧必须就是完整的,才会同时有前帧一半和后帧一半,这样一个缓存已经超出一帧大小
143#
StormBolt 发表于 2021-2-27 09:42 | 只看该作者
kingyesx1 发表于 2021-2-27 07:20
这和前缓存和后缓存没什么关系。而是产生什么样的帧内容。人只会根据帧的内容产生反应。
很多的操作是隐藏 ...

垂直同步肯定就是等,你又忘记前面在说什么了。前面说了你设想的理想情况叫做同步,同步的情况会有延迟,现在是又想回去说不同步还是想说不存在的120/60同步?

你只有60,60又要和60都对上号,不等待显示什么??什么叫做wait for vsync?什么叫做等待垂直同步,等待什么?

这个帖从第一页就抱着这个假设,但是已经数次说过不存在120fps每2取1的情况了,没得隐藏……真要达到这种目的,能负担120/60的系统很可能可以提供完美60/60,就算不能也大差不差,不会采取浪费性能的做法,所以不存在。

能不能从解释事实的角度出发而不是怀疑事实和设置各种理想……
144#
kingyesx1  楼主| 发表于 2021-2-27 10:26 | 只看该作者
本帖最后由 kingyesx1 于 2021-2-27 10:29 编辑
StormBolt 发表于 2021-2-27 09:42
垂直同步肯定就是等,你又忘记前面在说什么了。前面说了你设想的理想情况叫做同步,同步的情况会有延迟, ...

我的意思是説
游戏中电脑来来去去就产生3帧(3重缓存),如果是双重缓存就2帧
不存在你按了一个键就影响后面的十几帧或几十帧的出现时间,因为后面的帧是根据你未来的动作或未来的其他一些信息才产生的帧,当前是不会出来未来产生的帧
并不存在你説的十几帧几十帧排队等显示的现象

这就是游戏,不是视频,用视频帧的出现时间来表达游戏帧的出来时间并不合理
145#
Ivanonline 发表于 2021-2-27 10:53 | 只看该作者
kingyesx1 发表于 2021-2-27 07:20
这和前缓存和后缓存没什么关系。而是产生什么样的帧内容。人只会根据帧的内容产生反应。
很多的操作是隐藏 ...



你引用错了。我发现你跟我一样。讨论着讨论着,发现引用错,然后就不知道说给谁了。我翻了翻我的帖子,我发现我也引用错发错人了。

PS:我66楼的图被你无视了。



146#
Ivanonline 发表于 2021-2-27 10:58 | 只看该作者
本帖最后由 Ivanonline 于 2021-2-27 11:22 编辑
kingyesx1 发表于 2021-2-27 07:32
没上限不停传输整帧的数据就会有我説的传输率上限的问题你可以算一下你説的模式所需要的传输上限是多少, ...

我之前就已经解释过这个了。

你一直认为是整帧传输。我一直在说是传输一部分。

我拿我之前举得那个例子再详细说明一下:就像你在windows里面拷贝一个文件。

这个文件大小是不变的(一整帧的大小),

拷贝时间是不变的(1/60秒拷贝完成)。

变的就是里面内容(根据主机生成的帧的多少)。


----------------------------------------------------------------------------------------

这是拿我62楼所的做为例子:

显示器在1/60秒显示的第一帧
ABCD
ABCD
BCD3
CCDD

然后咱按照这16个字母来带入。

在 1/60/16 秒,显示器显示了第一行的字母A
在 2/60/16 秒,显示器显示了第一行的字母B
在 3/60/16 秒,显示器显示了第一行的字母C
在 4/60/16 秒,显示器显示了第一行的字母D
在 5/60/16 秒,显示器显示了第二行的字母A
在 6/60/16 秒,显示器显示了第二行的字母B
在 7/60/16 秒,显示器显示了第二行的字母C
在 8/60/16 秒,显示器显示了第二行的字母D
在 9/60/16 秒,显示器显示了第三行的字母B

在 10/60/16 秒,显示器显示了第三行的字母C (注意这里,由于显卡第二帧已经完成,前后缓冲区切换,这时候,下一个字母输出的为显卡输出的第二帧中的数据,也可以认为是前缓冲区切换后,前缓冲区接着上面之前的前缓冲区继续传输的数据。)
在 11/60/16 秒,显示器显示了第三行的字母D   
在 12/60/16 秒,显示器显示了第三行的字母3
在 13/60/16 秒,显示器显示了第三行的字母C
在 14/60/16 秒,显示器显示了第三行的字母C
在 15/60/16 秒,显示器显示了第三行的字母D
在 16/60/16 秒,显示器显示了第三行的字母D(这时候 显示器整帧完成。)


-------------------------------------------------------------------------------------

为方便理解,下面是复制的63楼

-------------------------------------------------------------------------------------

既然你提到挤压了,我这里说一下。并没有挤压,挤压是你强加给我的。
按照你的图。应该就是这个状态(我就不画了,太费眼了。):ABCD   S1B2
ABCD   ACD1
BCAD   BCAD   <---
BBAA   BBAA   <---你这前两帧最后两行居然一样。不用你的了。我再编一个。


  显卡生成的
第一帧   第二帧                                     显示器在1/60秒显示的第一帧
ABCD     S1B2                                        ABCD
ABCD     ACD1                                        ABCD
BCAD     B1D3   --->   生成的是这个图      BCD3
BBAA     CCDD                                        CCDD



黄色太不明显,我这里用橘红色代替黄色。你知道这个意思就行了。。然后显示器生成的第一帧图像是后面那个。这样应该更清楚了。后面那一帧也是这样的。并没有挤压



然后撕裂我先不谈。这里也先别讨论撕裂。撕裂是另一回事。稍后我涉及到撕裂了,咱在讨论,好吗?


然后你的最后的问题,我的回答是:不能。


还有其他不是太明白的吗??

---------------------------------------------------------------------------------
147#
kingyesx1  楼主| 发表于 2021-2-27 11:11 | 只看该作者
Ivanonline 发表于 2021-2-27 10:58
我之前就已经解释过这个了。

你一直认为是整帧传输。我一直在说是传输一部分。

嗯。观点的区别了。实际究竟是部分还是整帧,我不是专业的,我只是提出我的观点。因为这是我説高帧需要高刷的一个点

148#
Ivanonline 发表于 2021-2-27 11:24 | 只看该作者
本帖最后由 Ivanonline 于 2021-2-27 11:26 编辑
kingyesx1 发表于 2021-2-27 11:11
嗯。观点的区别了。实际究竟是部分还是整帧,我不是专业的,我只是提出我的观点。因为这是我説高帧需要高 ...

我感觉这个应该就是分歧的关键点了。
另外关于139楼的文章你看了吗?那个里面可以提供给你关于延迟的一些思路。
149#
Ivanonline 发表于 2021-2-27 11:31 | 只看该作者
本帖最后由 Ivanonline 于 2021-2-27 11:32 编辑

算了我还是贴出来吧。
这是部分
注意中间流水线的图(时间轴的那几个图)
-------------------------------------------------------------------------------
多屏幕刷新率(refresh rate)模式下的帧显示流水线
whoatenereyhow 2020-05-07 12:54:58 1118 [url=] 收藏 1[/url]

分类专栏: Android Display/Graphics 文章标签: android core graphics framebuffer framework

[url=]版权[/url]



       给Android应用和游戏开发工程师的最新参考。

       长时间以来,手机显示屏幕的刷新率一直是固定的60Hz. 从2019年开始,由于游戏等应用对响应速度的需求越来越高,越来越多的手机开始在高刷新率(90/120Hz)的屏幕硬件上进行尝试,其中典型厂商的有小米、三星、摩托罗拉等。国内的天马、BOE等屏幕生产商也开始有能力供货高刷新率屏幕面板。

       当手机屏幕都是60Hz刷新率的时候,应用和游戏开发者只需要认定每一帧的处理时间16.6毫秒,并据此来优化自己的代码,显示的一切就都可以掌控。但以后就不是这样了。新的旗舰手机甚至中低档手机,都开始装配高刷新率的显示屏幕来提供更流畅动画,更低的延迟,更优秀的整体用户体验。有些手机更是同时支持多种刷新率,比如Pixel 4,Motorola edge,都同时支持60Hz 和 90Hz. 作者本次就是拿Pixel 4和Motorola edge作为参考机来了解高刷新率feature的。

       运行在60Hz刷新率模式的屏幕,每16.6毫秒刷新一次显示内容。这意味着一副画面显示的时间长度都是16.6毫秒的整数倍(16.6毫秒,33.3毫秒,50毫秒,等等)。但对于支持多刷新率的屏幕,想要保证显示刷新的速度和流畅性,应用开发工程师则需要考虑更多。比如,游戏开发工程师通常简单地假设手机一直以60Hz刷新,当在游戏运行中发现不能维持60fps流畅帧率的时候,就把游戏画面的帧率降低到30fps,从而保证用户仍然不会感觉到卡顿(因为此时屏幕每16.6毫秒更新一帧,那么更低的帧率就是每33.3毫秒更新一帧)。但一款游戏不能只适合运行在60Hz的设备上,当它被安装到90Hz刷新的手机上时,为了维持流畅的刷新,应用开发工程师需要把帧率降低到45fps(因为此时屏幕每11.1毫秒更新一帧,那么更低的帧率就是每22.2毫秒更新一帧)。在90hz的手机上,相同的游戏可以给用户提供更顺畅的显示体验(90/45fps比60/30fpx感觉更平滑)。一款同时支持90Hz和120Hz刷新率的手机,它在120、90、60(120/2)、45(90/2)、40(120/3)、30(90/3)、24(120/5)fps的帧率下,都能提供平滑的显示。

Rendering at high rates

       Render的速度越快,越难以维持该render速度,这是因为更高的render速度意味着同样的工作但更短的处理时间。在90Hz的刷新率下,应用只有11.1毫秒来处理完一帧数据。而在60Hz的刷新率下,应用就有16.6毫秒来完成相同的工作。

       为了更直观的说明问题,我们来看一下Android UI的render流水线,把应用的帧显示过程拆分成5个阶段:

  • 应用的UI thread 收到 input events,调用应用的callbacks并更新 the View hierarchy’s list of recorded drawing commands;
  • 应用的RenderThread发送 the recorded commands到GPU;
  • GPU进行绘图工作;
  • 负责各应用窗口显示工作的系统服务SurfaceFlinger,对各应用的显示内容进行合成并把合成后的frame发送给HAL(有些硬件合成的过程就是往屏幕发送数据的过程);
  • frame开始扫描并更新到屏幕上(比如通过MIPI接口)。

       整个流水线是由Android Choreographer控制的. Choreographer的运行又基于屏幕的vertical synchronization (vsync) events。vsync event代表显示硬件开始扫描输出图像到屏幕上(一行一行的显示). 基于vsync events,应用和SurfaceFlinger有不同的唤醒时间偏移量。下图显示了Pixel4在60Hz刷新率模式下的帧处理流水线。 应用在vsync event 发生后2毫秒被唤醒,而SurfaceFlinger是在vsync event发生后的6毫秒被唤醒. 这样应用就有20毫秒(阶段2+阶段3)的时间去处理一帧数据,而SurfaceFlinger也有10毫秒的时间去合成显示数据(阶段4)。这个处理时间对于一般的硬件平台都是可以胜任的。

       当手机运行在90Hz刷新率模式下的时候,应用仍是是在vsync event发生后2毫秒被唤醒,而SurfaceFlinger是在vsync event发生后的1毫秒被唤醒,这样为了给Surface留下足够的10毫秒时间去合成数据。但是,如果仍然要求数据在第2帧就往屏幕上发送的话,应用就只有10毫秒的时间去画图了,如下图。 这是一个非常短的时间,稍微复杂一些的显示工作,对于大部分平台的AP和GPU性能,都难以这么短的时间内完成画图工作。

       为了减轻画图的负担,Android的UI系统(hwui) 使用一种 “render ahead”机制 (SurfaceFlinger合成时间推迟一帧,但仍然在vsync event发生后1毫秒开始) 把显示时间延迟一个vsync period来拉长一帧数据的流水线时长. 这样应用就有21ms的时间去处理数据(画图,包括AP render和GPU渲染),而仍然能保持90Hz的帧率。

       有些应用,包括大部分游戏,会根据他们的画图的工作量来定制自己的render流水线,增加或减少render阶段数量。一般来说,因为画图工作量太大,会增加render流水线的长度,即在阶段2和阶段3增加并行处理阶段来提升计算效率。然而,这样的折中方案又会引入更大的帧延时 (the latency will be number_of_pipeline_stages x longest_pipeline_stage),需要综合权衡考量。





150#
StormBolt 发表于 2021-2-27 12:00 | 只看该作者
kingyesx1 发表于 2021-2-27 10:26
我的意思是説
游戏中电脑来来去去就产生3帧(3重缓存),如果是双重缓存就2帧
不存在你按了一个键就影响后 ...

那就是60/60完美程度的问题,前面已经有说过了需要性能来撑,玩中古游戏大多数可以,当代未必,预渲染=3能顶住如果属于在游戏和硬件上都普遍,就不会存在关同步解决延迟这回事
151#
kingyesx1  楼主| 发表于 2021-2-27 12:14 | 只看该作者
本帖最后由 kingyesx1 于 2021-2-27 12:16 编辑
StormBolt 发表于 2021-2-27 12:00
那就是60/60完美程度的问题,前面已经有说过了需要性能来撑,玩中古游戏大多数可以,当代未必,预渲染=3 ...

嗯。我帖子开始就説了。
高于显示器刷新率的帧数
性能肯定是没问题的

152#
kingyesx1  楼主| 发表于 2021-2-27 12:25 | 只看该作者
Ivanonline 发表于 2021-2-27 11:31
算了我还是贴出来吧。
这是部分
注意中间流水线的图(时间轴的那几个图)

嗯。看了。其实撕裂的问题讨论来讨论去。在我的观点里面
就是显示器刷新率时间点和主机什么时间点扔画面数据到缓存上的关系
扔准了就同步显示。画面信息就完整了。
至于是2帧信息合成1帧还是几十帧合成一帧在我的观点里面信息都是不完整和不正确的
人也是根据画面信息的完整度来作出后面的操作的
就像主机弄了2帧出来,第一帧是你好朋友,第二帧是打倒敌人,撕裂后就是你好敌人了
153#
StormBolt 发表于 2021-2-27 12:57 | 只看该作者
kingyesx1 发表于 2021-2-27 12:14
嗯。我帖子开始就説了。
高于显示器刷新率的帧数
性能肯定是没问题的

60/60,每次能及时缓存3和多于60,不显示可隐藏,不是同一回事……理想也并没有什么用
154#
kingyesx1  楼主| 发表于 2021-2-27 13:46 | 只看该作者
本帖最后由 kingyesx1 于 2021-2-27 13:51 编辑
StormBolt 发表于 2021-2-27 12:57
60/60,每次能及时缓存3和多于60,不显示可隐藏,不是同一回事……理想也并没有什么用 ...

那就回到之前我回复的内容和问题了
显示器上FPS显示的数字都是过去主机生成的帧,是已经过去了。FPS上有显示未来准备显示的帧吗?
已经过去的帧,高于显示器的帧是怎么表现出来?你感觉出来了?
你的操作延误了未来哪一帧?

双重缓存,3重缓存只是解决撕裂的办法之一

155#
kingyesx1  楼主| 发表于 2021-2-27 14:02 | 只看该作者
本帖最后由 kingyesx1 于 2021-2-27 14:04 编辑

嗯。回到我之前的意思吧

60HZ的显示器只能看到60帧。
高出来的帧呢会被合成1帧来输出(I朋友的观点)
又或者我的观点,2帧变成1帧(当前前后缓存上的帧的一部分或全部)

这60帧能构成1秒的动画,但这60帧里面有分撕裂(缓存和显示器不同步)和没撕裂的帧(垂直同步)
就这样
如果觉得60帧里面带撕裂的帧对人有帮助,那高于刷新率的帧有意义。你们的观点我的观点就是带撕裂的帧对人无帮助。高于刷新率的帧没意义。我的观点
156#
印第安纳琼斯 发表于 2021-2-27 15:36 | 只看该作者
kingyesx1 发表于 2021-2-27 07:32
没上限不停传输整帧的数据就会有我説的传输率上限的问题你可以算一下你説的模式所需要的传输上限是多少, ...

要不给我看下你的传输率计算公式?
157#
kingyesx1  楼主| 发表于 2021-2-27 15:53 | 只看该作者
印第安纳琼斯 发表于 2021-2-27 15:36
要不给我看下你的传输率计算公式?

分辨率啊
1920*1080*32bit,1帧数据应该是64MBit吧。
158#
印第安纳琼斯 发表于 2021-2-27 17:49 | 只看该作者
本帖最后由 印第安纳琼斯 于 2021-2-27 17:57 编辑
kingyesx1 发表于 2021-2-27 15:53
分辨率啊
1920*1080*32bit,1帧数据应该是64MBit吧。

小写的64Mbit。码率单纯计算,拿1080P120Hz为例,1920*1080*32*120=7.96Gbps,而HDMI1.4的带宽最高是10.2Gbps。实际上被设定在8G多一点,所以某显示器用HDMI线最高只能用120刷不能设置144,要上144刷就得用带宽更高的DP线。传输是用多对线一起传。每对极限3.4Gbps,故每路的信号频率并没突破物理上限不至于爆炸。

多帧缓存是针对垂直同步的,不开垂直同步就不存在几重缓存的问题,如果游戏不限制上限,显卡够强可以每秒刷它个几百次。

如果问撕裂的帧能不能加强手感?我的看法是有时能有时不能。因为只能看到最新画面的一半,或许这就是60帧显示器之下技术发挥“不滑”咯。之前谈过实践经验,60HZ虽然不能突破限制,但手感依然需要FPS游戏内部跑到100帧才舒服。

从手感好坏靠视觉反馈的基础上看,由于偶尔有半帧画面是离“最新战况”比较近的,因此这部分视觉仍然可以被感知,但不稳定。

从某些游戏设定最高100帧锁帧可以大胆猜测,100帧就是经过大量实践得到的折中方案,100帧是手感平滑的分水岭。(60帧是视频平滑的分水岭。)

而加倍到200Hz,即使在120帧的显示器上,由于已经超出分水岭,绝大部分情况应该对比不出来或差距细微,测试人自己都没有把握。而在60刷新的显示器上继续讨论200Hz显然失去了意义。
159#
Ivanonline 发表于 2021-2-27 18:31 | 只看该作者
刚刚去了一个朋友那里,他是专门搞软件,写代码的那种。前期开发过好几个手游。我专门问了问他这个问题。他说像他这种搞软件的,具体的工作就是把数据丢进帧缓存里面。之后之后如何显示到显示器上。他也不是太清楚。

160#
StormBolt 发表于 2021-2-27 18:41 | 只看该作者
算了,怎么说都能回去,我就不继续了。

有其他人有兴趣我可以继续
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部