「V-Syncを入れたのに滑らかにならない」「多数の敵を出した瞬間だけカクつく」「_process と _physics_process の使い分けが曖昧」——フレームレートまわりの悩みは、Godotの 描画と物理演算が別々のサイクルで動いている ことを掴むと、驚くほどスッキリ解決します。
この記事では、まずカクつき(ジッター)の 根本原因 を押さえ、V-Syncと max_fps によるフレームレート制御、ジッターを根絶する 物理補間 、そして「計測してから最適化する」考え方まで、図とコードで整理します。
この記事でわかること
- カクつきの正体—— 物理ティック と レンダリングフレーム のズレ
- V-Sync と
Engine.max_fpsによるフレームレート制御- 物理補間 でジッターを根絶する(設定1つ+手動補間)
- 「推測するな、計測せよ」——プロファイラに基づく最適化の順番
なぜカクつくのか:物理ティック vs レンダリングフレーム
Godotのパフォーマンスを理解する鍵は、 物理ティック(Physics Tick) と レンダリングフレーム(Rendering Frame) という、独立した2つのサイクルを区別することです。この2つが 別々の速さで動く ことが、ジッターの直接の原因です。

| 物理ティック | レンダリングフレーム | |
|---|---|---|
| 役割 | 物理演算・衝突判定(_physics_process) | 画面描画・入力(_process) |
| 頻度 | 固定(デフォルト60Hz) | 可変(性能・V-Sync依存) |
delta | 固定値(1 / 物理レート) | 可変値(前フレームからの経過時間) |
例えば物理が60Hz、モニターが144Hzのとき、物理エンジンは1/60秒ごとにしか位置を更新しません。一方で画面は1/144秒ごとに描こうとするので、 複数の描画フレームで物体が同じ位置に留まり、次の物理ティックで突然ジャンプ します。この「階段状の動き」がジッターの正体です。だから「入力や描画は _process、物理的な移動は _physics_process」という 使い分け が基本になります。
フレームレート制御:V-Syncとmax_fps
まずは描画側のフレームレートを制御します。手段は V-Sync(垂直同期) と Engine.max_fps の2つです。
V-Syncモードの使い分け
V-Syncは描画をモニターのリフレッシュレートに同期させ、画面が途中で切り替わる ティアリング(裂け目) を防ぎます。Display > Window > Vsync > Vsync Mode で設定します。
