アリテイ 2023/04/26 22:04

異世界チート転生RPG+NTR#11 【HPゲージを導入】

どうも アリテイシア です!

最近何とか落ち着きを取り戻しつつあります(仕事の話)


前回の雑記の続きの話をします。今日の内容は『並列処理とは何ぞや & ツクールの重さの原因』についてです


興味ない方は目次で飛ぼう(^^)/


雑記(ツクールMZの話)

これまではツクールにおける『ピクチャ』の扱いについて色々語ってきました
結論として 『RPGツクールで高解像度の画像を使うのは無意味 & 初心者向けだがツクールではピクチャを扱いづらい』 ということ



今日はゲーム開発前に調べていた「ツクールは動作が重い」とか「すぐ強○終了する」とか言われているところを深掘りしていきます



えーこれはMZを弄り始めた制作開始前に確認していた内容ですが、画像などが無かったので撮りました


さてまず『並列処理とは何ぞや?』
A.プログラムの実行中や待機中などに『並行して実行しているプログラム』のことです


今作の異世界チートで言うと目をぱちぱちさせる動作とかおっぱいをモミモミするのがそれにあたります
もっと言うと『足踏みやそこらを移動するNPCの動作』も並列処理ということが出来ます




上を踏まえた上で
『ツクールは動作が重い』『すぐ強○終了する』の話をしていきます
しょっちゅう『強○終了する』のはRPGツクールMVくらいです
理由は実験のあとで説明します


実験


◆条件
今回はプログラムの重さという事でCPUについてのみ話していきます。(巷のゲームでいうとメモリクラッシュとか話がたまに出てきますが、あれはメモリは画像などデータの保持的な事なので今回はパスです)


◆主な実験内容
1.並列処理って重いの?
2.ツクールの動作が重いのはなんで?


◆実験場
こちらが実験場の環境です

CPUは裏で何かたまに走るけど、特に重たいアプリを使わないでいれば15%~40%を推移する、平均20%使用ってところですね
メモリは80%……まぁWindowsだけで60%~80%はいつもあるので普通ですね、こんなもんです今回は関係ないですし



実際のゲームを起動するとかなり上がりますね
移動してるとそこそこの頻度でカクつきます。まぁ色々データを処理しているのでしかたにゃあ


じゃあ再起動して実験開始!




①並列処理を実行しよう!

ではまずこんな何もしない並列処理を500個コピーして走らせていきましょう

う~ん、何もないフィールドではヌルヌル動きますね。500個もプログラムが走ってるとは思えない
でも裏ではたまに100%に近づいてカクつきそうになってますね……元々ツクール起動しててもこんな動きなので変化を感じにくい。というか変化してますか?ってレベル




②だったらもっと並列処理しちゃおう!!!

MZさんはコモンイベントが最大9999個つくれるのでおよそ1万もの何もしない並列処理を増殖させてスタート!

ムムッ( ゚Д゚)
カクつくというほどではないですが、ズズズズズズーというような動きをします結構重いかも、画像を動かすなどがあったら結構致命的な重さになりそう!
裏でも100%を超える瞬間が何度もある様子、なぜズズズズ動くのか?並列処理を優先している感じかな"(-""-)" わからんけど




③並列処理とは違うけど『ループ』って機能があるんです

そういえば『ループ』が重いって誰かが言ってたなぁよし試してみよう
ってことで並列処理にぶち込んでみました

ヤバイッ! 死ぬ! 助けてっ!!!www
カクカクどころかゲームにならないレベルの遅延……。ループの圧倒的な破壊力が伺えますね。並列処理はおそらく『何らかの制限』か『監視』のような性質を持っているようで、ループ君みたいに全力で何もない処理を無限に繰り返さないような仕組みがあるようです('ω')
ループを使う際は必ずウェイトを挟みましょう!w




④MVやMZが重いのはどういう訳か?

これは以前どこかの記事で読んだことなのですが『解像度が高いと重い』ということ


RPGツクールはMVから解像度を変えられるようになっていますただこれはMVのプラグインが元でその後公式に採用された機能だったはず
実際に解像度が高いと重いというのなら何故そうなのかを検証しなくては!


 考察
重くなるって事は処理する情報量が増えるという事。つまり処理している情報の上限を見る方法が必要だ……となるとNPCに特定のルートを走ってもらいどこまで処理するのかを解像度の違いで検証すればいいのだ!('ω') ←答え知ってる奴の顔

よしローザ、君に決めた! いけぃ!

 検証

▽1280x800

▽816x624


 結果
以上のように1280x800の高解像度ではX軸(横)26マスY軸(縦)16マス分、816x624の初期設定ではX軸(横)17マスY軸(縦)14マス分、先の情報を取得実行している事が分かった

