修复抖动和不连贯

什么是抖动和不连贯?

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

它们之间的区别

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

../../_images/motion_normal.gif

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

../../_images/motion_jitter.gif

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

../../_images/motion_stutter.gif

抖动

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

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

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

注解

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

不连贯

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

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

Windows

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

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

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

Linux (X11)

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

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

macOS系统

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

Android

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

iOS

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

报告不连贯或抖动问题

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

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