ゲームラグ白書 › L1 クライアントのゲームプロセス
フレームタイムのスパイク Frame hitch
原因ID cg-hitch · 主担当 ゲーム開発チーム・クライアント開発
図と実験のあるメインページでこのカードを開く →
1フレームの計算に普段の数倍の時間がかかり、画面が一瞬止まります。
なぜ スキルエフェクトの急増、大量スポーン、UI全体の更新が1フレームに集中 → すると 16.7ms以内に終わらず、50〜300msかかる → 画面では 画面が一瞬止まり、次のフレームで全員が一気に動く
- 症状
- カクつき, フリーズ
- 要因
- ストール
- 誰に起きるか
- 自分だけ
- いつ
- 人が集中したとき, 特定の操作をしたとき, ときどきランダムに
- 担当
- 主担当 ゲーム開発チーム・クライアント開発
- ゲーム開発チームの対応
- 重い処理を複数フレームに分散、プロファイラーで跳ねるフレームを特定、エフェクト数の上限設定。
- 数値の目安
- 60FPSの1フレームは16.7ms。50msを超えるフレームが1つあるだけでも「カクついた」と感じやすくなります。
- グラフでは
- 不定期なスパイク · フレームタイム
- 確認箇所
- PresentMonで、プレイ中のフレームタイム(FrameTime)と、そのフレームにCPU・GPUが費やした時間(CPUBusy・GPUBusy)を記録。モバイルはAndroid vitalsの低速セッション・低速レンダリングのメトリクス
- 該当する場合
- 普段は16.7ms前後のフレームタイムが50ms超に跳ねる瞬間が、スキル演出・大量スポーン・UI全体の更新と重なる。その瞬間もPingは変わらない
- 該当しない場合
- フレームタイムは安定しているのに他のキャラクターだけが一瞬止まるなら、「補間バッファがないか短い」のようなネットワーク側。跳ねる間隔が規則的なら、まず「クライアントのガベージコレクション」を確認
- 確認手段
- ユーザー側の環境で確認
出典
- Slow rendering Android (Google)
60FPSを出すには1フレームを16ms以内に描画する必要があり、遅れるとフレームが飛ばされてカクつき(jank)として見える - Slow Sessions (games only) Android (Google)
Android vitalsは、ゲームのフレームが50ms(20FPS)・34ms(30FPS)を超えると低速フレームとみなす - PresentMon Capture Application (README-CaptureApplication.md) Intel
FrameTime(フレーム間のCPU時間)、CPUBusy・GPUBusy(そのフレームの生成にCPU・GPUが費やした時間)
あわせて読みたい原因
同じ層:L1 クライアントのゲームプロセス
同じ症状(カクつき)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る