科学・技術
Sega CD Silpheedのアートとエンジニアリング
The art and engineering of Sega CD Silpheed (fabiensanglard.net)
要約
この記事は、1990年代にリリースされたSega CD用ゲーム「Silpheed」の技術的な側面と芸術的な側面を掘り下げています。当時の制約の中で、限られたリソース(CPU速度、色数、帯域幅)を最大限に活用して、驚異的なアニメーションとビジュアルを実現したエンジニアリングの工夫について解説しています。特に、FMV(フルモーションビデオ)形式の効率化と、Mega-CDのハードウェアアーキテクチャがどのように利用されたかに焦点が当てられています。
全文翻訳
1990年代はビデオゲームコンソールの世界において、目覚ましい進歩を遂げた10年間でした。各新モデルは、妥協することなく、より高度な処理能力と優れたグラフィックスをもたらしました。しかし、90年代半ばに登場したCD-ROMドライブは異質な存在でした。640 MiBという容量はカートリッジの320倍でしたが、アクセス時間(800ms)と帯域幅(シングルスピード150 KiB/s)は、それぞれ4,000,000倍、35倍も遅かったのです。
Mega-CDは、セガがGenesisコンソールにCD-ROMをもたらすために考案したものです。このプラットフォーム向けに約200タイトルが制作されました。Sonic CD、Snatcher、Final Fight CD、そしてRPGなどの素晴らしいゲームがいくつかリリースされました。しかし、フルモーションビデオ(FMV)に大きく依存した無数のタイトルが、セガのアドオンに悪名高い評判をもたらしました(Night Trap、Prize Fighter、Slam City、Corpse Killer、Supreme Warrior、WireHead、A/X-101)。そして、Silpheedがあります。絶妙な芸術的センスと、息をのむようなアニメーションを可能にするエンジンを搭載し、メディアを熱狂させました。プレイヤーは、リアルタイム3Dと事前に計算されたものの区別がつかないほどでした。今日に至るまで、その賞賛は続いています。それでも感銘を受けない方のために、これらのほぼフルスクリーンのカットシーンが12.5MHzのm68k CPUで動作し、16色を使用し、150 KiB/sを消費することを覚えておいてください。16ビット16kHzの音楽とともに、15fpsのビデオストリームには、フレームあたりわずか8 KiBしか残されていませんでした。
私は過去2週間、空き時間を使ってFMVフォーマットのリバースエンジニアリングを行いました。これは、一行のコードも書かなかったという点で、私の通常の作業スタイルとは異なりました。来月には、私のAIフレームワークについて何か書き、オープンソース化するかもしれません。しかし、全体的に見て、これは心地よい作業方法であることはすでにわかっています。以下は、私が発見したことです。そして、トピックに慣れるために、すべてのカットシーンとゲームプレイの背景ビデオを見たい場合は、私が設計したツール(「書いた」とは言えません)で作成したストーリーボードがここにあります。
Sega-CDの内部構造101
Silpheedのビデオフォーマットをこれほど効率的にした最適化とトリックに飛び込む前に、Sega GenesisとMega-CDがどのように連携して動作するかを学ぶ必要があります。
GENESIS │ MEGA-CD │
┌──────────────────────┐ │ ┌───────────┐ ┌──────────┐
│ MC68000 7.67 MHz │ │ │ WORD RAM │ │ MC68000 │
│ ┌───┴──────┐ │ 256 KB │ │ 12.5 MHz │
│ 64 KB RAM ◄──┤Expansion ├────────►───────────┤
│ │ │ │ Port │ │PROGRAM RAM│
│ 8 KB Audio RAM (Z80) │ └───┬──────┘ │ 512 KB │
└──────────┬───────────┘ │ └─────┬─────┘ └─────┬────┘
│ │ └──────────────┬─────┘
┌─────┴──────────┐
│ │ │
│ ┌───────┐ ┌────┴────┐ ┌────▼──────┐ ┌─────▼─────┐
│ │ Ricoh │ │ ASIC │ │ VDP │ │ Z-80 │
│ │ PCM ├─────┤ GFX │ │ ┌───────┐ │
│ YM2612 │ │ └───┬───┘ └────┬────┘ │ │64KVRM │
│ SN76489 │ │ │ │ │ └───────┘
└───────┘ │ │ │
└─────┬─────┘ └──────┬────┘
│ │ │
│ ┌───────┴──────┐
│ │ ┌──┴──────┐ ┌────▼────┐
│ CD-ROM │ │ └───┤RCA Cable├─────────► MIXER ◄─┤ DRIVE │
│ └──┬──────┘ └────┬────┘ └──────────────┘
│ │ │ ┌────▼────┐
│ │ │ TV ◄──────────────────┼─────────────────────┘
└─────────┘
Mega-CDを追加すると、マシンは並列で実行される2つのシステムになります。Mega-CD側にはPCMとCD再生があり、ミキサーに直接接続されています。マリオカートのようなゲームに匹敵するグラフィックスアクセラレーション(回転/スケーリング/その他)を備えたASICがあります。2つのシステムは、共有メモリ(拡張ポート)とアナログオーディオミキシングを介して通信します。この仕組みを理解すると、Mega-CD開発者への敬意が以前にも増して深まりました。これは、特に同期において、対処するのが悪夢のようです。
Silpheedのアーキテクチャ
Mega-CDシステムは、依然として3つのレイヤーでテレビにレンダリングします。そのうち2つはタイルで構成され、バックグラウンド(AとB)と呼ばれ、1つはスプライトを含むフォアグラウンドです。サブCPUのm68kは、バックグラウンドBのタイルとタイルマップを書き込みます。一方、メインCPUは、HUDとフォアグラウンドスプライトレイヤーを含むバックグラウンドAの「描画」を担当します。サブCPUは、L1モードでWord RAMにレンダリングするダブルバッファシステムを使用します。一方のバッファがメインCPUによってVDPに供給されている間、もう一方のバッファで次のフレームをレンダリングします。
オーディオ側では、インタラクティブでないカットシーンは、PCM品質の音楽を生成するためにMega-CDのRicohのみに依存します。インタラクティブなシーケンス中、RicohはPCMオーディオサンプルに断続的に使用され、音楽はYM2612を介して行われます。
バックグラウンド A
バックグラウンド B
フォアグラウンド (スプライト)
オリジナルのGenesis(モデル1)のオーディオパスは、信じられないほど複雑です。Genesisの出力、フロントジャックポートは、物理的に「ミキシングケーブル」を介してSega-CDの背面にあるRCA入力に接続する必要があります。Sega-CDは、ラインイン信号を独自のCD-DA + PCM信号とミキシングします。その結果は、別のRCAケーブルを介して直接テレビに送信されます!
優れた設計上の決定
ほとんどのFMVゲームは、開発者がトップダウンアプローチに従い、貧弱なCPUを使用して小さなCD-ROMに実際のムービーを詰め込もうとしたため、見栄えが悪くなりました。そのために、泣きたくなるような、ごく小さなウィンドウ、圧縮アーティファクト、ディザリングを使用する必要がありました。Silpheedの場合、Game Artsは逆のアプローチを取りました。彼らはボトムアップで、システムの制約から上にエンジニアリングしました。フラットシェーディングポリゴン、合計16色、ゴローなし、最小限のディザリングといった優れたトレードオフの決定を下しました。このアプローチは、Game Artsの才能あるアーティストがいなければ決して成功しなかったでしょう。彼らはこれらの選択(特に限られた色数)で限界までやり遂げることができました。
PC-CDROMゲームは異なる話でした。より優れたCPU(DX4-100)のおかげで、より優れたコーデックを使用できました。Command & Conquer、Crusader: No Remorse、Wing Commander III(4枚組!)のような一部の資金力のあるゲームは、FMVを使用してストーリーテリングを劇的に向上させました。
帯域幅の問題
本質的に、FMVの問題は帯域幅の問題です。データはCD-ROMから抽出され、プロセッサによって画像に解凍され、その画像はビデオスクリーンに供給されてテレビに到達する必要があります。Mega-CDは、これら3つのすべての段階で装備が不十分です。
タイルマップの問題
一見すると、別の問題があります。フレームバッファがないため、レンダリングは、8x8ピクセルの768個のタイルを描画するという煩雑なプロセスに従う必要があります。タイルは、タイルマップ(Genesisの専門用語では伝統的に「ネームテーブル」と呼ばれる)を介して、画面上に32x28で配置されます。結果として、256x224の画像が形成されます。
帯域幅を削減する3つの簡単な方法
帯域幅を削減する最も簡単な方法は、ビデオのサイズを小さくすることです。Silpheedもこのトリックを使用していますが、上下のタイルラインを黒に設定するだけで、ごくわずかです(合計16ライン)。これは、シネマティックアスペクト比になるため、芸術的な選択のようにさえ見えます!
帯域幅を削減する2番目の方法は、フレームレートを削減することです。Silpheedは主に15fpsを使用し、一部の複雑なシーンでは7.5fpsまで低下します。
最後に、帯域幅を削減する3番目の方法は圧縮です。このために、カットシーンと背景ビデオは異なる方法で処理されます。
ビデオ圧縮
Silpheedはデルタ圧縮を使用しません。ビデオ内の各フレームは自己完結型です。各フレームには、必要なすべてのタイルと、タイルを画面に配置するためのタイルマップが含まれています。このように書くと、まったく圧縮がないように見えます。しかし、ここで、煩雑なタイルマップシステムが驚異的な最適化の源となります。カットシーンのフレーム44を例にとってみましょう。8x8ピクセルのグリッドを追加すると、画像には興味深い特性があることがわかります。たとえば、多くのタイルが同じ単色です。Silpheedのビデオフォーマットはこれを広範に利用しています。エンコーダーは、フレーム内の15個の単色タイルのうち1つだけを発行し、それをタイルマップで繰り返し参照します。このフレームでは、896個のタイルのうち456個が、同じ15個の単色タイルを参照しています。これだけで帯域幅が50%削減されます。右側には、単色以外のすべてのタイルがあります。これらについても、Silpheedは秘策を持っています。
Mega-CD ASICを解凍に活用する
456個のタイルが取られた