スプライト (映像技術)

出典: Wikipedio


スプライトは、主にテレビゲームで用いられる、画面上のキャラクタ(人物・物品等)など小さな絵を高速に表示するための技術的な仕組みである。

目次

概要

この機能は、画面表示における映像の情報を記憶しているビデオRAMとは別に、多数の小さな画像を用意しておき、画面上の任意の位置(1ピクセル単位で指定可能)にハードウェアで合成して表示する物である。

この機能は、背景となる画像や複数のスプライトで重ね合わせて合成表示ができるようになっており、複数のスプライトが重なったときに、どのスプライトを前面に表示するかをプログラム上において優先順位を指定する事が可能で、これを利用して細かい映像表現も可能である。

これはアニメーションにおけるセル画の概念に近いが、更にセル画に例えるなら、背景の上にキャラクタの大きさに切ったセル画を置いて、1コマ毎にキャラクタのセル画を背景上で動かしていくという物である。

細かい映像表現

例えばあるゲーム上において、主人公=プレーヤーがソリに乗るシーンを表現する場合、スプライトを使った映像表現では、座っている主人公が描かれたスプライトの下に、ソリのスプライトを重ねる。こうすると主人公がソリに乗っているように見える。さらにソリが動き出した際に、ソリを細かく上下・または左右に小さく動かす事で、主人公の乗ったソリが、勢い良く疾走してガタガタと地面の凹凸によって振動する様子が表現できる。

また主人公がソリからボートに乗り換えた場合には、座っている主人公のスプライトの下に、ボートのスプライトを置くだけで済む。そのため、キャラクタの画像データを「ソリに乗っている画像」と「ボートに乗っている画像」で別々に作る必要が無い。

プログラミング上における利点

プログラム上に於いては、キャラクタを移動させるときは各スプライトに指定された位置情報だけを変更すればよい。よってソフトウェアで画像の重ね合わせ処理などを行う必要がなく、CPUにかかる負荷、VRAMのバスに対する負荷、ソフトウェア開発(主にプログラマー)への負担が少なく、プログラムの品質も安定する。優先順位の指定により、奥行きも簡単に表現できる。これは前出の細かい映像表現に利用され、特に幾つかの部品を別々・または一緒に動かす事で、様々な表現に応用できる。そのため、それらの部品を組み合わせた画像を一々作成しなくて済む。製作に掛かる手間が省ける他、それらの合成画像を予めソフトウェアの記憶媒体に記憶させておく必要が無い。少ない記憶容量の媒体で、より表現力豊かなゲームを提供できる事にも繋がる。

ハードウェア

初期にはアーケードゲームにて専用の電子回路を組んで実現されていた。次第に汎用化され、ファミコンなどのゲーム機、パソコンの一部(MSXX68000FM TOWNS)などで利用できるようになった。

その特性から、画面上で多数のキャラクタが同時に動く、シューティングゲームレーシングゲームで重宝される。特にハードウェア上で同機能が搭載されている場合、コンピュータのCPUに負担を掛けずにキャラクターを画面上で動かせるため、CPU処理能力の低い時代に於けるコンピュータで、激しい動きのあるゲームを作る際必須とされた。

ラインバッファ方式

ファミリーコンピュータMSXX68000などで使われる。

モニターに出力する映像信号を生成する直前に、VRAMから読み出した、ビットマップあるいはキャラクタベースのグラフィック面のデータと、スプライトICより送られて来るスプライトのデータを、走査線1ライン分の容量のラインバッファ上で、合成処理する。

この方式のメリットは、グラフィックバスを殆ど消費せず、またキャラクタの合成処理に必要なワークRAMが少なくて済む、という点である。当時は、高速に動作するグラフィック用のRAMが非常に高価だったので、この特性は重要であった。

しかし、画面の走査と平行してスプライトを合成する為に、大量のスプライトを横に並べると、合成処理が追いつかずに、表示が欠けることがある。この場合、通常は内部のインデックスが遅い(優先順位が低い)スプライトから表示が欠けていく。また、スプライトの数が増えれば増えるほど、1ライン内での合成処理のタイミングがシビアになるため、最大表示数を大きく増やすことが困難である。

