ジッターとスタッターの解消

ジッターとスタッターとは何ですか?

ジッター および スタッター は、フルスピードで実行している場合でも、ゲームに影響を与える可能性のある画面上のオブジェクトの目に見える動きに対する2つの異なる変化です。これらの効果は、ランナーやプラットフォーマーなど、世界が一定の方向に一定の速度で移動するゲームでほとんど見られます。

それぞれを区別する

それらの効果を示さずに通常のフレームレートで実行されているゲームはスムーズに表示されます:

../../_images/motion_normal.gif

*ジッター*を示すゲームは非常に微妙な方法で絶えず揺れます:

../../_images/motion_jitter.gif

最後に、スタッター を呈するゲームは一見滑らかに見えますが、数秒ごとに 停止 または*ロールバック* をおこします。

../../_images/motion_stutter.gif

ジッター

ジッターの原因は数多くありますが、最も一般的なものは、ゲームの 物理周波数 (通常は60Hz)がモニタのリフレッシュレートとは異なる解像度で実行されたときに起こります。モニタのリフレッシュレートが60Hzと異なっているかどうかを確認します。

This is generally not a problem, given that refresh rates higher than 60 Hz are barely visible to the human eye, and starting with Godot 3.1, a frame timer was introduced that tries to synchronize with refresh as well as possible.

場合によっては、一部のオブジェクトのみが揺れているように見えます(文字または背景)。これは、異なるタイムソースで処理された場合に発生します(1つは物理ステップで処理され、もう1つはアイドルステップで処理されます)。Godot 3.1では、キネマティックボディを通常の_processループでアニメーション化できるようにすることや、フレームタイマーをさらに修正することまで、いくつかの改善を加えています。

注釈

You can use physics interpolation to mitigate physics-related jittering. See lawnjelly's smoothing-addon for an add-on that can be dropped into any project to enable physics interpolation.

スタッター

スタッターは、2つの異なる理由で発生する可能性があります。最初の、そして最も明白なものは、ゲームがフルフレームレートのパフォーマンスを維持できないことです。これを解決することはゲーム固有の命題であり、最適化が必要です。

2つ目はより複雑です。これは、多くの場合、エンジンやゲームではなく、実行基盤のオペレーティングシステムに関連付けられているためです。さまざまなOSでのスタッターに関する情報を次に示します。

Windows

Windowsは、ウィンドウで動作するゲームでスタッターを引き起こすことが知られています。これは主に、インストールされているハードウェア、ドライバーのバージョン、および並行して実行されているプロセスに依存します(たとえば、多くのブラウザタブを開いていると、実行中のゲームの動きが途切れることがあります)。

これを完全に排除するには、ゲームに「タイムクリティカル」になるための完全な権限を与える必要がありますが、これはお勧めしません。一部のゲームはそれを行う場合がありますが、この問題に耐えることを学ぶことをお勧めします。この問題はWindowsゲームでは一般的であり、また、ほとんどのユーザーはウィンドウでゲームをプレイしません(ウィンドウでプレイされるゲーム、たとえばパズルゲームでは、通常、この現象は問題にされません)。

フルスクリーンの場合、Windowsはゲームに特別な優先順位を与えるため、スタッターは表示されなくなり、非常にまれになります。これが、ほとんどのゲームのプレイ状態です。

Linux (X11)

スタッターはデスクトップLinuxで表示される場合がありますが、これは通常、個別のビデオドライバーとウィンドウマネージャが原因になります。Nouveauドライバーはしばしばこれを示しますが、AMDまたはNVidia独自のものは示しません。一部のウィンドウマネージャもこの問題を引き起こす可能性があります(KWinなど)。そのため、別のウィンドウマネージャを使用して原因を除外することをお勧めします。

ドライバーまたはウィンドウマネージャの開発者に問題として報告する以外に、ドライバーまたはウィンドウマネージャによるスタッターに対する回避策はありません。

macOS

一般的に、macOSはスタッターが発生しませんが、最近はフルスクリーンで実行しているときにいくつかのバグが報告されました(これはmacOSのバグです)。この動作を示す機械がある場合は、お知らせください。

Android

一般に、Androidは実行中のアクティビティがすべて優先されるため、スタッターとジッターがありません。ただし、問題のあるデバイスが存在する可能性があります(古いKindle Fireはその1つであることが知られています)。Androidでこの問題が発生した場合は、お知らせください。

iOS

iOSデバイスは通常、スタッターがありませんが、新しいバージョンのオペレーティングシステムを実行している古いデバイスでは問題が発生する場合があります。これは一般的に避けられません。

スタッターまたはジッターの問題の報告

上記の理由のいずれでもないスタッターまたはジッターの問題を報告する(issueを開く)場合は、デバイス、オペレーティングシステム、ドライバーのバージョンなどについて可能な限りすべての情報を明確に指定してください。

また、発生した動作に基づいて正しい用語(ジッターまたはスタッター)を使用するようにしてください。これにより、問題をより迅速に理解できます。問題の再現に使用できるプロジェクトを提供し、可能であればバグを示すスクリーンキャプチャを提供します。