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 ), : , …
. — , — «».… , «»
( ). , , , ( ).
… «», « », ?
, , . ( , , , .)
-, - … , , . 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 . - . — - . , , .
, , , … . . , :
. — , — «»., . 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 .
. « », . , , , , .
«»
? , . - , ?« »,
. , , , , , Skype .. 3D. , , . .
. , — ?
, GPU , , . , GPU . , , . , .
…
. :) GPU . , GPU . , .