修复抖动和不连贯

什么是抖动和不连贯?

抖动(Jitter)和不连贯(stutter)是即使游戏在全速运行时,也可能出现在屏幕上物体可见运动中的两种不同变化,可能会影响游戏体验。这些问题在世界以恒定速度朝着固定方向运动的游戏中影响最明显, 比如跑酷或平台类游戏.

它们之间的区别

一款在正常帧下运行, 而不显示任何效果的游戏将显得平滑:

../../_images/motion_normal.gif

游戏展示了抖动将以非常细微的方式持续抖动:

../../_images/motion_jitter.gif

最后, 一款 “不连贯” 的游戏将会显得流畅, 但似乎每隔几秒钟就会 “停顿” 或 “回滚一帧”:

../../_images/motion_stutter.gif

抖动

产生抖动的原因有很多,最典型的情况发生在运行游戏时的物理频率(通常为 60 Hz)以与显示器刷新率不同。检查您的显示器刷新率是否为 60 Hz。

这通常不是一个问题, 因为大多数显示器都是60赫兹, 而且从Godot 3.1开始, 引入了一个帧定时器, 尽量与刷新同步.

有时只有一些对象会出现抖动(角色或背景)。当它们在不同的时间源中处理时,就会发生这种情况(一个在物理步骤中处理,另一个在空闲步骤中处理)。Godot 3.1 版本对此做了一些改进,从允许运动体在规则的 _process 循环中被动画化,进一步修正帧定时器。

备注

你可以使用物理插值来减少物理相关的抖动。请参阅 lawnjelly 的平滑插件,获得一个可以放入任何项目中以启用物理插值的附加组件。

不连贯

产生不连贯的两个不同原因. 第一个, 也是最明显的一个, 游戏无法保持完整的帧速率性能. 这个游戏的具体解决方案是需要进行优化.

第二个原因更复杂, 因为它通常与引擎或游戏无关, 而与底层操作系统有关. 下面是不同操作系统上, 关于不连贯的一些信息.

Windows

众所周知,Windows操作系统在窗口化游戏中会导致不连贯. 这主要取决于您所安装的硬件, 驱动程序版本和并行运行的进程(例如, 打开多个浏览器选项卡, 可能导致正在运行中的游戏出现不连贯). 为了避免这种情况, 从3.1版本开始,Godot将游戏的优先级提升到 “高于标准”. 这也许不能完全消除不连贯现象, 但这种做法有很大的改进.

完全消除这种情况需要给你的游戏以充分的权限, 使之成为 “time critical” , 这是不建议的. 有些游戏可能会这样做, 但建议学会忍受这个问题, 因为这对Windows游戏来说很常见, 而且大多数用户不会在窗口中玩游戏(反正在窗口中玩的游戏, 如益智游戏, 通常不会出现这个问题).

对于全屏来说,Windows系统对游戏给予了特殊的优先级, 所以不连贯现象不再可见, 也非常罕见. 大多数游戏都是这样玩的.

Linux(X11)

在Linux桌面系统上可以看到不连贯现象, 这通常与不同的视频驱动程序和合成程序相关.Nouveau驱动程序经常表现出这一点, 而使用AMD和英伟达的驱动程序却不会出现. 一些组合程序也可能引发这个问题(例如KWin), 我们建议用另一种方法来排除其原因.

对于驱动程序或组合程序出现的不连贯现象, 除了将其作为问题报告给驱动程序或组合程序开发人员外, 没有其他解决办法.

macOS

通常情况下,mac平台不会出现不连贯现象, 尽管最近在全屏运行时报告了一些bug(这是mac平台自身的bug). 如果你有一台机器表现出这种行为, 请将这问题提交给我们.

Android

通常情况下,Android 平台不会出现不连贯和抖动现象,因为运行活动拥有所有的优先级。也就是说,可能会出现问题的设备(较旧的 Kindle Fire 就是其中之一)。如果你在 Android 平台上看到这些问题,请将问题提交给我们。

iOS

iOS设备通常没有不连贯现象, 但运行新版操作系统的旧式设备可能会出现问题. 这通常是不可避免的.

报告不连贯或抖动问题

如果您报告的不连贯或抖动问题(开启一个问题)不是由上述原因引起的, 请尽可能详细说明关于您的设备配置, 使用的操作系统, 以及驱动程序版本等信息. 这有助于我们更好地排除故障.

还要确保根据所展示的行为使用正确的术语(抖动或不连贯). 这有助于更快地理解您的问题. 请提供可用来复现问题的项目, 如果可能的话, 还需要您提供一张屏幕截图来阐述这个bug.