ラスタースクロール(Raster Scroll)
ラスター スクロール(Raster Scroll)とは、表示画面の水平走査線(ラスタ)ごとにスクロール量や方向を変化させる描画技術です。
画面の横ラインごとにずらして表示させることで、画像が波打つ、奥に広がる、あるいは歪むような効果を演出できます。横ラインスクロールとも呼ばれます。
Playdateにおけるラスタースクロール
Playdateにおけるラスタースクロールは、スーパーファミコンやメガドライブが持っていた「ハードウェア機能としてのライン描画割り込み」とは異なり、ソフトウェア(
CPU)による
フレームバッファの直接計算として実装する必要があります。
ハードウェア的な支援がない代わりに、168MHzという(2Dゲーム機としては)比較的強力なCPUを活かすことで、Playdate特有のシャープな
1-bit ディスプレイに映えるダイナミックな演出が可能です。
1. アプローチの違い:LuaとC API
Playdateでの開発において、ラスタースクロールのようなピクセル単位・ライン単位の処理を行う場合、どの言語レイヤーで実装するかが最大の壁となります。
- main.lua(Lua API)での実装の限界と工夫
- LuaのAPIだけで、画面の縦240ライン(Y座標)に対して毎フレーム異なるXオフセットで画像を描画しようとすると、関数呼び出しのオーバーヘッドにより著しくフレームレートが低下します。
- もしLuaだけで擬似的なラスタースクロール(F-ZEROのような床など)を行う場合は、1ラインずつ描画するのではなく、playdate.graphics.image:drawSampled() を用いてテクスチャを変形させるか、横長の細いスプライトを数十個並べてそれぞれのX座標をずらす、といった「間引き」のアプローチが必要になります。
- C APIでの実装(最適解)
- 本格的なラスタースクロール(滑らかな水面の波打ちや、高速なレースゲームの床)を安定したフレームレートで実現するには、C言語での実装がほぼ必須となります。
- playdate->graphics->getFrame() という関数を使うと、現在のフレームバッファ(画面全体のピクセルデータが詰まったメモリの先頭ポインタ)を直接取得できます。Playdateは1ピクセルが1ビットで表現されるため、行(ライン)ごとにポインタを進めながら、ビットシフト操作やメモリーコピー(memcpy等)を高速に行うことで、ラインごとの横スクロールを自力でレンダリングします。
pdc コンパイラを通して最適化されたC言語のバイナリであれば、全240ラインのピクセル操作を行っても十分に高いパフォーマンスを維持できます。
2. Playdate(1-bit)ならではのラスタースクロール演出
色が白と黒の2色しかないPlaydateにおいて、ラスタースクロールを効果的に見せるための特有のデザインアプローチがあります。
- チェッカーボード(市松模様)の活用
- 奥から手前に向かってくる床を表現する場合、白黒の明確な市松模様をテクスチャとして用意し、手前のラインほどスクロール速度を速くします。
- 1-bit ディスプレイでは境界線が非常にクッキリ出るため、錯視による猛烈なスピード感が生まれます。
- ディザリング(網点)の波打ち
- 背景に水や異空間のような「揺らぎ」を表現する場合、ディザリングパターンの画像をサイン波(sin())に基づいてラインごとにXオフセットを揺らして描画します。
- アナログテレビのノイズのような、Playdate独自の不思議な質感を表現できます。
- スキャンラインの強調
- あえて1ラインおきに黒い線を引く(または描画をスキップする)ことで、擬似3Dにブラウン管のようなレトロなテクスチャを付与する手法も、1-bitグラフィックと相性が良いです。
関連ページ
最終更新:2026年05月03日 07:37