失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 回答一下这些游戏帧数有关的问题吗?

回答一下这些游戏帧数有关的问题吗?

时间:2023-10-22 20:08:04

相关推荐

回答一下这些游戏帧数有关的问题吗?

回答一下这些游戏帧数有关的问题吗?

1)游戏帧数在60以下的时候是否需要开启vsync?如果开启会带来什么样的影响?

在国外论坛看到有人提起会引起frame stutter,有人能具体解释一下这个是怎么回事吗?

2)画面撕裂的现象是不是只会出现在帧数大于60的情况中(显示器60hz)?我有一个游戏一般玩起来也只有30帧不到,为什么还会有画面撕裂?是怎么引起的?

3)当游戏帧数无法被60整除的时候,刷新率与帧率的关系又是怎样的呢?

比如60帧时,一赫兹对应一帧,也即显示器上一幅图就是游戏一幅图

60帧时,两赫兹对应一帧,即显示器上两幅图是游戏一幅图

但是当帧数是45帧时呢?此时即显示器上4幅图对应游戏三幅图,但是具体对应关系是怎样的呢?是AABC,还是ABBC,还是ABCC呢?

以及其他帧数时的情况,比如20~30帧时的情况

=====

4)承接第三问,是否因为显示器刷新的原因才限制了游戏帧数的选择性。假如说一个显示器刷新率是96hz,是否可以在不影响观感的情况下游玩48fps的游戏? 2 条评论 分享 按投票排序按时间排序

3 个回答

知乎用户,知乎「知乎老抽 Club」创始人

叶浩标、知乎用户、知乎用户等人赞同 先解释一下基础知识。VSync虽然现在有很多更高级的技术,但基本实现的方法都是一样——先把画面渲染完,然后再贴到显示帧缓冲里。没有VSync的时候,画面直接渲染到帧缓冲,同时显卡也在从帧缓冲里拿数据显示到显示器,由于渲染往往比显示慢,于是常常没有完全渲染完的画面就被显示出来了,就导致画面撕裂——显示的一帧中可能包含渲染的两帧中的各一部分。

然后一个个问题回答:

1)游戏帧数在60以下的时候是否需要开启vsync?如果开启会带来什么样的影响?
如果你观察到了明显的画面撕裂,就需要。开启了就不撕裂了。当然还会有一些其他的影响,底下针对你的问题回答。

在国外论坛看到有人提起会引起frame stutter,有人能具体解释一下这个是怎么回事吗?
这主要是VSync的实现方式导致的。容易想到,显示器的刷新率是不好变的,60Hz就是60Hz,以前也没有技术去变。那么如何实现每次都是画面渲染完再显示到显示器呢?只好让渲染去等显示器了。举个例子,比方说我渲染一帧需要1.5次刷新的时间,那么在显示器刷新第一次的时候画面没有变,第二次变了显示出在1.5次刷新时渲染的画面,然后第三次又变了显示出在第3次刷新时渲染完成的画面,然后第四次刷新画面又不变了因为此时没有渲染完成的画面……如此就导致你看到的画面不动->动->动->不动->动->动->不动->动->动->不动…………

而且要注意的是,你在每个第二次刷新的时候看到的是第1.5次刷新时渲染的画面,也就是说第二、三次刷新之间你看到的渲染画面体现的时间变化比实际过去的时间长,更加剧了这个画面变化的时间上的不均匀性。这就是Frame stutter了。

2)画面撕裂的现象是不是只会出现在帧数大于60的情况中(显示器60hz)?我有一个游戏一般玩起来也只有30帧不到,为什么还会有画面撕裂?是怎么引起的?
不是。根据开头的基础知识,如果你运气够背每次画面刷新都正好在渲染到一半的时候,那么你每次都会看到撕裂的画面。

事实上,一般来说如果你的渲染速度受到性能的限制,你几乎一定会看到撕裂。因为渲染很难在刷新时正好完成一帧,多数时候刷新时渲染都只进行到一帧的一部分。

3)当游戏帧数无法被60整除的时候,刷新率与帧率的关系又是怎样的呢?

比如60帧时,一赫兹对应一帧,也即显示器上一幅图就是游戏一幅图

