はじめに
以前、自作ゲームがフレーム落ちする問題を取り上げました。
【C#】謎のフレーム落ち問題を解消したくタイマーを自作した話
今回は、これがグラフィックドライバの更新で改善したことの報告です。
詳細
AMD Software: Adrenalin Edition バージョン 25.3.1(2025/02/25)
このバージョンから AMD Install Manager や AMD Chipset Software が導入されました。
垂直同期がカクつく問題(Radeon 680M)が改善しました。タイマーで 60FPS 固定にしても稀にコマ落ちが発生して悩んでいたので大変助かりました。
おまけの報告として、動画再生時にしばらくマウス操作しない場合に動画のフレームレートが落ちる問題(Radeon 780M)が改善しました。これの原因はよくわかりません。別の PC でこの現象が発生していたので Radeon 780M 特有のものか、おま環かもしれません。いずれにせよ改善したので👍️
あれこれ
なんの根拠もない考えですが、この手のフレーム落ちは省電力機能の影響かもしれません。一般的なアプリだとフレーム落ちしても気づかないことが多く、レンダリングを省略してバッテリーを節約していると見ています。
特にノート PC やモバイルではバッテリーの持ちはかなり重要なセールスポイントです。近年は Intel や AMD ほかのモバイル系 CPU が強力になっています。
特にモバイル系の組み込み GPU の描画能力は飛躍的に強化されていて、その分ソフト的に複雑になったのかもしれません。
CPU/GPU には AI 用の機能のあるモデルもあり、どんどん複雑になっています。
主要 CPU スコア https://pcfreebook.com/article/458629156.html
主要 GPU スコア https://pcfreebook.com/article/458753320.html
自作したタイマーは今後も使いそう
var waiter = new ValueFpsWaiter();
waiter.Fps = 60f;
for (; ; )
{
this.DoWork();
waiter.Wait();
}
そもそもゲームエンジンを 60FPS 前提で作ってしまったため、フレームレートの高いモニター(90Hz とか 120Hz とか)では正常に動作しませんでした。アプリ側でわざわざフレームレートを落とす必要があるという・・・
おわりに
この手の不具合は環境ごとに違うため、大変だなという感想です。大手の PC ゲームも「ゲームが起動しない」「フレームレートが安定しない」ことがあることを目にしますが、自分で踏んでみて「ああ大変なんだな」と実感しました。
ある種の割り切りも必要で、動けばいいを方針になるべく沼らないようにしようと思います。