ゲームのデルタ時間と固定タイムステップのラボ

再現可能なフレームスパイク、動きのシミュレーション、追いつきステップ、見える時間差で可変と固定のゲームループを比較します。

フレームパターンを作る

1秒あたりのレンダリングフレーム

スパイクフレームに追加する時間

均一なシミュレーションステップ

実験フィールド

2つの時計、1つの動くオブジェクト

棒グラフはヒッチを示し、線は両方の位置を追跡します。下の線は最終値では隠れるずれを分離します。

実験を更新しました

動きの記録

経過した実時間に対する位置です。破線は均一な固定ステップを示します。

可変デルタの経路固定タイムステップの経路フレームスパイク

可変モデルは現在のフレーム時間で速度を1回適用します。固定モデルは実時間全体を蓄積し、均一なステップで進みます。どちらも性能測定ではありません。

値はこのブラウザーだけに保存され、次回も実験を続けられます。ゲームデータやテレメトリは送信されません。

Zoom 100%
ユーティリティスタジオ

このユーティリティをあなたのサイトに追加しませんか?

WordPress、Notion、またはご自身のサイト向けに、カラーとダークモードをカスタマイズできます。

よくある質問

この固定タイムステップのラボでは何が分かりますか?

同じ動くオブジェクトを、可変デルタ時間のループと固定タイムステップのアキュムレーターで実行します。繰り返し発生するフレームスパイクによって、シミュレーション時間、位置のずれ、追いつきステップをゲームエンジンなしで確認できます。

可変デルタと固定タイムステップの違いは何ですか?

可変モデルはレンダリングされた各フレームの長さを使って一度更新します。固定モデルは同じ大きさのステップで進み、経過した実時間に必要な数だけアキュムレーターから処理します。固定ステップは描画速度への依存を減らしますが、長いフレームでは追加の追いつき処理が発生します。

フレームスパイクの入力値は何を表しますか?

指定したスパイクフレームに追加するミリ秒数です。頻度で何フレームごとにスパイクを入れるかを決められるため、ランダムな計測ではなく再現可能なヒッチを作れます。

デルタの上限を設定すると何が変わりますか?

長いフレームで可変モデルが使うデルタを上限までに制限します。大きなジャンプは抑えられますが、そのモデルのシミュレーション時計は実時間より遅れます。固定アキュムレーターはフレーム全体の時間を引き続き計上します。

これはプロファイラーやプレイテストの代わりですか?

いいえ。指定した数値を使う決定論的な学習と設計のラボです。端末の性能を測定したり、エンジンを診断したり、描画コストをモデル化したり、すべてのゲームに正しいループを証明したりするものではありません。

# ゲームループの中にある時計を理解する

レンダリングされた各フレームは、ゲームに新しい経過時間を渡します。可変デルタのループでは、動きを position += velocity × frameTime のように更新します。フレームが安定していれば平均速度は意図した値に近づきますが、1回の更新はそれを発生させたフレームと同じ大きさになります。ヒッチは単なる映像の停止ではなく、その更新が消費するゲーム時間を変えます。

# 可変積分と固定アキュムレーターを比較する

固定タイムステップのループは各フレームの時間をアキュムレーターに加え、16.667 ms のような選択したステップを繰り返し消費します。シミュレーションには同じ大きさの更新が届き、レンダリングは別のリズムで動けます。余った端数は次のフレームまで残ります。長いフレームでは、経過時間を処理するために複数の小さな更新を実行します。ステップは安定しますが、追いつき処理の負荷が跳ね上がることがあります。
状況 可変デルタの経路 固定タイムステップの経路 検討する判断
安定した描画通常のフレーム時間で1回更新均一なステップで蓄積時間を消費両方が同じ動きに近づくか確認します。
長いフレーム大きな更新でオブジェクトが進みすぎる複数の固定更新で時間に追いつく位置差と追いつき数を一緒に読みます。
異なる描画速度更新サイズがフレームレートで変化シミュレーションステップは一定固定ステップは描画速度への依存を減らします。
デルタ上限上限を超えた時間を無視アキュムレーターは全時間を受け取る時間を失ってもよい場合だけ制限します。

# フレームスパイクの実際の影響を見る

毎秒60フレームでは、通常のフレームは約 16.667 ms です。追加の 80 ms スパイクがあると、1フレームは約 96.667 ms になります。可変モデルはこの時間を1回の更新で消費します。固定モデルは代わりに約6回の 16.667 ms ステップを消費します。経過時間の合計は同じでも、シミュレーション内の経路は異なる場合があります。

# 位置のずれと追いつき処理を一緒に読む

位置差は可変経路から固定経路を引いた値です。2つの積分方針がどれだけ離れたかを示しますが、どちらが自動的に正しいかは決めません。追いつき数は、1つの描画フレーム内で必要だった固定処理の量を示します。大きな位置差は見える動きの違いを示し、多い追いつきステップはCPU予算の問題を示す可能性があります。関連していますが、同じ診断ではありません。

# デルタ上限を方針として扱う

上限は、停止中のタブ、ブレークポイント、深刻なヒッチによってキャラクターが瞬間移動したり、物理ボディがジオメトリを通り抜けたりするのを防げます。その代わり可変時計は実際に経過した時間より遅れます。時間を保つ必要があるゲームでは、固定アキュムレーターなど別の回復方針を使います。ジャンプを抑えて応答性を保ちたい場合は上限が役立ちますが、失う時間を意図して選ぶ必要があります。

# 守るべき仕事に合わせてループを選ぶ

ゲームループの仕事 役立つ初期設定 理由
物理、衝突、決定論的なゲームプレイ固定タイムステップ均一なステップで描画リズムへの依存を減らします。
状態を蓄積しない単純な視覚運動可変デルタ更新が小さく、通常は追いつきキューが不要です。
滑らかな表示を伴うゲームプレイシミュレーション補間付き固定更新シミュレーションのステップを保ち、表示側で端数を隠せます。
深刻な停止からの回復上限付きの追いつき方針1回の悪いフレームが無制限の計算を生まないようにします。

# 繰り返し可能な調整手順を使う

まずスパイクなしで2つの経路が一致することを確認します。再現可能なヒッチを追加し、頻度を変えて見える誤差が蓄積するか安定するかを見ます。速度を変える前に固定ステップを調整し、追いつき数を確認します。最後に上限を有効にし、可変のシミュレーション時間と実時間を比較します。この順序で、ずれの原因と、それを抑える方針を切り分けられます。
この実験で証明できないこと
このラボは指定したフレーム時間と一定の速度を使うため、時間処理を説明するものであり、端末を測定したりエンジンを検証したりするものではありません。実際の物理、入力のサンプリング、ネットワーク、補間、フレーム予算によって最適な設計は変わります。結果を仮説として使い、実際のゲームで確認してください。