サターンの3D性能

目次

3Dゲームの文法

ポリゴン

SH2 の演算速度

ツインCPU

SGLの動作

ゲームの基本ジオメトリ演算サブCPU実行命令


SH2 の演算速度

サターンは、CPU に SH2 を採用していました。

日立の SH1 を、セガの要望でカスタマイズしたもの…と、セガはインタビューなどで答えていましたが、日立側の見解は多少違うようです。


まぁ、それはまた別の回で書くことにして、SH2 の計算能力について、ちょっとお話ししましょう。

以下、技術に詳しくない人には退屈な話かもしれませんが、次の話に移る前に必要なので細かな数字を多用します。斜め読みで構いませんので、もう少しお付き合いください。


3Dの表現では、2D以上に計算が多用されます。プレステでは3D専用の計算回路を持っていましたが、セガサターンは「究極の2Dゲーム機」を目指していたため、3D専用の回路など持っていません。3Dに必要な計算は、すべて CPU で行うことになります。


SH2 は RISC CPU です。RISC が何かは省きますが、簡単な命令しか持たない代わりに、高速に動作する CPU だと思ってください。SH2 は簡単な命令しか持たない。これが重要です。

ところが、SH2 には1つだけ、複雑な命令があるのです。それが「掛け算命令」でした。


SH2 は、基本的にすべての命令を1クロック(CPU が動作する最小の時間)で実行します。しかし、掛け算だけは1クロックでは実行できません。通常3クロック、状況によって2~4クロックと速度の変わる命令でした。


他の命令はすべて1クロックで実行されますから、3クロックと言うのは「遅い」のですが、実は SH2 は他の CPU よりも優秀でした。プレステの R3000 では、掛け算命令は 12クロックなのです。実は、3クロックと言うのは、当時としては「非常に高速」な部類でした。

しかも、掛け算命令は同じ3クロックの中で、掛け算をしながら足し合わせる「積和演算」という機能も使えました。後述しますが、3D の計算には欠かせない、行列の掛け算で威力を発揮する命令です。ただし、多少癖があるので使うのには他の命令との組み合わせが必要です。




…この「掛け算」が最大に複雑な命令であることに注意してください。掛け算以上に複雑な命令である、「割り算」は持っていません。

割り算は複雑すぎるため、「1ステップ除算」という命令になっています。これは、割り算の筆算1段分だけを計算する機能。繰り返し使うことで割り算を計算できます。


最初に「除算設定」命令で、割る数と割られる数を設定します。これは1クロック。次に、「1ステップ除算」を実行すると、「1桁分」の結果が得られます。

16bit の場合、2進数で16桁を計算する必要がありますから、1ステップ除算を16回繰り返すと結果が得られます。つまり、最初の設定を入れて 17クロック。これが割り算の速度で、非常に遅い計算です。


SH1/2 では、16bit÷16bit 、または32bit÷32bit の演算が行えます。
32bit演算の場合、32クロック…と単純にはいかず、64クロック必要です。
後ほど書きますが、3D演算での割り算は「画面上の表示位置」を求めるために必要で、画面のドット数は最大で 704ドット。
最終的に 704ドットを求める計算であれば、除算は 16bit の精度で十分です。
実際のゲーム中では精度を重視して 32bit 演算している可能性もありますが、以降は割り算を 16bit 精度で行っているとして話を進めます。



サターンの SH2 は 28.64MHz のクロックで動作します。1クロックで1命令だとすると、1秒間に 2864万命令を実行できる、ということです。

でも、先に書いたように、掛け算は 3クロック、割り算は 17クロックが必要です。


ところで、3D のポリゴンを「好きな位置」に表示するには、3D 演算を行う必要があります。このために「回転・移動行列」(以下、回転行列と記述)を使用します。これは、3x4 の行列です。

ポリゴンの移動とは、1つの頂点 (x,y,z) ごとに、3x4 の回転行列を掛け合わせることに相当します。


ここでいう「好きな位置に表示」とは、空間中に 3Dモデルを置き、同じ空間中にカメラを置き、これらの位置関係を考慮して画面上に投影する、と言う処理になります。
行列は、高校生で習う数学に出てきます。義務教育ではないので知らない方のために説明すれば、「いくつかの数値を組み合わせて、いっぺんに計算を書く方法」です。
いっぺんに書いてあるだけで、計算がいっぺんにできるわけではありません。実際の計算自体は、掛け算と足し算をひたすら繰り返すだけの、面倒くさいけど難しくはないものです。

先に書いた積和演算機能を使えば、この行列計算を素早くこなせます。1x3 の頂点座標を意味する行列と、 3x4 の回転行列の掛け算だと、12回の掛け算と9回の足し算を行うことになりますが…

CPU の命令の癖などに話がおよぶので、詳細は割愛。えーと、多分この計算は、最低でも 68クロックほどかかります。


最後に「透視変換」と言う処理が必要です。3D の中で回転・移動された頂点データを、画面の2D座標に変換する処理です。


この式は簡単で、X , Y の2点を、それぞれ Z で割るだけ。…処理は簡単ですが、遅い割り算を2回も使う必要があります。

透視変換も計算してみると、50 クロックほどかかります。


合計で 118クロック。これが3Dデータを好きな位置に持っていって表示する、「ジオメトリ演算」に必要な処理速度です。

実際には、回転行列を用意したり、ループする命令があったりと、周辺の処理もたくさんありますので、必要時間は 150クロックくらいと見積もってみましょう。


秒間 2864万クロックを、150クロックで割ると、およそ19万回です。

頂点数の数だけポリゴンが表示されるとして、19万ポリゴンが SH2 で計算できる最大のポリゴン数となります。


セガサターンのポリゴンは四角なので、1枚のポリゴンは4頂点必要となります。しかし、隣接したポリゴンは頂点を共有するため、十分にポリゴンがある中に新たなポリゴンを追加する前提であれば、1頂点で1ポリゴンの表示も可能です。
ただ、これは理論上の値です。実際には2割引きで15万ポリゴン、と言うところではないでしょうか。

次ページ: ツインCPU


前ページ 1 2 3 4 次ページ

(ページ作成 2013-11-05)
(最終更新 2014-12-02)
第2版 …他の版 初版

前記事:セガ・サターン     戻る     次記事:サターンのCPU
トップページへ

-- share --

256000

-- follow --




- Reverse Link -