判定マトリクス:ゲームエンジンのタイムステップ設計と高FPS時の挙動崩壊
144Hzや240Hzなどの高リフレッシュレートモニター環境で旧世代のゲームや家庭用機からの移植作を起動した際、フレームレートの制限を解除すると、『Skyrim』で馬車が宙を舞い、『Fallout 4』で歩行速度が倍速化し、『DARK SOULS II』で武器耐久度が倍速で損耗するといった致命的な不具合が発生します。
| ループ設計アーキテクチャ | タイムステップ(dt)の実装形態 | 144+ FPS時の動作崩壊 | 代表的なタイトル | 推奨される現代の解決策 |
|---|---|---|---|---|
| 完全固定タイムステップ | dt = 1/60 等の定数固定(実時間計測なし) | ゲーム全体が2.5倍速の早送り状態になり進行不能 | 『Need for Speed Rivals』『大神 絶景版』 | 原則として解除不可。60fpsに制限するか専用減速MODを導入 |
| 未分離の物理サブステップ | 描画のみ解除され、Havok等の物理演算は60Hz前提 | 衝突判定(コリジョン)がすり抜け、皿や岩が弾丸のように吹き飛ぶ | 初期状態の『Skyrim SE』『Fallout 4』 | DLLインジェクション(High FPS Physics Fix)により毎フレーム fMaxTime を動的補正 |
| 描画フレーム数連動カウンター | 耐久度やダメージの判定が「秒」ではなく「描画フレーム数」基準 | 60fps環境では30fps時と比較して武器が倍の速度で損耗する | 『DARK SOULS II』(PC発売初期) | 公式修正パッチの適用、または耐久判定補正プラグインの導入 |
| 現代的なアキュムレータ方式 | 固定物理ステップ(例: 120Hz)+描画補間処理 | 360Hzモニターでも物理破綻なく完璧な滑らかさを実現 | Unreal Engine 5、Source 2等 | エンジン標準で完全対応(追加設定不要) |
物理演算が崩壊する数学的背景
ゲーム内の位置更新式:
新座標 = 旧座標 + (速度 * dt)- 開発者が
dtを0.01666(60fpsの1フレーム時間)に固定していた場合、120fpsで動作させると式が1秒間に120回実行され、ゲーム内の世界が2秒分進んでしまいます(倍速現象)。 - 一方で、
dtを単純な可変値(実フレーム時間)にした場合、フレームレートが一瞬低下してdtが大きくなると、移動量が壁の厚みを超えてしまい**オブジェクトやすり抜け(トンネリング現象)**が発生します。
実践的解除プロトコル(『Skyrim SE』での導入例)
ステップ1:High FPS Physics Fix の導入
- SKSE64 および Address Library が正しく配置されていることを確認します。
- MODマネージャー経由で High FPS Physics Fix を導入します。
- これにより、毎フレームの実際の所要時間に応じてHavokの
fMaxTimeおよびfMaxTimeComplexがリアルタイムに動的書き換えされます。
ステップ2:設定ファイル(.ini)の最適化
HighFPSPhysicsFix.ini を開き、以下の通り調整します:
DisableVSync = true(ゲーム内蔵の低品質V-Syncを無効化)Limiter = trueFPSLimit = [モニターの最大リフレッシュレート - 3](G-Sync / FreeSyncの入力遅延を防止)DynamicUpdateBudget = true(ロード画面の高速化によるスクリプト破綻を防止)