イベントはたくさん配置できるものと思い込んでいた

この記事の内容は古くなっています(2017/05/14)

記事の投稿の後、処理の高速化に成功したため、FPSは改善されています。(とはいえ、画面内に集中的に500個を配置すると、60 FPSの維持は困難です。)

合計500個のマップイベントを配置してみた……

※画面外にもあります。全部足して500です。

17 FPS になりました。(普通は 60 FPS)

えっ。

最終的にマップ内に500個位になるだろうと思って、念のために仮に置いてみて確認してみたら、予想以上に重くてヤバいことになりました。

イベントが密集しているとかあんまり関係なくて、マップイベントの総数で重くなっている模様。

60 FPSから 59 FPS に下がるだけでも気になるのに一気に 17 まで下がるとか、プレイ不可能なレベル。このソフトはCPUを1コア分しか使っていないので、CPUのコア数を増やしても根本的には改善しない。シングルスレッド性能の高いCPUの構成に変更すればプレイできるかもしれないけれど、今以上にPCのスペックを要求するとなると結構厳しいね。

マップ分割はしたくないんだけどなぁ……。マップを分けると、分割しなかったときに出来ていたことの多くが出来なくなるんだよね。プレイするときの快適さも減るし、あまり良いこと無いのよ。

各種のレイヤーシステムを使わずに、3層のマップを表現しようとしているからこうなるんだよね。2層までならマップイベントを置かなくても出来るんだけれど、2層にすると建物の裏側に回り込んだときの描写が今一つなんだよね。

数を減らしてみると……

マップイベント 500個 ‥‥ 17 FPS
マップイベント 400個 ‥‥ 38 FPS
マップイベント 300個 ‥‥ 52 FPS

と、リニアに FPS も向上するのが分かります。マップイベントの数が主原因のようです。つまりはマップ内の数を減らすしか方法がないという。ちなみに 52 FPS っても結構ヤバい値です。60 FPS維持が基本中の基本なので。

ちなみに300個ですと、視界内に100個とか入ってこなければ(距離が離れていれば)、ギリ 60 FPS を維持できるようです。これは VXace に元々備わっているマップイベント負荷軽減の処理が効いているためです。細かく調べるとおおよその上限は 330個と分かりました。他のスクリプトの処理も全部込みでの数値ですので、この 330個が実質的な上限となります。

本番用のマップでは、イベント配置を始めてまだ初期の段階なのに既に 232個を使用していますので、このペースでは 330個を超えるのは確実……減らす努力をしなくてはなりません。