ラスタースクロール
ラスタースクロール(raster scroll)とは、主にテレビゲームで用いられる、ビデオ信号の走査タイミング(水平帰線期間)に合わせて画面をスクロールさせる技法、およびそれによって得られる画面効果のことである。横ラインスクロールとも呼ばれる。
後述の疑似ラスタースクロールなど実現方法問わず同様の結果を得る画面効果含めラスタースクロールという場合もある。逆にステータス表示や疑似3Dのためにラスタースクロールの技術を使っていても言わない場合もある。
普通の横スクロール・縦スクロールなどを走査タイミングで細かく制御することにより、表示内容の縦分割、画像を「縦方向に伸ばしたり縮めたりする」「横方向に歪めたり波打たせたりする」などの特殊効果が得られる。左右に歪める処理をラスタースクロール、奥行きを出すために一方向のみに速度差をつけて歪めない処理をラインスクロール、と呼び分けることもある。
ポリゴンが採用される前の擬似3Dレースゲームのコース表現や、『ドラゴンクエスト』の「旅のとびら」など、使用例は枚挙にいとまがない。
なお、業務用ゲーム機や家庭用ゲーム機(メガドライブなど)の中には、各ラインごとに個別にスクロールオフセットを指定できるハードウェアもある。つまり、水平帰線期間に割り込みをかけなくても、垂直帰線期間内で普通に画面を描画すればラスタースクロールと同様の画像が得られる(前出のメガドライブでラスタースクロール様の処理が高速なのはこのため)。
逆に、水平帰線期間を割り込みトリガとすることが出来ないハードウェア(ファミリーコンピュータやFM TOWNS等)の場合は、ほかの手段で実装する必要がある。
ファミコンの場合は、0番スプライトと走査線の接触の検出ができるので、これをソフトウェア上で待つことでトリガにして実装することが多い。カートリッジ内に搭載したICのタイマカウント割り込み機能で実現する方法も取られた。FM TOWNSでは走査線の割り込みトリガがなく、ソフトウェアによる画像変型で疑似的に実装したソフトも見られるが、処理が重いので、ほとんどのソフトでは低速な機種では処理を切れるようになっている。軽い処理としては、スプライトパターンで疑似的に再現する方法もある(FM TOWNSのソフトにはCRTCを操作して走査線を歪ませる、疑似ラスタースクロールとも呼べる表示効果も見られる)。
ポリゴンによるリアルタイムレンダリングが一般的になると、画像の変形は簡単な処理の部類となり、ソフトウェアによる代替処理が主流になった。もっとも処理が遅い初期のポリゴンハードウェアでは移植の際に再現を諦めたソフトや、再現時に処理落ちしているソフトも多い。2005年現在、ラスタースクロールと呼ばれているもののほとんどは、正弦波などを利用して画像を変形させている擬似ラスタースクロール、あるいはラスタースクロールのエミュレーションである。
ハードウェアに依存しているため制限が多いラスタースクロール機能は、スプライトなどと同様に姿を消しつつある。2005年では、ゲームボーイアドバンスなど一部ゲーム機に搭載されているのみとなっている。
以降の説明では便宜上ディスプレイ横置き(長辺が横、短辺が縦)とする。
ディスプレイは、以下の繰り返しで映像を表示している。
左から右へ、横方向に1ライン分の信号を出力する
1ライン下の一番左へ移動する(水平帰線期間)
左から右へ、横方向に1ライン分の信号を出力する
(中略)
(最下のライン)左から右へ、横方向に1ライン分の信号を出力する
一番上のラインの一番左へ移動する(垂直帰線期間)
ラスタースクロールは、この水平帰線期間をハードウェア割り込みで検知し、割り込みルーチン内でスクロールレジスタを操作する。水平帰線期間の度に矢継ぎ早にスクロール量を変化させることによって、実際に描画される画面上では、画面の一部のラインだけが横に移動したように見える。
□□□□□□□□□□□□□□
□□■■■□□□■■■■□□
□■■□■■□□■■□■■□
□■■□■■□□■■■■□□
□■■■■■□□■■□■■□
□■■□■■□□■■■■□□
□□□□□□□□□□□□□□
第4ラインを描画する寸前に右へ1ドットスクロールし、第6ラインを描画する前に元に戻す(左へ1ドットスクロールする)と以下のように見える。
□□□□□□□□□□□□□□
□□■■■□□□■■■■□□
□■■□■■□□■■□■■□
□□■■□■■□□■■■■□
□□■■■■■□□■■□■■
□■■□■■□□■■■■□□
□□□□□□□□□□□□□□
モニタが横置きの場合について説明する。モニタを縦置きにすると横ラスタースクロールの処理がそのまま縦ラスタースクロールと読み変えられるが、ここで説明する縦ラスタースクロールとは違う処理になるので注意。
各ラインを横方向にスクロールさせて、画像を横方向にずらせたり歪めたりできる。
多重横スクロール、奥行きのある地面の表現、擬似3Dレースゲームのコース表現、画面を波打たせて空間や眼前が歪む表現など
各ラインを縦方向にスクロールさせると、画像を縦方向に引き伸ばしたり縮めたり、各走査線の表示内容を入れ替えられる。さらに横ラスタースクロールと組み合わせると画面全体がうねるような独特な表現が得られる。
脈打つ細胞などの表現、擬似3Dレースゲームにおける勾配の表現、縦方向への疑似回転処理など
ファミリーコンピュータ・MSX2などのレイヤー機能を持たないハードウェアにおいて、画面を上下に分割して、ステータスやスコア表示を行ったままもう一方の画面をスクロールさせる(『スーパーマリオブラザーズ3』など)手法も走査タイミングによる割り込み処理で行っている。ライン分割スクロール(ラインスクロール)とも呼ばれる。
上下方向で分割したい位置で割り込みを発生させ、表示ページやスクロール位置、画面モード、マップパーツなどを切り替えることにより画面の上下で別の表示を行うことが可能となる。
これを全ての走査線で行うとラスタースクロールとなるのでラスタースクロールの前身の技術と言えるが、全ての走査線で処理を行うことを想定していない場合は処理が追いつかず「画面が崩れる」ことがある(ファミコン版『ドラゴンクエストIII そして伝説へ…』の旅のとびらなど)。
画面表示の縦スクロールの横方向の複数分割(縦セルスクロール、縦ラスタースクロール)ができるハードウェアにおいて、ラスタースクロールを組み合わせることで、角度限定で画面全体が回転したように見せられる。
ハードウェアの半透明機能を組み合わせた「半透明ラスタースクロール」、複数のBG面に処理する「多重ラスタースクロール」などがある。複数のBG面があるハードウェアではラスタースクロールと併せてBG面の優先順位を入れ替えて、奥行きの表現ができる。
同じBGパターンを縦や横に繰り返しを並べた上で、ハードまたはソフトでパターンの内容を直接書き換えることで疑似的にスクロールに見せられる。変化に速度差をつけたパターンにすればそのままラスタースクロールのようになる。ファミリーコンピュータの後期のソフトやPCエンジンなどのBG面が一枚しかないハードで多重スクロールを表現したり、ハードウェアスクロールのないコンピュータで画面をスムースにスクロールさせる方法としても多用された。
スプライトは画面上に同時に表示できる枚数に限りがあるが、画面上方で表示したスプライトを画面下方で再利用することにより見かけのスプライト表示数を増やす手法。スプライトダブラーとも呼ばれる。ハードウェアの処理能力により、分割数を増やすことができ四倍辺りまで増やすライブラリが存在する。なお、水平帰線期間内にスプライトICを操作できないハードウェアでは、この方法は使えない。同様に保持するパターンの入れ替えも行うことで擬似的に定義数も変更可能である。ただし、構造上、分割ラインをまたいだ場合、キャラクタが切れて表示されることになる。
スプライト単体にラスタースクロールをかけ、画面外に移動させることにより上から下へ徐々に消えていく・現れるなどの表現が可能。
色数の制限が厳しいハードウェアにおいて、画面上部と下部でパレットを切り替えることで見かけ上使用できる色数を増やせる。また垂直同期を待たずに高速なパレット操作ができる(特にパレットが多いハードウェアで有効)。
水中・水上の表現など
スーパーファミコンの多くのソフトで使用されていた。水平ラインごとに画面を分割して各画面モードを切り替えて、それぞれのモード特有の特殊処理を表示画面内で別々に使用する。
『スーパーマリオカート』では遠景やスコア表示をBGレイヤーが複数使えるモード0で描画し、地面のコース部分を拡大縮小回転可能なモード7で描画していた。『ファイナルファンタジーVI』での飛空艇の飛行シーンにおいては、遠景を縦ラスタースクロールが可能なモード2を使い前述の疑似回転処理で描画、地表を拡大縮小回転可能なモード7で描画、地平線の傾きをスプライトのマスクで表現することにより、当時としては迫力あるリアルな飛行シーンを実現していた。
MSX2の一部ソフトで使用。画面を上下に分割し、TMS9918互換のキャラクタ・グラフィックのモードや、V9938のビットマップの低解像度16色・256色と高解像度4色・16色の任意の各モードを組み合わせて表示する。上画面をスクロール固定のスコア表示、下画面をゲーム画面とする手法が一般的。モード切り替えを伴わない単なる画面分割は、『ドラゴンバスター』のドラゴンとの対決シーンなどのようにファミコンにおいても使用例がある。
F1レース(ファミリーコンピュータ版)
北斗の拳(セガ・マークIII版)
スーパーモナコGP(メガドライブ版)
アイルトン・セナ スーパーモナコGPII(メガドライブ版)
F1(メガドライブ)
サンダーフォースシリーズ(II・III・IV・V)
ソニック・ザ・ヘッジホッグシリーズ(1・2・3・ソニック&ナックルズ)