60帧时,两赫兹对应一帧,即显示器上两幅图是游戏一幅图

同上一问,就算你的渲染速度和刷新率都是60Hz,你仍然有很大可能看到撕裂,比方说刷新正好和渲染错开了半个帧的时间,那你每次看到的画面都将是上下在不同帧的。倍数关系的时候类似,你仍然有可能运气不好结果每次整倍数刷新的时候仍然错开了渲染完成时间,导致你始终看到的都是撕裂的画面。

但是当帧数是45帧时呢?此时即显示器上4幅图对应游戏三幅图,但是具体对应关系是怎样的呢?是AABC,还是ABBC,还是ABCC呢

以及其他帧数时的情况,比如20~30帧时的情况

我猜你想问的是渲染速度45FPS,而刷新率60Hz?

还是上面的答案,取决于你的运气。

你要意识到,渲染发生的时间不是按照刷新率来定的,最小时间单位不是一次刷新时间,所以很可能渲染周期和刷新周期恰好差开了几分之一个刷新周期,导致总是产生画面撕裂。

如果假设两个周期同步了,那么这种情况下你看到的画面是AABCD(从0时间开始5个采样点的画面,跨越4个刷新时间)。

4)承接第三问,是否因为显示器刷新的原因才限制了游戏帧数的选择性。假如说一个显示器刷新率是96hz,是否可以在不影响观感的情况下游玩48fps的游戏?
根据以上答案,没有这样的关系。

假如我们不考虑显示器刷新率所带来的问题,30~60帧到底是什么感受呢

另外,为什么视频播放受显示器刷新率的影响没有这么大呢?我看视频也有48帧格式的情况

这两个问题可以一起回答。简单说,虽然人眼看超过24帧的画面就感觉是连续的,但是这里有两个隐藏条件——1、画面变化必须够小,反例你可以想象一下高速闪烁的红蓝画面,120Hz以下你看到的不可能是紫色;2、刷新速率必须稳定,同样是24fps,如果前半秒刷新1帧后半秒刷新23帧肯定看起来不是连续的。

所以假设这么一台完美设备,它画面更新率可以30fps也可以60fps,那么如果它的动画变化足够小,即使30fps你看到的画面也是细腻流畅的。如果有些画面变化特别大,那么有可能需要将速度提升到一定程度,比方说60fps,使得相邻两帧变化小到让人感觉到是连续的。

这也是播放视频为什么刷新率没有感觉的原因,一来视频播放的刷新率比较稳定,二来视频本身对于变化已经做了模糊,所以画面变化显得流畅。这也是为什么很多游戏开启VSync之余还提供了“Motion Blur”的效果。编辑于 -11-148 条评论感谢 分享 收藏•没有帮助• 举报 •作者保留权利

知乎用户,低善友,正经侠,抠脚汉,不如汪。

没有人、知乎用户、知乎用户等人赞同 你的这些问题都可以归结到一起。就是帧缓存被读取的时候,只要没画完,就都可能会撕裂。

比如你说你就是60FPS,但是可能你每一帧都没合上拍子,那就没用。发布于 -11-124 条评论感谢 分享 收藏•没有帮助• 举报 •作者保留权利

邓鋆,天地之灵,游戏程序员,引擎工程师,游戏…

没有人、知乎用户、知乎用户赞同 @沈万马说的大部分就是原因了,补充一个细节。

“没有VSync的时候,画面直接渲染到帧缓冲,同时显卡也在从帧缓冲里拿数据显示到显示器。”

应该不是这样,现在正常的渲染流水线里,不管有没有VSync,渲染都是渲染到后备缓冲区,然后被贴(或交换)到真正的显示缓冲区里。(按照我的理解,全屏是交换,窗口模式是“贴”)

不然的话,你看到的就不是偶尔出现的撕裂,而是很明显的画面上处于前景的物体在闪烁。

早期ddraw/GDI/甚至是DOS游戏编程的时候有很多初学者都会犯这样的错误。

应该是贴或者交换的过程 刚好是显示器刷新的时刻。编辑于 -11-172 条评论感谢 分享 收藏•没有帮助• 举报 •作者保留权利

如果觉得《回答一下这些游戏帧数有关的问题吗?》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。