ソフトウェアレンダリング vs. スプライトを使用したポリゴン

追記 : メガCDのくだりを削除。(see comment)
追記 : SSのVDP2の説明がおかしいのでstrike。(see comment)
追記 : そういえばPC-FXGAにはZバッファが有った。。当該部分を削除。もっとも、PC-FXGAは家庭用ゲーム機としては販売されなかったけど。。
初期の3Dゲームハードウェアは純粋なソフトウェアレンダリングによるもの と、いわゆる"フレームバッファ方式"のスプライト表示ハードウェアを3D対応にしたもの の2種類に大別される。(他にワイヤーフレーム表示も有るが。。)

ソフトウェアレンダリングによるもの

http://d.hatena.ne.jp/mjt/20140124/p1 めくるめく(リアルタイム)ソフトウェアレンダラの世界
SFCのSuper FXやいくつかのメガドライブのゲームはソフトウェアでポリゴンを描画している。これらの描画手法は非常にまちまちで、あまり系統立っていないことも多い。つまり、ゲームルールによるいくつかの仮定(assumptions)を活用していることがある。(例えば、プレイヤーキャラクタは常に最後に描画する等)
PCベースのゲームもここに分類される。レンダリングは高速化やデータ格納の面でそれなりにテクニックの必要な領域なので、ゲームエンジンを生む原因にもなった。

id SoftwareのWolfenstein3D→DoomQuakeの流れは重要で、Quakeに至るまでのエンジンは今日想像されるような完全な3Dエンジンではなかった。Wolfensteinは天井や床にテクスチャを適用できなかったし、Doomまではそもそもキャラクタは2Dスプライトであった。
Super FXやメガドライブバーチャレーシングに使用されたSVPは単なるDSPで、たとえばテクスチャフェッチだとかディスプレイリストの処理のための専用のハードウェアを持っていたわけでない。Super FXはヨッシーアイランドのようなゲームではスプライトの座標計算やスプライト同士の合成、スプライトの回転など2D作業にも使用されている。
Super 32Xはポリゴン描画のための専用ハードウェアは持っていないが、フラットシェーディングなポリゴン描画のための支援機構をいくつか持っている。(指定ラインFillのためのハードウェアサポートや特徴的なRLEモード等)
この手のゲームがいつから存在するかは何とも言えない。少なくともAtariのHard Drivin'はAtari ST(1985)で動いていたし、テクノソフトのプラズマライン(1984)もある。GBA(2001)がこの手のテクニックを必要としたゲーム機としては最後のものだろう( http://matome.naver.jp/odai/2133760130221807201 )。

中間的なもの

完全にCPUを使用する代わりに、描画の"一部"をハードウェアで行う方式もそれなりに有る。

