【GM】Windows Updateの影響でFPSが下がる問題

いつからか Windows Update の影響で GMS と GMS2製のアプリケーションが処理能力に余裕があるにもかかわらず、30~40FPSに落ちる現象が起きるようになりました。

アップデートの影響でスレッドのスケジューリング処理が変わり、GameMaker との相性が悪くなったのが原因とのこと。

詳細は下のスレッドを参照。
forum.yoyogames.com

本記事ではその解消方法を開発側とユーザー側で分けて書いていきます。



開発側

Sleep Margin

Sleep Margin はフレームレートを調整するためのSleep関数までの間隔です。この値を調整することで解消されます。

Sleep Margin の詳細は下のスレッドを参照。
forum.yoyogames.com


Sleep Margin はオプションから調整可能です。

GMS の場合は Global Game Settings の Windows タブから、

f:id:shuntaendo:20210222145504p:plain:w500


GMS2 の場合は Game Options の Windows から、

f:id:shuntaendo:20210222145930p:plain:w500

GMS では 1ms、GMS2 では 10msがデフォルト値になっていますが、Windows のゲームでは 15~25ms が好ましいとされてるようです。ちなみに 10ms でも特に問題なさそうでした。




外部ライブラリ

有志の方がこの問題を解消するライブラリを作ってくださっています。

github.com


こちらのDLLをパッケージに含めることで解消されます。

GMS の場合は Included Files からファイルを指定。

f:id:shuntaendo:20210222170109p:plain:w300


GMS2 の場合は Extentions からファイルを指定。

f:id:shuntaendo:20210222170420p:plain:w400


開発時はエンジンがあるディレクトリにDLLを配置すればおkです。
Steam から GameMaker を起動してる場合は『ローカルファイルを閲覧』から開けます。

f:id:shuntaendo:20210222171326p:plain:w400




ユーザー側

外部ライブラリ

"開発側" でも記述しましたが、有志の方が作ったライブラリでユーザー側でも解消可能です。

github.com

基本的には上のリンクからDLLをダウンロードして、EXEファイルと同じディレクトリにDLLを配置すればおkです。

f:id:shuntaendo:20210222174335p:plain:w300

ただ、アプリケーションすべてがパック化されているケースでは上記方法でDLLが読み込まれません。
GMSではアプリケーションを出力する方法として以下の3つがあります。
1.Zip化
2.インストーラー化
3.すべてパック化

GMS2 では1と2の方法のみ出力可能です。
GMS製で且つパック化されているもの以外は上記方法で可能です。(独自でパック化していなければ)
EXEと同じディレクトリに data.win や他のDLLがある場合はパック化されていない可能性が高いです。

パック化されている場合でもZipと同じように解凍すればDLLを読み込めるようになります。




NVIDIA の垂直同期設定

これは上記の問題とは少し違いますが、この方法でも軽くなるケースがあるので書いておきます。
グラフィックボードがNVIDIA系の場合は以下の手順で解消される可能性があります。


1.デスクトップで右クリックから NVIDIA コントロールパネル

f:id:shuntaendo:20210222183022p:plain:w250


2.3D設定管理 → プログラム設定

f:id:shuntaendo:20210222183236p:plain:w700


3.垂直同期項目を設定
設定するアプリケーションを選択し、『垂直同期』を『なし』もしくは『高速』にすると解消されるケースがあります。
(アプリケーションがプルダウンメニューに出てこない場合は『追加』から指定します)

f:id:shuntaendo:20210222183806p:plain:w600





以上です。
不明点等あれば気軽にコメントもしくは直接連絡いただければ!