コズミックイプシロンの3D地面はどう描いていたのか(予想編)

注意: これは予想で、実際にどうなのかはまだ調べていない。そのうち解答編をやりたい。
D
いわゆる"スペースハリアー"タイプのシューティングゲームである、"コズミックイプシロン"や"テトラスター"では、地面部分の描画に特徴的な3Dグラフィックを採用している。コズミックイプシロンは3D立体視システムにも対応している( http://www.youtube.com/watch?v=KSbEO9lLwEk )ので、なかなかの効果をファミコン上で実現していた。
前回のテクニック( http://d.hatena.ne.jp/mjt/20130612/p1 )のように、1枚絵をラスタ効果としてスクロールするだけでは、これを実現することは出来ない。ただ、これは単純な2つのテクニックを追加することで実現できる。

ラスタ位置によるグラフィックの差し替え

http://www.maroon.dti.ne.jp/youkan/mz700/y2k.html

原理を簡単に説明すると、「ラスタごとにテキストVRAMの内容を書き換える」です。TVは上から1ラスタずつ表示しているため、ある文字の1ラスタ目が表示された後、2ラスタ目が表示される前にその文字を別の文字に置き換えると、今度は別の文字の2ラスタ目が表示されることになります。例えば"U"→"I"→"U"と1/3ずつ置き換えながら表示してやれば、

コズミックイプシロンも、これと同様のことを行なっていると想像できる。つまり、

実際のTV出力(左)は、複数の地面画像の組み合わせ(右2つ)でできていて、これを適当なラスタ位置(A、B)で再描画によって書き換えている。実際には2つよりも多い。
書き換えている と簡単に書いているが書き換えに使えるCPU時間は実は非常に短い(HBLANK期間は90ピクセル = 約30サイクルしかない。当然、この期間ではBG面を全て触ることは出来ない)。実際に切り替える必要のあるバイト数を切り詰めるか、カートリッジ側(= mapper)の機能を使用しているかもしれない。(実コードの考察が必要)

切り替え位置のスクロール

↑の方法を単純に適用するだけだと静止した地面しか描画できないことになるが、切り替え位置をフレーム毎に変えることでスクロールに見せることが出来る。
これらのテクニックはそれなりに応用が効く。例えば、Gameboy上で動作するOh!は、ラスタ位置によるグラフィック切り替えとスクロール位置切り替えの両方を使っている。

もっとも、GBのラスタ位置はGameboy colorと通常のGBで微妙に動作が違う(何故?)ので、描画が多少乱れている。(乱れ方がGameboy pocketとも違う - http://www.youtube.com/watch?v=HePCmUZdhL8 これは正確に見える)