スプライト (映像技術)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

スプライトは、主にビデオゲームで用いる、画面上の小さなキャラクタを高速に合成表示するための技術的な仕組みである。

概要

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

背景となる画像やテキスト、複数のスプライトで任意の優先順位で重ね合わせて合成表示ができるようになっており、低価格帯の機種などでは単色であったりと、描画表現よりも動くパーツを表現するのに適した機能である。

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

応用表現

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

主人公がソリからボートに乗り換える場合には、座っている主人公のスプライトの下にボートのスプライトを置くだけで済む。このように表示位置の指定は後述のVRAM上で論理演算の上データを書き換える方法よりも処理としては遥かに軽いものであり、表示そのものよりも動きという点において優れた表現力を発揮する。 反面、特にラインバッファ方式の実装では、メモリの速度に横方向の同時表示の数は依存するため、そのキャラクタの大きさや、数はハードウェアの設計に制限を受け、単色のみのハードウェアで複数色でキャラクターを表現する場合は、複数のプレーンを重ね合わせることで対処する。

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

プログラム上においては、キャラクタを移動させるときは各スプライトの表示位置情報だけを変更すればよい。よってソフトウェアで画像の重ね合わせ処理などを行う必要がなく、CPUにかかる負荷、VRAMのバスに対する負荷、ソフトウェア開発(主にプログラマー)への負担が少なく、プログラムの品質も安定する。優先順位の指定により、奥行きも簡単に表現できる。これは前述の応用表現のように、特に幾つかの部品を別々または一緒に動かす事で動きとしての表現能力を向上させると共に、パーツ単位での合成が容易となり、総データ量の削減に寄与し、制作負荷の低減や少ない記憶容量の媒体でより表現力の豊かなゲームを提供できる事にも繋がった。

ハードウェア

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

その特性から、画面上で多数のキャラクタが同時に動く、シューティングゲームレーシングゲームで重宝される。特にハードウェア上で同機能が搭載されている場合、コンピュータのCPUに負担を掛けずにキャラクターを画面上で多数スムースに動かせるため、CPU処理能力の低い時代におけるコンピュータでは、多くのハードウェアは、グラフィックスの表示に、水平型VRAMや、BGプレーンを使用しており、それらをソフトウェアによって書き換えることで、ピクセル単位で多くのキャラクタをスプライト無しでスムースに動作させることは難しく、滑らかな動きと、速度を要求するゲームでは、その力を発揮した。

ラインバッファ方式

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

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

この方式のメリットは、グラフィックバスを殆ど消費せず、またキャラクタの合成処理に必要なワークRAMが少なくて済む、という点である。

しかし画面の走査と平行してスプライトを合成する為に、そのスプライト用のバッファには高速なメモリを必要とし、横方向へ多数表示した場合、合成処理が追いつかず、間に合わなかったものは表示されないという状況になる。この際、通常は内部のインデックスが遅い(優先順位が低い)スプライトから表示が欠けていき、スプライトの数が増えれば増えるほど、1ライン内での合成処理のタイミングがシビアになる。この仕様を逆手に取り、合成処理の一部として使用しているソフトウェア[1]も存在する。

これらの制限に対しては、特に最大表示個数に制約が多い家庭用ゲーム機など、多くのソフト上では、表示するスプライトを選別してちらつかせながら表示することで、スプライト欠けを緩和していた。また、水平帰線期間内に制御可能なハードウェアでは、走査線判定、割り込みなどを使用して、実表示が終わったエリアのスプライトの位置情報をまだ走査されていない領域で利用することにより、仕様上の最大表示数を越えた画面表示を行なう「スプライトダブラー」などの処理も開発された。(ラスタースクロールも参照)。

フレームバッファ方式

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

日本の家庭用のコンピュータでは、FM TOWNSで初めて採用された。発売当時の家庭用のコンピュータで一般的なスプライト機能の実装方式と異なるため、俗に「擬似スプライト」と呼ばれることがあった[2]。プレイステーションやセガサターン以降、ゲーム機でも主流となっている。

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

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

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

擬似スプライト

プログラミング技法そのものが、広告のキャッチコピーとして多用された時代は、上記ハードウェアスプライトに対して、ソフトウェアによる重ね合わせ、キャラクタ表示の高速処理をソフトウェアスプライトあるいは擬似スプライトと表現していた。必ずしもハードウェアスプライトの持つ特徴、優位性を包含するものではない。

現在

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

関連項目

脚注

  1. ドラゴンクエストIV 導かれし者たちのファミコン版、出航シーン等。
  2. 『Oh!FM TOWNS』1993年9月号 p.64