プチメタ3.0

刺激を受けた物事に対する感想や考察、自己成長や資産運用、ゲーム作りに関することなど。


2D格闘ゲーム時代、「ストリートファイター2」の地面表現に感銘を受けた


1991年にゲームセンターに「ストリートファイター2」が登場し、
対戦格闘ゲームの大流行を巻き起こしたが、
当時の私が画面を見て衝撃を受けたのが
しっかりとした奥行きを感じるこの地面だ。


今なら3D表示処理で簡単に実現できるが、
当時はスーパーファミコンが発売されたばかりという
2Dゲーム全盛期の時代だ。この地面には本当に驚いた。




地面を単に一点透視法で描いただけでは
画面がスクロールしたときにも線が斜めになったままなので
いかにも平面画像を移動させただけという結果になり、
ここまで綺麗な立体感は出ない。


もちろんスト2内部のプログラムは見たことがないのだが、
おそらくこのように実現しているのだろう、という推測をしてみた。

2D表示で地面を立体的に表現する理屈


まず地面の画像を用意する。
上の方がステージの奥になるので
徐々に暗くなるように着色しておく。




この地面画像はそのまま丸ごと表示するのではなく、
横1行ずつに切り分けて表示する。
たとえば800×200のサイズなら
幅800ピクセルの画像を1行ずつ200回表示する。




その際、各行を横方向にだけ縮小する。
そして画面の上方向ほど縮小率を上げて
ステージの奥に行くほど小さく表示されるようにする。


これならただの画像の縮小処理なので
2D表示しかできないハードウェアでも可能だ。




縮小した分、画面の横幅に対して画像が足りなくなるので
同じ行の画像をループ表示させる形で補填する。




各行の表示位置を左右にズラす
(正確には元画像の取得位置をズラす)ことで
まっすぐ奥を見たまま
地面が左右に移動しているように見せられる。




実際に2D表示処理だけを使って
地面と奥の壁を表現するプログラムを自分で再現してみた。
使っている画像の違いはあるが、
おそらくこの理屈で正しいのではないかと思う。


処理の仕方は以前紹介したラスタースクロールとほぼ同じで、
2D表示しかできなかった時代に
いろいろなクリエイターが工夫した様子が感じ取れる。



mclover.hateblo.jp

mclover.hateblo.jp

reblog.hateblo.jp

総アクセス数