Heliodor 2021/02/25 17:37

あまり参考にならないメモリー使用量の話


昔のゲームROMとか覗くと出てくる、こういう感じの画像。
なんでこんな細切れ状態なのか? というお話です。

あやかし紅白戦のメモリー使用量は今のところ700MBぐらい。

ヴィータ大脱出200MBを超えないように作っていたので、あやかし紅白戦は3~4倍ぐらい贅沢に使っています。

それでも近年のWindows10搭載PCは最小構成でも4GB(4096MB)ぐらいは搭載しているので、ヴィータ大脱出の頃とくらべるとかなり楽になりました。

とはいえ32BitOSでは、ひとつのアプリで2GBまでしか扱えないので、あまり油断もできません。
64bitOSなら小学生が考えたようなスゴイ数値になりますが、Windows10にも32bit版はあるし、物理的に搭載しているメモリーに限界もあるので無制限というわけにもいきません。
(※参考までに、プレステ3のメインメモリーは256MB。OSとか全然違うので一概には言えませんが、あやかし紅白戦どころかヴィータ大脱出もギリギリ動くかどうかというレベルです)


普通のゲームならそんなに気にする部分ではないのですが、当サークルのゲームはとにかくドット絵によるベタアニメが多いので(調子に乗って全画面アニメとかやってるし)メモリー使用量を気にせず作るとトンデモ無いことになります。


例えば主人公が立ち止まっている待機中の20枚のアニメーション。


これは256ピクセルの正方形なので、そのまま読み込むと一枚当たり256×256×4=256KBのメモリーを消費します。このまま表示すると立っているだけで約5MBのメモリーが必要という計算になりますね。
(カラーはRGBそれぞれ8bit、加えてアルファで8bitあるので32bit=4バイト)

どんな超効率圧縮されたデータでも画面に表示するときは1ピクセルずつメモリー上に展開するので、BMPファイルと同じサイズだけメモリーが必要になるわけです。


今のところ、こういう画像が5000枚ぐらいあって、そのまんま全部読み込むと1.5GBを超えます。
(まだ組み込んでいない画像や、今後描いて増える分も考えると最終的には3GB以上になると思われます)
画像だけでこれなんで、エフェクトとか効果音とかその他色々込みで考えるとエラいこっちゃですね。

あんまり低スペックPCのことは気にし過ぎても作るの大変ですが、全く気にしないと64BitOS必須 メモリー最低8GB以上というヘビー級の同人ゲームになってしまいます。見た目はただの2Dゲームなのに。




ではどうするか? 基本的な考え方は2つ。

1.必要なデータだけ読み込んで要らないデータはどんどん破棄する
2.データそのものの無駄を省く

1の方法ははゲーム機なんかで読み込みが入るのを思い出してもらうと分かりやすいですね。
ステージ1からステージ2に進んだら、ステージ1のデータを破棄して新しいデータを読み込むワケです。
逆にステージ1をプレイ中にステージ2のデータは必要ありません。
こうやってこまめにデータを入れ替えれば、少ないメモリーでも動作できるというわけです。


だかしかし

主人公のアニメーションデータはそうもいきません。
基本的にはいつでも全部メモリー上に持っている必要があります。
(極限まで切り詰めるならリアルタイムで圧縮データ展開とか方法が無いでもないですが)


そこで2の方法ですが、先程の待機モーションとか、画像の余白が結構ありますよね?


大雑把ですが、この水色の部分。余白は無駄なんだ……無駄だから嫌いなんだ 無駄無駄……。
もちろんアニメーションするので、画像によって余白のサイズはまちまちです。

こんな風に16×16ピクセルで区切って、画像の入っていない部分をカットして一つのテクスチャーに入るだけ並べていくと無駄がかなり少なくなるというわけです。


もちろん手動でこんな超面倒くさい作業やるわけには行かないので、16×16サイズで画像を再配置する専用のプログラムを作ります。

みっちり詰められて1枚のテクスチャーとなった待機アニメ20枚分


テクスチャーとして扱うので一辺が2のn乗サイズになっていると無駄がありません。
また、ここではやっていませんが、この16×16ドットで全く同じになる画像がたまに出てくる場合があり(真っ白とか肌色一色のベタとか)こういう重複を省いていくと更に節約が可能になります。

そして実際にゲーム画面に表示するときに再配置し直すワケです。


左がそのまんま使う場合、右が節約した場合です。

節約した場合、実際の画面には16×16の画像がたくさん並んでいる状態ですね。
画期的な方法みたいに語ってますが、昔からよくある手法ですし、ヴィータ大脱出の時点でも採用しています。

他にもメモリー節約する方法は大小色々ありますし、今回紹介した方法ももっと細かくやって切り詰めることもできますが、プログラムが煩雑になりますし、その分処理も重くなります。



そんなワケで、今のところ手持ちで一番ショボイリーズナブルなPCで動作するラインを基準にやっています。ドン〇ノート大活躍。
それでも年々PCパワーは上がっているので楽ちんになりました。

ムーアの法則素晴らしい。
それを守ってるintelやAMDも素晴らしい。

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

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

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索