高解像度の方はプレイヤーマスが中央に位置して遠方マスが途中で切れているが実際に描画しているのは縦27横17マス。初期設定では48x48に収まるようサイズ設定になっているので横17マスx縦15マスが画面に描画されている。更に情報を取得し実行するのが高解像度では横12マス縦7マスそれぞれ左右上下に広がっていて、初期設定では横8マス縦5マスそれぞれ左右上下に広がっている。


高解像度が51x31=2201マス
初期設定が33x25=825マス


それぞれキャラクターを情報収集・実行していることになる
私の想像だが、マップの描画も同じように処理されている気がする……検証の方法は無いが、広大なマップを全部描画するわけはないし、移動時のカクツキはそれなりに強いので多分そうなんじゃないかと思います( ゚Д゚)


とはいえスクリプトを用いた瞬間移動をしてもマップの崩れが発生したりはしない。まぁ当たり前かマップデータに書かれた読み込み済みの画像を張り付けてるだけなので、コンピュータ君の得意分野である計算処理のようなもの


また、自動実行や並列実行のイベントに仕込まれたプログラムはマップ上のどこに居ても実行されるので……キャラクター描画に何かあるのだと思います……"(-""-)"



というわけで、キャラクター(NPC)ってそんな重いんか?ってことについて検証してみなければならない。これを放置してカクカクさせることをカミサマンは許しはしない( `ー´)ノ




⑤NPC(イベント)って重いの?


ドドン! プリシア工場!
499体ものプリシアのハーレムの中をリード君が行く!
きしくも最初の並列処理とほぼ一緒の数になりましたね('ω')
足踏みするだけの全く同じ動きをするキャラクター約500体がどれほど重いものかよ……!?

うぬううううう……! 結構重いぞ! 並列とは違うのだよ! 並列とは!!
並列処理1万に近い動きなんじゃなかろうか……?プリシアの海に隠れてほとんど見えないけどwww
スプレットシートだから画像の読み込みが重くてこうなっているとは全く思えない
何を実行しているのかわからぬ!恐らく『動かない』などを実行して居るんじゃないかな……?


キャラクターにはそれぞれ設定できる数値があり『画像』『描画方法』『移動』『足踏み』『向き』『移動速度』『移動頻度』『プライオリティ』『不透明度』などなど
キャラクターがいる(空白のイベントを設定している)だけでも処理が必要になる模様です


つまりキャラクター(RPGツクールではイベントと呼ばれるもの)はそこそこ重い!
解像度と掛け合わせると驚異的な威力を発揮するのではないかな……( ゚Д゚)





さて、重い原因が何となくわかってきました。

まず解像度! 大きいほど処理する情報がけた違いに増えていく。
次にキャラクター! キャラ1体で1つの並列処理の比ではないほどの並列処理がされている(多分)


並列処理は意外にもさほど重くないという事がわかりました!!!


コンピュータ君は計算が得意だから、並列処理にウェイト無しループなどの負荷をかけなければあまり重くはならないようです

(処理上問題が無ければウェイトを1フレームかませることで負荷がほぼなくなります)





さて最初にMVは処理落ちすると書きましたね。多分実験中もMVだったら何度か死んでいた事でしょう。


なぜMVだけなのか?

これは簡単です。解像度を変えれる機能をつけてしまったからです。いわゆる『反応待ち』の状態になるとMVの場合大体強○終了するのです。しかも後にMZでは実装されることになる強○終了するのを防ぐ機能を実装せずにサポートが終了(正確にはアップデート終了だったかな?まぁほぼ同じ意味だよね)したので、バリバリ強○終了するゲームを生み出すツールになってしまったのです(´Д⊂ヽ
MZになった時点でプレイ側が強○終了するのを防ぐ機能が付いていたかも(少なくとも制作サイドはMZになって頻繁に強○終了しなくなってめちゃめちゃ楽になった)……詳しくはそのスジの人に聞いてね

早い話、サ終したから もう無理! それだけ。



何かの処理だか読み込みが追い付かないと強○終了するなんてとんでもない!
ユーザー殺しといっても過言ではない。少なくともMVで高解像度でお届けするのは避けた方がよろしいです。プログラムの腕に自信が無い限りは……!( ゚Д゚)


突然の強○終了に筆者の心が幾度へし折られた事か! …そして画面の前の同人エロゲーマーも頷くことでしょう!



ちなみにMZで画像の読み込みが終わっていない状態があっても表示が追い付かないまま処理したり待ったりします(表示方法の問題。ピクチャ表示や遠景など処理の仕方に若干の違いがみられます)
おそらくMVでも同じ処理をするかと思いますがMVを主軸にする気が無いので実験は行ってません。強○終了するとかいう結末も見たくないですし。猛者が居たら是非その実験結果を教えてください



以上が本考察・実験での成果となります
面白かったら🌟いいねも押してくんなまーしー(^^)/



興味持ったらアナタも同人ゲー作り始めてもいいのよ?('ω')

フォロワー以上限定無料

◆先行公開情報やネタバレがみれる ◆発売時にメッセージが届く

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索