フラクタルエンジンの謎


まずフラクタルエンジンとは何かから説明しましょう。フラクタルエンジンと は英国シグノシス社が開発した動 画エンジンの事です。「フラクタルエンジンデモ」「マイクロコズム」「スカ ベンジャー4」「メガモーフ」等に使われました。FMTOWNS ユーザーなら知らない人はいないくらい有 名です。フリコレにもスカベンジャー4 のデモが入っていました。また、 FMTOWNS ユーザーでなくとも、当時パソコン店をう ろついていた人ならそのデモの凄さに驚かされた筈です。

等速の CD-ROM、386SX-16MHz 程度の CPU なのに、ほぼ全画面で滑らかな動画 が途切れなく流れていました。果して、これはどのような技術によって行なわ れていたのでしょうか? 結論から書きますと、これは「全画面スプライト」で す。これからそれは一体どういうものか探ってみましょう。なお、ここに書か れているフラクタルエンジン技術については全て推測です。逆アセンブル、逆 コンパイルなどは行なっておりません。また、「フラクタルエンジンデモ」の フラクタルエンジンについては省いています。


まず、FMTOWNS のスプライトについて説明します。 FMTOWNS は「フレームバッファ方式のスプライト」 を搭載しています。X680x0 等の「ラスタースキャン方式のスプライト」に比 べて「疑似スプライト」と呼ばれたりもしましたが、これはアーケードゲーム にも使われているような、列記としたスプライト方式の一つです。

具体的に書きますと、FMTOWNS の画面モードの一 つに仮想画面 256x512dot 32768色のモードがあります。この内、実際に表示 されるのは 256x240dot の範囲だけです。仮想画面の方が実際に表示される画 面より 2倍程度広い事が分かります。そこで仮想画面を二つに分け、片方を表 示している間にもう片方にスプライトを描画して、VSYNC(垂直同期) が来たら 表示する側と描画する側を交換します。こうする事によりちらつきの無い表示 をしているのです。

描画するスプライトですが、これは 2種類あります。32768色スプライトと、 32768色中 16色のスプライトです。後者のスプライトはパレットを使っていま す。これは 16種類の色のパレットを持っていて、1番なら何色、2番なら何色 と言う風に表示する物です。但し、0番は透明色として使います。0番の色は描 画されず、下の背景などが表示されます。そして、スプライトの大きさは 16x16dot 固定です。


ではこれからフラクタルエンジンの技術について探っていきましょう。スカベ ンジャー4 の画面サイズ(実際に動画が動いてる部分)は 256x160dot です。 32768色だと 1dot 2Bですので、256*160*2=81920B のデータになり ます。CD-ROM の転送速度は約 150KB/s です。これだと秒間 2枚も表示できま せん。その為にデータの圧縮が必要になります。例えば 1枚辺り 15KBに圧縮 すると秒間 10枚表示される事になります。

画像の圧縮では 1枚の絵を細かいブロックに分け、それを圧縮していく方法が よくとられます。そこで、1ブロックを 1個のスプライト16x16dot とし、こ れを圧縮していく事を考えます。

1ブロック 16x16dot は 32768色だと 16*16*2=512B になります。これを 16色 スプライトで表すと、16*16*4bit=128B になります。パレットは 16色分ある ので、16*2=32B あります。併せて 160B です。これだけで 160/512*100=31.25% の圧縮になります。全画面だと 25600B となり、秒間約 6枚となります。処で、パレットは幾つかのスプライトで共有する事も出来ま す。つまりパレットは全ブロックには必要ありません。ここでパレットを一つ も使わないとすると 128/512*100=25% となり、秒間約 7枚になります。スカ ベンジャー4 の画面を見てみてください。似た様な色の部分が多くあります。 そういう部分ではパレットを共有していると考えられます。スプライトの処理 は FMTOWNS ではハードウェアによって行なわれるので、 CPU パワーもほとんど食わないと考えられます。

さらにスカベンジャー4 の画面をよく見てみて下さい。のっぺりとした部分で は 2・3色しか見られないと思います。2・3色しかないと言う事は、そこの部 分は 2bit で表す事が出来ると言う事です。16*16*2bit=64B、パレットも 4*2=8B で済みます。合計すると 72Bです。これは約 14% です。全画面だと 11520B、秒間約 13枚表示できます。パレットを使わないと約 14枚です。全画 面のっぺりとした画像と言う事はありませんから、6〜14枚になります。

ここまでは単にデータ形式を変換しただけです。それだけでもかなりの圧縮が 出来ました。実際は、さらに同じ様なパターンのブロックをまとめたり(ベク トル量子化)、前の画面で使われたパターンを使い回したり(動き補償付きフレー ム予測)、ランレングス圧縮なども併用していると考えられます。これがどれ くらいの圧縮になるかは一概には言えません。画像の種類や、アルゴリズムに よって大きく異なるからです。しかし、データ形式を変換しただけで上記の様 になったのですから、滑らかな動画(秒間 8〜10枚以上)が表示されるくらいに は圧縮できる筈です。


さて、以上の事は机上の事です。本当にフラクタルエンジンは上記の様な事を 行なっているのでしょうか? FMTOWNS のスプライトRAM は、リセットを押してもその内容が残っています(インデックス部やパレット は破壊されます)。その性質を利用して、ゲームに使われたスプライトを吸い 取るツールが FMTOWNS にはあります。そのツールを使ってみると、 自機・敵機・弾などの他に地形データも確かにあります。そう、フラクタルエ ンジンは確かにスプライトを使って動画を表示していたのです。


(c)1999 村上 智一
tomone(at)p-act.sakura.ne.jp
Last modified: Fri Jan 5 17:42:59 2001
戻る