このため、特に最大表示個数に制約が多い家庭用ゲーム機など、多くのソフト上では、表示するスプライトを選別してちらつかせながら表示することで、スプライト欠けを緩和していた。また、走査線割り込みなどを使用して、ソフト上で先回りして表示情報を書き換える「スプライトダブラー」などの処理を行うことで、1フレーム中に表示可能な枚数以上に表示させることもできた(ラスタースクロールも参照)。

フレームバッファ方式

FM TOWNSや業務用ゲーム機、近年の3D描画を行うハードで採用される。

日本の家庭用のコンピュータでは、FM TOWNSで初めて採用された。発売当時の家庭用のコンピュータで一般的なスプライト機能の実装方式と異なるため、俗に「擬似スプライト」と呼ばれることがあった<ref>『Oh!FM TOWNS』1993年9月号 p.64</ref>。

原理は単純で、スプライトのみ描画するフレームバッファを2画面分確保する。そして、1フレーム分のスプライトをオフスクリーンのフレームバッファに全て描画する。描画完了後に、現在オフスクリーンのフレームバッファと、オンスクリーンのフレームバッファを切り替える。スプライトの描画が完了したフレームバッファは、単なるビットマップグラフィックプレーンとして、他のグラフィックプレーンと合成して出力される。これを繰り返す。

メリットは、ラインバッファ方式と異なり、横方向にスプライトを並べられる数に制限がない。スプライトICによるVRAMへの描画速度とVRAMの速度が向上すれば、リニアにスプライトの表示上限を向上させることが出来る。このため、フレームバッファ式のスプライトは、ラインバッファ式を遥かに上回る最大表示個数を実現していることが多い。また、基本的には、CPUが行うか、スプライトICが行うかの違いを除けば、VRAMへビットマップデータを描きこむという点では同じであるため、スプライトに対する拡大縮小などの特殊効果の実装に無理がない。

デメリットは、VRAMが大量に必要であり、またVRAMへのスプライトデータ(つまりビットマップデータ)の高速な描画能力も必要である。また、1フレーム中に表示可能な枚数を越えて表示させようとすると表示バッファを切り換えるタイミングが2フレーム以降になり、この遅れによる表示のもたつきが発生する。なお、フレームバッファ方式でも、初期の実装(セガのシステム基板など)の場合は、垂直帰線期間に全てスプライトの転送が終わることを前提に、1フレーム分しかバッファが無いため、スプライトレイヤの描画タイミングがなんらかの理由で遅延した場合は、優先順位が低いスプライトが丸ごと大量に消えたりする。

擬似スプライト

プログラミング技法そのものが、広告のキャッチコピーとして多用された時代は、上記ハードウェアスプライトに対して、ソフトウェアによる、重ね合わせ処理の実装を、ソフトウェアスプライトあるいは擬似スプライトと表現していた。なおこの場合、キャラクターと背景の透過を考慮した重ね合わせ処理を行っているという意味合いであり、1ピクセル単位でキャラクターを動かせるとは限らない。

現在

近年では、CPUの処理能力が向上したため、VGA程度の解像度であれば、CPUで直接VRAMに描画しても十分に間に合う。また、グラフィック・コプロセッサ(画像表示専用の演算装置)の発達に伴い、このスプライト機能が無くても、充分様々な映像表現が可能になっている。ゲーム専用機でも、近年の家庭用ゲーム機やアーケードゲームでは、スプライト機能を搭載する意味が失われており、現行のゲーム機では、正面を向いた四角形ポリゴン(ビルボード)をハード的、あるいはSDKのライブラリでラッピングするなどして、スプライトのように扱えるようにしている事が多い。

関連項目

脚注

<references />cs:Sprite (počítačová grafika) da:Sprite de:Sprite (Computergrafik) en:Sprite (computer graphics) es:Sprite (videojuegos) fi:Sprite-grafiikka fr:Sprite (jeu vidéo) it:Sprite (informatica) nl:Sprite (computer) no:Sprite (datagrafikk) pl:Sprite pt:Sprite (gráfico) ru:Спрайт (компьютерная графика) sv:Sprite (datorgrafik)

個人用ツール