テスト公開です! 副作用があれば教えてください。

WebGLモード限定です。canvasモードでは試していません。

 

https://github.com/sabakan03/mv/blob/master/Project/js/plugins/Saba_Performance.js

 

僕はMacで作業してるんだけど、Windowsでもテストしようと思って、仮想PCでWindowsを立ち上げてMVゲーをプレイしてみたんですよ。そしたら起動まで10秒ぐらいかかった挙句、シーンが切り替わる度に重くて、全然ゲームになりませんでした。

仮想PCの設定がおかしいのかなと思って、CPU2こ、メモリ8G、グラフィックメモリ1G割り当てたんだけど、それでもクソ重くて。格闘ゲームも遅延なく動くのに、RPGがまともに動かないってどういうことなんだろう? もしかして僕のスクリプト、Windows環境では動かないのかも!? と思って、友人3人にテストしてもらったのでした。

結果は、ゲーミングPC使ってる人は快適、4年前のノートを使ってる人はかなり重い、5万円のデスクトップを使ってる人はクソ重いという結果になりました。ああ、MVが重いって言われてて、僕は全くそんなことを感じなかったんだけど、こういうことなのかーと、この時初めて知りました。

というか、僕の仮想PCだと、サンプルゲーすらまともに動かないんですよね。canvasモードだと、FPS30ぐらいで一応は動作するんだけど、WebGLモードだと、通常は60FPSで、シーン切り替え時に0付近まで落ちます。

でもプロファイラで見ても、そこまで遅くないんですよね。

image2

メニューの開閉を10回繰り返した結果。いやまあアイドル時間は40%もないですけど、実際はほぼ画面固まってて、このプロファイル結果よりもはるかに重いのです。というか絶対9秒弱もアイドル時間なかったですし! メニューボタン連打してたんですよ!

そしてよーく見ると、明らかにcanvas系が時間かかってるみたいですよね。環境によっては、WebGLモードでcanvas描画すると重いのかな? というわけで、canvasを使うところを駆逐したのが↑のプラグインです。drawTextと、ゲージ描画以外は全てPIXIを使うようにしました。

image3

かなり改善されました。友人も軽くなったと言っていたので、ここでひとまず完了としました。

すごく改善されたor逆に重くなったって人がいたら、教えて下さい〜。メニュー画面でFPSが40まで落ちたって報告はもらったんだけど、こっちでは再現しないんですよね。

 

■以下メモ。僕の仮想PC環境では……

・画像を読み込むと遅い。
これは、画像を読むと同サイズのcanvasが生成されて、drawImageも走るため。canvas生成よりも drawImage の方が重い。ゲーム開始時にたくさん画像を読んでると、タイトル画面が出るまでにすごい時間がかかる。


・メニューを開くと遅い。
たまに2秒ぐらい固まることも。これは、Bitmap.snap の
canvas = Graphics._renderer.extract.canvas(renderTexture);
と、そのあとの Bitmap.blur 内の drawImage のせい。


・ギャルゲー風会話プラグインが重い
話し手が変わるとFPSが0近くまで落ちる。これは drawImage でたくさん描画しているため。
(これも修正したので、そのうち更新します……)


・場所移動が重い
タイルセットが同じマップ間なら早い。タイルセットをがっつり変更したマップに移動すると重い。でも、3〜4回移動すると治る。
RectTileLayer.prototype.renderWebGL
の中で、描画データを作るところで固まるらしくて、2時間ぐらい調査したんだけど、原因不明。


・BGM再生が重い
友人はここは重くないと言っていたので、キャッシュするなどの対応は入れませんでした。(一応、音量0にすると読み込みをしないようにしました)


・まとめ
canvas.getContext() の drawImage が一番重い。drawImage は、putImageData しても変わらず。というか、context に触りに行くだけで固まることも。その他の改善はオマケ程度。drawImage (= Bitmap.blt)を使うと、環境によっては重いのでご注意を。
なぜ重い環境があるのかは不明。グラボによるような気がしないでもない?

1 件のコメント “ツクールMVのパフォーマンス改善プラグイン”
  1. MVツクラー より:

    初めまして。MVでエネミーや職業に対して個別に通常攻撃属性、有効属性を設定するのは大変なので
    火属性、水属性、風属性、土属性と共通の特徴をカテゴリ化したいのですが、そんなことはできないのでしょうか。

  2.  
コメントする