难以捉摸的帧定时问题


Croteam的技术总监Alain Ladawach曾参与“严重Sam和Talos Principle”的开发,他讲述了即使在最强大的机器上,他也设法找到导致图形速度下降的原因。

最后,出现了关于为什么某些游戏在您的PC上速度变慢的解释(以及一线希望,它们在不久的将来将不再变慢)。

TT刹车


您期待着您最喜欢的PC视频游戏系列的下一部分,它终于问世了。 这次您想完整地享受它,因此您花费了金钱和时间进行了充分的准备。 您更换了处理器,安装了超现代的图形卡,添加了更多RAM-甚至还购买了SSD上的RAID。 从屏幕保护程序本身来说,游戏应该流畅。

最终预订已解除锁定,您已经完成安装。 出于紧张的期望,您是第一次开始游戏。 到目前为止,效果很好-它以每秒60帧的速度运行。 或至少这就是GPU调谐器帧计数器所说的。 但是出了点问题。 您可以使用鼠标进行急剧,混乱的动作。 左右绑带,然后游戏...开始放慢速度! 该死,这怎么可能? 如何以每秒60帧的速度慢下来?

如果您从未发生过这种情况,那么这似乎很荒谬。 但是,如果您经历过,那么您很可能会全心全意地讨厌刹车。 游戏中的刹车。 这不是一个很好的旧“滞后”。 帧率不低。 这些只是在理想的超高速机器上以高帧速率发生的“刹车”。 这是什么,它们来自哪里,以及如何摆脱它们? 让我告诉你一个故事...

刹车,平滑度,速度...它们是一回事吗?


自70年代第一台街机游戏机问世以来,视频游戏就以60 fps的速度运行。 通常期望游戏以与显示器使用相同的频率运行。 这是在3D游戏普及之前的,这是降低的帧率首次成为可以接受的。 在90年代,当“ 3D卡 ”(在我们成为“ GPU ”之前我们称呼它们)开始取代软件渲染时,人们以20 fps的速度玩游戏,而35 fps的速度被认为是严肃的网络战的不错的价值。 我不是在开玩笑

今天,我们拥有超高速汽车,“ 它们当然可以60 fps的速度工作 ”。 但是,对用户游戏速度感到失望的用户数量永远不会增加。 这怎么可能? 问题不是游戏不能足够快地运行,而是即使它们可以快速运行也放慢速度

如果您阅读其他游戏论坛,您肯定会找到类似的消息:

图片

您可能会认为这是单个问题,但请查看Google搜索查询的统计信息:

图片

在过去的五年中,刹车(结巴)已成为(相对)比速度更严重的问题!

(请注意,这些是相对值。它们并不意味着通常人们对制动的要求要比对帧速率的要求高。它们意味着帧速率请求保持在同一水平,并且制动请求的数量正在增加,尤其是最近。)

寻找莫名其妙的刹车的原因十年


图片

患者比死者更有生命,只是放慢了一点。

我最早在2003年遇到此问题。 我们使用了“ 严重Sam 2” ,并且用户开始向我们发送报告,他们在空的水平上测试了某些东西,并且在移动鼠标时,移动不平稳。 这伴随着帧速率图上非常有特色的模式,我们称之为“心电图”。

我们以为代码中的某个地方存在错误,但是找不到它。 似乎问题出现并随机消失了-重新启动应用程序后,重新启动机器...然后播放器更改了某些速度选项,然后消失了。 然后,播放器再次打开了此选项,但是问题没有再出现。 她看起来像个鬼。

显然,这个问题不仅出现在我们身上。 看着其他游戏中的相同问题,我们开始认为应该归咎于车手。 但这发生在不同制造商的视频卡上。 即使在不同的API(OpenGL,DirectX 9,DirectX 11 ...)上,它们唯一的共同点就是它们出现在不同的机器上,有时在某些场景中。

图片

内西,大脚怪……几乎与“心电图”问题一样难以捉摸。

我们又发布了几款游戏,但是这种奇怪的行为仍然出现并消失了。 它使某些用户感到烦恼,我们建议他们更改速度选项-有时会有所帮助,有时却无济于事。 那就是生活,不是吗?