Jaguarは内蔵するDSP Tomの内部にBlitterと呼ばれる描画ハードウェアを持ち、グーローシェーディングやZバッファを含む高度な描画機能を備えていた(ZバッファはN64まで他の家庭用ゲーム機には存在しなかった) - もっともこれらはプリミティブとして用意されているのに過ぎないので、Jaguarのゲームはプログラマの腕に依るところが大きかった。Jaguarは経験豊かなプログラマによってアセンブラでプログラムされることを前提としており、リッチな固定機能ハードウェアを多く備えたSSや、ゲーム向けのC言語ライブラリを基本に据えたPSとは対称的と言える。
Blitter( http://en.wikipedia.org/wiki/Blitter )は9801で言うところのGDCのようなハードウェアで、一般にGDCよりも高度な描画処理を実装している。Jaguarはこれに加えてObject Processorを持ち、そのどちらでも描画することが出来た(なんてことだ)。
Jaguarは非常にリッチなハードウェアサポートを持ちながら、シンプルな描画でもそれなりのプログラミングが必要になるという面ではかなり奇異なアーキテクチャといえる。現代的なOpenGLプログラミングでは三角形一つ出すのにもシェーダが必要だが、それに近いものが有る。

Super 32Xは、水平line fillとRun-Lengthフレームバッファというフラットシェーディングなポリゴン描画を想定した機能が装備されている。これは家庭用ゲーム機としては唯一と考えられる。。
Run-Lengthフレームバッファは、スキャンラインごとに色と長さのリストをもたせられるようにしたモードで、SEGAはこのモードをフラットシェーディングなポリゴン向けと主張していた(?)。

スプライトを使用したポリゴン

(= ハードウェア実装されたリストプロセサによるもの)
まず、スプライトの表示メカニズムが"ラインバッファを使用したもの"と"フレームバッファを使用したもの"の2つに大別される。

(スプライトの実現方法) ラインバッファ法 フレームバッファ
デスクリプタ レジスタ メモリ上
表示数 固定 可変
配置 横方向の数に制限がある 無制限
採用 FC、GB、MD、... SS、3DOMEGA-CD、...

フレームバッファ方式のスプライトエンジンは、メモリ上に表示リストを置き、適当なタイミングでkickしてメモリ上に配置したフレームバッファに絵を書かせる。これは近代的な3Dハードウェアと大差ない。
描画はリストの先頭から順番に行われるため、立体的な描画のためにはCPUでデータをソートする必要がある。
MEGA-CDフレームバッファはあまり高速でないので、1〜2枚程度の拡大/回転にしか使用されていないことが多い。シルフィードスターブレードのような幾つかのポリゴンゲームがあるが、様式としてはプリレンダリングに近い(頂点リストを毎フレームCDから読む)。


いわゆるポリゴンを使用した初のゲームとして知られるI, Robot(Atari、アーケード)はpoint、line、polygonの3種のオブジェクトを描画することが出来た( http://atarihq.com/danb/IRobot/Video%20Hardware.pdf )。
I, Robotの描画ハードウェアはラインの描画のために"傾き"成分も予め計算して与える必要があった。描画中の増分の計算は表引きで行われる。
I, Robotは最初のポリゴンゲームでありながら(ゲーム自体のデキは別として)それなりの完成度を誇っている。家庭用ゲーム機がこれに追いつくまではSuper FXによるStar Foxを待たないといけない。
Polygonはいわゆる台形(Trapezoid)で、ハードウェアには両端の傾きを与える。


現在も続くNeed For Speedシリーズは3DOで最初にリリースされた。当時としては良いグラフィックス。
3DOは"CEL engine"と呼ばれる描画ハードウェアを持ち、家庭用ゲーム機では初めてポリゴンの描画を想定した描画エンジンをハードウェアで搭載した。このため、専用ハードウェアという意味では、家庭用ゲーム機にはフラットシェーディングの時代は来なかった(Super 32Xは除く。また、闘神伝のようにPSではフラットシェーディングで速度を稼いだゲームがたまに有る)
CEL engineは、いわゆるスプライトの各頂点を自由に配置して描画することができる。プリミティブは四角形のみ。

サターンは2つのVDP(描画用IC)を持ち、VDP2が伝統的な2DゲームグラフィックスのためのBG/スプライト描画機能を持ち、VDP1がディスプレイリスト方式の柔軟なスプライト(= ポリゴン描画)機能を持っていた。
描画機能は3DOのCEL Engineに比べ強力で、ライン描画、メッシュ、グーローシェーディング等の機能を備えていた。
... これらの拡張スプライトとして実装されていた描画システムは、描画の最少単位が四角形になるため、現在一般的な三角形ベースのレンダリングに比べるとデータの作成等で多少の配慮が必要になる。

描画アーキテクチャの歴史的展開

こう並べてみると、

  1. レジスタにキャラクタの位置をセットして描画
  2. (ソフトウェアでbitmapを生成する)
  3. レジスタにリストのアドレスをセットして描画

と、一連の進化の"流れ"が有るようにも見える。
3DOやSaturnのような、  "描画リストを生成して、アドレスをGPUにセットして描画"  は現代のGPUでも同様に用いられている概念で、言い換えればゲームの描画手法は1993年に確立されていると言える。これの次の描画アーキテクチャが有るとしたらどのような物になるのだろうか。
もちろん、描画リストの生成も大きく進化を続けている。描画リストを生成するためには3次元の座標計算が必要になるため、CPUはSIMDエンジンを備えるようになった。他にもマルチスレッドで描画リストを生成したり、生成した描画リストをパッチしたり、オフライン(= ゲームの実行前)に描画リストを生成したりといったテクニックも用いられている。