サターンの3D性能
目次
ツインCPU
さて、セガサターンの完成が近づいたとき、後のライバルとなるプレイステーションの噂が徐々に伝わってくるようになります。
プレステは R3000 という CPU を、33.86MHz で動かしていました。
動作周波数が2割ほど高いですが、これはそれほど脅威となる能力差ではありません。
それよりも、プレステは3D演算用に、ジオメトリエンジンと呼ばれる計算回路を搭載していました。
先に計算したように、セガサターンではジオメトリ演算を秒間19万回行えます。プレステでは、この処理を専用の装置に任せることにより、秒間450万回を達成している、としていました。
ただ、450万ポリゴンが表示できるわけではありません。ジオメトリエンジンは「頂点単位」ではなく「ポリゴン単位」での演算が基本だったようで、秒間150万ポリゴンが実際の計算速度になります。また、計算能力は高くても表示が追いつかず、表示能力は36万ポリゴンが公称値となっています。
両機能とも使うと、ジオメトリ演算は50万ポリゴン、表示は14万ポリゴンが公称値です。ただし、これらの機能を「全ポリゴンに適用する」必要はないでしょうから、ここまで性能を落とすことはないでしょう。
セガサターンは「究極の2Dゲーム機」だったので、表示能力は十分にあります(公称秒間 30万ポリゴン)。
問題は計算能力です。先に書きましたが、3D計算だけをやっても 19万頂点。実際にはゲームを動かさないといけないので、半分の時間をゲーム処理に取られたとしたら10万頂点程度でしょう。
サターンの計算の場合、隣り合ったポリゴンは頂点を共有します。しかし1頂点で1ポリゴン出るわけではないので、2割引きで8万ポリゴン程度でしょうか。
プレステの36万ポリゴンはピーク値ですから話半分で18万ポリゴンとしても、サターンはその半分も表示できないことになります。互角に戦うには、せめて2倍の計算量は欲しい…!
計算能力を大幅に上げる策が必要でした。しかし、ジオメトリエンジンのような装置を設計するのには、非常に時間がかかります。
日立には、セガから「もっと性能を上げられないか」という相談が持ち込まれます。しかしもう設計に残された時間はわずかで、今から性能を2倍に引き上げるなんて、魔法のような方法があるわけがありません。
…いや、ありました。「こんなこともあろうかと!」ではありませんが、SH2 に搭載されていた、もう一つの機能が注目されます。
SH2 はセガの依頼を取り入れて設計されましたが、セガ専用の特注品と言うわけではなく、日立社内での要望によってつけられた機能もあったのです。
それが、マルチプロセッサ機能。2つの CPU を協調動作させ、演算力を増加させるための仕組みです。
日立社内の有力者の依頼を無視できず、「渋々」つけられた機能でした。研究用の側面が強く、設計者は「きっとだれにも使われることはない機能だろう」と思っていたそうです。
マルチプロセッサ機能を使えば、CPU はそのまま、セガ側の設計もほとんど変更を加えないまま、CPU を倍増できます。つまり、性能も倍になるのです。
現在(2013年)では、パソコンでもマルチプロセッサが当たり前ですが、2000年以前はマルチプロセッサは非常に珍しい構成でした。そのため、マルチプロセッサに慣れているプログラマが少なく、サターンは事実上シングルプロセッサとして使われていた、という噂があります。
…根も葉もない都市伝説です。
先に書いたように、SH2 1つでは性能が全然足りず、シングルプロセッサでは事実上 3Dゲームは作れませんでした。
本体と同時発売タイトルの一つ、バーチャファイターは、業務用のプログラム (V60のアセンブラで記述)を、SH2 に変換する「コンバータ」を作り、コンバート後のプログラムを修正していく…という形式で作られています。
先ほど書いた通り、MODEL1 ではジオメトリ演算を行う回路があり、3次元座標でポリゴンの表示を指定するだけで表示が行われます。しかし、サターンでは前述のように SH2 で計算を行う必要がありました。
2台の SH2 を上手に使い、計算を行うプログラムが作成されます。ただ、開発期間が短かったことなども影響したのか、このプログラムはバグだらけで、「サターンは想像していたより性能が低い」という印象を与えてしまっただけでした。
それでも、バーチャファイターは「良い叩き台」でした。セガサターンで実際に動作する3Dゲームを作り上げたのですから。
バーチャファイターのプログラムはこの後解体され、3D 演算ライブラリとして再構成されます。もちろんバグも修正され、2Dでも3Dでも使いやすい形にまとめ上げられています。これが、当時は「新OS」とも言われていたSGL … SEGA Graphics Library です。
SGLの動作
ゲームの基本
SGLの動作説明の前に、ゲームを作成するうえでの「基本」を説明しましょう。ファミコンでもメガドライブでも同じ、基本中の基本の部分です。
たとえばシューティングゲームを想像してください。
自分が操作した通りに自機が動くのも、撃った弾が飛んでいくのも、敵が動いているのも、敵の放った弾幕が美しく散らばるのも、全部プログラムで動かしています。
ゲーム開始直後、自機が表示されているだけで敵が何もいない時と、巨大なボスの前で100発の弾幕を避けているときとでは、プログラムが処理しなくてはならないキャラクターの量は異なります。
当然、プログラムの処理速度も変わります。開始直後はすぐに処理が終わるでしょうし、ボスの前では処理に時間がかかるでしょう。
しかし、開始直後は自分の動きが速く、ボスの前では遅い…なんてことはありません。
あれはあれで「低い処理能力で頑張っている」感じがして好き。
これは、「画面の描画タイミング」を使ってゲームの処理速度を整えているためです。
テレビの NTSC 信号では、1秒間に画面を 60回描き変えます。ゲームのプログラムは、この画面1回分を基準に動いているのです。
具体的には、ゲームの処理は 1/60秒以内に必ず終わらせるようにします。速すぎる分には構いません。そして、処理が終わると、CPU は画面描画が終了するのを待ちます。
ついでに言っておけば、ここでいう「ゲームの処理」では、一切画面を変更しません。画面描画中に画面を変更しようとすると、表示が乱れるためです。
そのままではゲーム進行状況で処理の量が変化し、速度が変わってしまいます。
それを、ピンクで示した「描画終了待ち」で一定の速度に整えています。
そして、画面描画が終わったタイミングを見計らって、画面を変更します。これによってゲームの速度は安定しますし、画面も乱れず、綺麗な画面が表示できます。
描画タイミング待ちには2つの理由があるのです。
そして、次の1/60秒のゲーム処理を開始します。これが、ゲーム作成の基本中の基本となります。