RPGツクールMVのver1.3.1が公開されてからしばらく経ちました。描画エンジンのバージョンアップに伴い、パフォーマンスやメモリ問題について改善された部分はたくさんありますが、一方で新たな問題も散見されていて、私の元にもパフォーマンスについてご質問、ご相談を寄せられる機会が増えてきています。
正直に言うと、私のプラグインが1.3.1に最適化されていない部分も多々ありまして、それも含めて対応可能な箇所は対応を進めているところです。
その調査過程で見付けたのが、「ウィンドウカラーを変更すること」によるリスクです。ウィンドウカラーはデータベースの「システム」もしくはイベントコマンドで変更できます。しかし、結論から言うと少なくともver1.3.1ではカラーは0,0,0から変更しない方が無難と言わざるを得ないのです。
まずは、以下の測定結果をご覧ください。
測定結果
パフォーマンス調査にあたり、様々なタイミングやフレーム更新に掛かる時間を測定するプラグインを作成(ブログの最後で紹介しています)して、それを利用して測定しています。ゲームを起動して、以下の手順で操作を実行しました。
- ゲーム起動
- ニューゲームを選択
- メニュー画面を開く
- スキル画面を開く
- 3.と4.を繰り返す
これらの動作を条件を変更して合計三回、実施したのが以下の表になります。すべてWebGLモードで計測プラグイン以外は適用していません。
- v1.3.1でウィンドウカラーをデータベースから変更している。
- v1.3.1でウィンドウカラーをデータベースから変更していない。
- v1.2.0でウィンドウカラーをデータベースから変更している。
ウィンドウカラー変更の有無による処理時間の違い
v1.3.1(変更あり) | v1.3.1(変更なし) | v1.2.0(変更あり) | 計測対象 |
---|---|---|---|
12.8MS | 17.8MS | 12.2MS | シーン遷移 to Scene_Boot |
46.7MS | 59.9MS | 44.3MS | シーン遷移 to Scene_Title |
214.8MS | 210.2MS | 185.9MS | 背景キャプチャ作成 |
216.1MS | 211.4MS | 187.1MS | シーン遷移 to Scene_Map |
111.4MS | 65.6MS | 111.5MS | マップ表示オブジェクト作成 |
69.2MS | 68.4MS | 38.1MS | 背景キャプチャ作成 |
130.8MS | 103.1MS | 115.2MS | シーン遷移 to Scene_Menu |
129.7MS | 78.6MS | 108.1MS | シーン遷移 to Scene_Skill |
60.9MS | 22MS | 71.3MS | シーン遷移 to Scene_Menu |
127MS | 69.2MS | 142.3MS | シーン遷移 to Scene_Skill |
59.4MS | 22.3MS | 42.7MS | シーン遷移 to Scene_Menu |
107.3MS | 62.1MS | 158.2MS | シーン遷移 to Scene_Skill |
62.9MS | 21MS | 94.7MS | シーン遷移 to Scene_Menu |
100.8MS | 32.3MS | 135.8MS | シーン遷移 to Scene_Skill |
49.4MS | 19.5MS | 54.9MS | シーン遷移 to Scene_Menu |
114.2MS | 31.1MS | 103.7MS | シーン遷移 to Scene_Skill |
ウィンドウカラーの変更が存在する場合、メニュー画面からスキル画面への遷移がおよそ60ミリ秒ほど遅延しているのが分かると思います。60ミリ秒とは0.06秒なので大きな影響はないように思えますが、実際に動かしてみると(スペック次第ですが)体感できるほどのカクツキを感じられるはずです。
とはいえ、ウィンドウカラーの変更で時間が掛かっているのはv1.2.0も同じ。問題はここからです。
処理時間の違い(遷移を繰り返した場合)
v1.3.1(変更あり) | v1.3.1(変更なし) | v1.2.0(変更あり) | 計測対象 |
---|---|---|---|
287MS | 31.7MS | 130.1MS | シーン遷移 to Scene_Skill |
117.2MS | 41.6MS | 56.4MS | シーン遷移 to Scene_Menu |
174MS | 35.4MS | 151.1MS | シーン遷移 to Scene_Skill |
123.8MS | 36.7MS | 86.9MS | シーン遷移 to Scene_Menu |
221.2MS | 31.8MS | 133MS | シーン遷移 to Scene_Skill |
123.9MS | 45.1MS | 90.1MS | シーン遷移 to Scene_Menu |
264.5MS | 78.3MS | 115.1MS | シーン遷移 to Scene_Skill |
何度も画面遷移を続けていくと差が広がっていき、酷いときでは200ミリ秒を上回る差異となっています。こうなるとカクツキは深刻です。長時間プレーしていると何度もメニューを開いたり閉じたりするので、イヤでも体感することになると思います。(ただし、メモリ上はおかしな点は見当たらないので根本原因については不明です)
考察と対策
ウィンドウカラーを変更した場合、ウィンドウを作成するたびに「Bitmap.prototype.adjustTone」という処理が呼ばれますが、どうやらこれが元凶のようです。カラーを変更しない場合はもちろん呼ばれません。前述のとおりウィンドウは、画面遷移するたびに作り直されるので、戦闘→マップ→メニューと遷移を繰り返していけば処理の低下は避けられません。
当然のことながら、プラグインによってメニュー画面に立ち絵や独自のウィンドウ等を追加すると、それに応じてさらにパフォーマンスが低下します。私が実際に確認したケースでは400ミリ秒を超えるケースもありました。
すでに述べたとおり、対策は 「長編作品ではウィンドウカラーを変更しないこと」 です。もちろん今後の本体バージョンアップにより状況が改善されることは期待できますが、それでもカラーを変更することによって余分な処理が実行されることは避けようがありません。カラーの変更は手軽で便利ですが、ペイントソフトを使えば比較的簡単に色調を静的に変更できます。
ただでさえ、パフォーマンスについて懸念点の多い現状ですから、できるところから対策していきたいですね!
プラグインの配布
今回、パフォーマンス測定のために作成したプラグイン「パフォーマンス計測プラグイン」をMITライセンスで配布します。自作品のパフォーマンス改善の手掛かりにご利用頂ければと思います。詳細は以下の通りです。
ダウンロード
プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/PerformanceRefine.js
ダウンロード方法(Windowsの場合)
- リンク先に飛ぶ
- 右クリック
- 名前を付けて保存
- ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置
利用規約
当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php
お初にお目にかかります
返信削除最近MVでの制作を始めたものです
こちらのプラグインには大変お世話になっておりますが、
トリアコンタン氏の仕事っぷりには頭が下がりっぱなしです
まさかこんな問題もあるとは・・・
こういう制作上での障害になりそうな事象を発見して頂けるととても大変助かります
これからもプラグイン制作頑張ってください!!応援しています!!!><
こんにちは!
削除プラグインのご利用、応援ありがとうございます!
パフォーマンスについては懸念事項がまだありそうなので、私に分かる範囲で調査、情報公開していく予定です!