2015-10-12 Mon [ 昔のこと::古の技術 ]
正しい呼び方があったわけでもないけれど、少なくとも僕はスプライトローテーションと呼んでいた技術について、ちょっと残しておこうというネタ。パート2である。多分これで終わりになる。
前回のを読んでおられない方は前回 の記事を読んでいただきたい。読まないと全くわからない話である。
前回の仮想ゲームマシン、ダメダメファミリーコンピュータ、略してダメコンが改良されてスーパーダメコンというのが登場したとしよう。
このスーパーダメコンは、なんとスプライトが5つ出せるようになった! …ということにしておく。
ところが、スプライトは一個増えたが、3つ以上が同じラインに並ぶとバッファ上の一番最後のスプライトが消えるのは変わらない…という状況だとしよう。
つまり表示能力は20%増しだが、スプライトの消える度合いは変わらないという、ダメなハードである。
で、この仮想ハードでは、前回のスプライトローテーションはマズいので、一工夫したほうが良くて、当時はそういう工夫を場合によってはソフト毎にやっていたのだ…というのが、今回の話になる。
実際にスプライトが表示が消える状況を以下に図示した。この意味がわからない人は、シツコイようだが前回 の記事を読んでいただきたい。
さて、スーパーダメコンになると実はヒジョーにまずい状況が起こりえて、前回のスプライトローテーションではダメなので、一工夫が必要、というのが今回の話なのだが、それをわかってもらうために、前回と同じスプライトローテーションをしてみよう。
なんとCは表示されないことになってしまう。
ここで選択肢としてCが表示されないのは諦めるという考え方もあるが、見えない弾にあたって死ぬのはイヤだ。
なんとかならないだろうか?
ローテーションのやり方をいじってみることにしよう。
いきなり反転して後ろから書くのではなく、一個ずつずらしていくという方法を取る。
具体的には
と、こんなふうに一個ずつスプライトと表示の対応をずらして行ってみる。
このようにすれば5/60秒の間で2フレーム表示されることになる。
1秒24回しか表示されず、かなり激しくチラつくことになるが、なんとか表示されているとは言えるだろう。
しかし、この方法はあまり頂けない。
というのもだ。実際の表示を見ると2フレーム連続で表示され、次に3フレーム(1/20秒だ)表示が消えてしまう。つまり1/30表示され1/20表示されないのはチラチラ度がひどいのではないかと思われるわけだ。
ではどうするのか?
ここから先はゲームの癖(スプライトの並び方の癖)などにも依存するのだが、例えばスーパーダメコンを例にあげると、このハードはスプライトの3個目が消えるということは、 言い換えると、並んでいる時、必ず0-1が表示される。ということは2個単位でズラしていった行くと・・・
同じ2フレームの表示でも、これの方が「平均的には消えている間隔は短くなっており、安定したチラチラに見える」のではないかと想像がつくだろう。
と、昔のプログラマは、こんな風にゲームやハードの癖を考えながらスプライトローテーションを作っていたわけである。
なにもかもが古い、昔の話である。
前回のを読んでおられない方は前回 の記事を読んでいただきたい。読まないと全くわからない話である。
ちなみにスプライトローテーションという言葉は、当時、ハドソンのエースプログラマの一人だった和泉さんが作った言葉ではないかという話を読者の方からいただいた。
前回の仮想ゲームマシン、ダメダメファミリーコンピュータ、略してダメコンが改良されてスーパーダメコンというのが登場したとしよう。
このスーパーダメコンは、なんとスプライトが5つ出せるようになった! …ということにしておく。
ところが、スプライトは一個増えたが、3つ以上が同じラインに並ぶとバッファ上の一番最後のスプライトが消えるのは変わらない…という状況だとしよう。
つまり表示能力は20%増しだが、スプライトの消える度合いは変わらないという、ダメなハードである。
で、この仮想ハードでは、前回のスプライトローテーションはマズいので、一工夫したほうが良くて、当時はそういう工夫を場合によってはソフト毎にやっていたのだ…というのが、今回の話になる。
実際にスプライトが表示が消える状況を以下に図示した。この意味がわからない人は、シツコイようだが前回 の記事を読んでいただきたい。
さて、スーパーダメコンになると実はヒジョーにまずい状況が起こりえて、前回のスプライトローテーションではダメなので、一工夫が必要、というのが今回の話なのだが、それをわかってもらうために、前回と同じスプライトローテーションをしてみよう。
なんとCは表示されないことになってしまう。
ここで選択肢としてCが表示されないのは諦めるという考え方もあるが、見えない弾にあたって死ぬのはイヤだ。
なんとかならないだろうか?
ローテーションのやり方をいじってみることにしよう。
いきなり反転して後ろから書くのではなく、一個ずつずらしていくという方法を取る。
具体的には
と、こんなふうに一個ずつスプライトと表示の対応をずらして行ってみる。
このようにすれば5/60秒の間で2フレーム表示されることになる。
1秒24回しか表示されず、かなり激しくチラつくことになるが、なんとか表示されているとは言えるだろう。
しかし、この方法はあまり頂けない。
というのもだ。実際の表示を見ると2フレーム連続で表示され、次に3フレーム(1/20秒だ)表示が消えてしまう。つまり1/30表示され1/20表示されないのはチラチラ度がひどいのではないかと思われるわけだ。
どっちにしたってチラつくだろってツッコミは許していただきたい。当時のプログラマはチラつき方にもこだわったのである
ではどうするのか?
ここから先はゲームの癖(スプライトの並び方の癖)などにも依存するのだが、例えばスーパーダメコンを例にあげると、このハードはスプライトの3個目が消えるということは、 言い換えると、並んでいる時、必ず0-1が表示される。ということは2個単位でズラしていった行くと・・・
同じ2フレームの表示でも、これの方が「平均的には消えている間隔は短くなっており、安定したチラチラに見える」のではないかと想像がつくだろう。
と、昔のプログラマは、こんな風にゲームやハードの癖を考えながらスプライトローテーションを作っていたわけである。
なにもかもが古い、昔の話である。
この記事のトラックバックURL :
トラックバック