スプライトシート すべてのゲーム開発者が知るべき事実-
We protect your privacy. Click above to load the video and player from youtube.
スプライトシート すべてのゲーム開発者が知るべき事実-

このゲームシーンを見てください。別々の描画オブジェクトで構成されています。花や木や雲、そしてピクセル人間。これらの動かすことができるオブジェクトはすべてスプライトと呼ばれます。
では、ひとつのスプライトに注目してみましょう。ある一定のピクセル幅と高さを持った四角形の画像としてスプライトは表されます。このスプライトは140*140ピクセルの大きさです。


ひとつひとつのピクセルは色を持つためにそれぞれメモリを必要とします。正確なメモリの量は色深度によります。デフォルトでは32bit、つまり4bytes消費します。ピクセル人間の総メモリ使用量は140*140*4の76kbになります。
使っているグラフィックスハードウェアによっては特定のサイズでしかスプライトを扱えない場合があります。例えば2のべき乗数だったり、さらに酷い場合は2乗数だったりします。


このようなハードウェアの制約に合わせるために、スプライトを使いもしないピクセルで埋め合わせなくてはなりません。この要件に合わせるためには、ピクセル人間スプライトを256*256ピクセルに拡大しなくてはなりません。これによってメモリ使用量 は256kbに増加します。これは元のサイズに比べて3倍以上の数値です。
確かにひとつのスプライトで見ると大したことはないかもしれません。しかし、たくさんのオブジェクト、キャラクター、アニメーションで作るゲームを考えてみてください。すぐにスプライトの数が数百なんてことになるでしょう。そ して、それぞれが貴重なリソースを消費しています。


でも、もし無駄に消費するメモリをやっぱり使えるとしたらどうでしょう。他のスプライトをそのスペースに詰め込むことを想像してみてください。
その結果できたものがスプライトシートなのです!
これによって、ハードウェアの制約に従わなくてはならないのは全体のシートだけということになります。見ての通り、個々のスプライトを使う場合と比べてメモリ使用量は遥かに少なくなりました。
しかし、これで終わりではないのです!さらにきつく詰めて、スプライトの透明な部分を絞り出してしまいましょう。この例ではメモリの使用量がさらに50%も削減されました!


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

Thanks to Nobuhito Kuros for the translation. The transcript is also available in English