What is a sprite sheet? The Movie - Part 1 - Memory

Introducing sprite sheets and reducing memory consumption

Did you like it? Just tell your friends...


Learn how you can increase your game's performance - watch part 2!

Language flag en en Language flag jp jp

スプライトシート すべてのゲーム開発者が知るべき事実-

spritesheets the movie: spritesheets gamescene

このゲームシーンを見てください。別々の描画オブジェクトで構成されています。花や木や雲、そしてピクセル人間。これらの動かすことができるオブジェクトはすべてスプライトと呼ばれます。

では、ひとつのスプライトに注目してみましょう。ある一定のピクセル幅と高さを持った四角形の画像としてスプライトは表されます。このスプライトは140*140ピクセルの大きさです。

spritesheets the movie: sprite in pixels
spritesheets the movie: spritesheets 76kb

ひとつひとつのピクセルは色を持つためにそれぞれメモリを必要とします。正確なメモリの量は色深度によります。デフォルトでは32bit、つまり4bytes消費します。ピクセル人間の総メモリ使用量は140*140*4の76kbになります。

使っているグラフィックスハードウェアによっては特定のサイズでしかスプライトを扱えない場合があります。例えば2のべき乗数だったり、さらに酷い場合は2乗数だったりします。

spritesheets the movie: hardware
spritesheets the movie: spritesheets padding

このようなハードウェアの制約に合わせるために、スプライトを使いもしないピクセルで埋め合わせなくてはなりません。この要件に合わせるためには、ピクセル人間スプライトを256*256ピクセルに拡大しなくてはなりません。これによってメモリ使用量 は256kbに増加します。これは元のサイズに比べて3倍以上の数値です。

確かにひとつのスプライトで見ると大したことはないかもしれません。しかし、たくさんのオブジェクト、キャラクター、アニメーションで作るゲームを考えてみてください。すぐにスプライトの数が数百なんてことになるでしょう。そ して、それぞれが貴重なリソースを消費しています。

spritesheets the movie: very heavy
spritesheets the movie: spritesheet

でも、もし無駄に消費するメモリをやっぱり使えるとしたらどうでしょう。他のスプライトをそのスペースに詰め込むことを想像してみてください。

その結果できたものがスプライトシートなのです!

これによって、ハードウェアの制約に従わなくてはならないのは全体のシートだけということになります。見ての通り、個々のスプライトを使う場合と比べてメモリ使用量は遥かに少なくなりました。

しかし、これで終わりではないのです!さらにきつく詰めて、スプライトの透明な部分を絞り出してしまいましょう。この例ではメモリの使用量がさらに50%も削減されました!

spritesheets the movie: remove transparency
spritesheets the movie: squeeze

ちょっと待って下さい!もしメモリが不足しているなら、まだまだできることがあります。通常の32- bitカラーフォーマットでは、それぞれの色と透明度を8bitsで表します。 1ピクセルごとに4bytesです。いくつかの色を絞りだすことで色深度を16-bitすることができます。削減後の画質はディザリングを適用することで向上させることができます。この結果メモリ使用量は50%減少しました!

パート1ではスプライトシートがどのようにしてゲームのメモリ使用量削減に貢献しているのかを見ました。パート2ではスプライトシートを使うことでどのようにしてゲームのパフォーマンスを向上させることができるのかを学んでい きます。

spritesheets the movie: increase performance

Japanese translation thanks to Nobuhito Kurose

Leave a comment

comments powered by Disqus