但是有一天,在2013年初的一个冬日里,我的同事Dean打电话给我,看看这个问题的另一个例子,他当时可以相对稳定地重现该问题。 这次问题出自严重萨姆3的水平。 我们在此场景中尝试了各种选择,直到突然间我意识到。 我明白是什么原因! 她很简单-难怪她离开了所有人十几年了。

通过仅更改游戏引擎的一个非常简单的选项,我们就可以使该问题在该特定场景中出现和消失。 但是对于我们来说,立即显而易见的是,为其高质量的解决方案需要付出很多努力。 每个人不仅在我们方面,而且也在整个PC游戏生态系统中做出努力-GPU驱动程序程序员,API开发人员,OS供应商。

让我解释一下。

这一直是什么原因


我想向您展示一个例子,来自Dean和我五年前就探索过的《 Serious Sam 3》。 甚至更好-以“ Serious Sam 2”中的测试场景为例,我们首先在其中看到它。 但是,不幸的是,在替换了“铁”之后,这种难以捉摸的野兽可以移动到另一个场景。 我有一个来自Talos Principle的场景,最近我设法重现了这个问题,并且拍摄了一些视频,使我可以对其进行更详细的分析。

但是在开始之前,请确保您实际上以60 fps的速度观看视频。 要查看以下示例,请切换到1080p60,如图所示:

图片

要以60 fps观看视频,请以1080p60切换到YouTube。

如果正确执行所有操作,并且计算机和Web浏览器能够以60 fps的速度显示视频,则下面的视频应平稳播放且没有任何制动。 如果不是这样,那就是我们谈论它的原因-许多其他应用程序也展示了这种行为,而不仅仅是游戏。 目前,我只能建议您尝试在其他计算机上观看视频,或者只是阅读文字。


检查,检查,一,二,三...您应该以流畅的60 fps观看此视频。

现在让我们开始做生意。 如果遇到刹车,则很可能看起来像这样:


« 60 fps». «».

, «», 60 fps. - , , « ». , ( , - «» ). « », , - , . 60 fps, « ». ( , , .)

(«»), YouTube . (), . , . , , …



, ? ? , ?..

, , , !

?


. «», 1/20 , :


60 fps, «». 20 .

: -, — , . -, - - — «» , , .

: — — — «»… «» . , ?

(, ( 1/10 000 ), : , …

image

. — , — «».

… , «» ( ). , , , ( ).

… «», « », ?

, , . ( , , , .)


-, - … , , . NTSC, 60 , 60 fps, PAL/SECAM, 50 , 50 fps. - « ».

, — , " ", ZX Spectrum, C64, Atari ST, Amstrad CPC 464, Amiga .. , , , 100% , .

«». , , . , Sonic The Hedgehog Sega Genesis , , 16 . PAL NTSC, 50 fps 60 fps. , .

— , PC «» — , . , . 3D-, , . , — , … . , .

, . ( , «» - , .)

, , . 1/60 (16,67 ), 10 /, 1/6 . 1/60 , 1/30 (33,33 ), 1/3 ( «») , .

? , . , . , . 90- ( «35 fps » ), . ( , GPU) «» «», . 3D-, . , .


GPU, "". , GPU - , GPU , , GPU . , GPU, « », GPU . - . — - . , , .

, , , … . . , :

image

. — , — «».

, . 16,67 ( 1/60 ), , , . () , 24,8 ( 1/60 ), , … , , 10,7 , , - . ( .)

: , , , , PC. , 60 fps, - , . - GPU 60 fps .

— , («») .

, , — , .

. ( , — , ?), :


«», , .

«». «» , !

? Serious Engine sim_fSyncRate=60. , « , 60 fps». — , ! , — , .

? ?

?


— . . , 60, 60 — PC : - , GPU/… — .

, , , — - . ?

, / , .

, ? , — !

, . , API. , , , . , , API , : , . , , .

?


, . API. Vulkan API VK_GOOGLE_display_timing, proof of concept. , Android Linux.

API. ? , .

, Croteam , , .

, , The Talos Principle .


. « », . , , , , .

«»


image

? , . - , ?

« », . , , , , , Skype .. 3D. , , . .

. , — ?


, GPU , , . , GPU . , , . , .


. :) GPU . , GPU . , .

Source: https://habr.com/ru/post/zh-CN419043/


All Articles