2005/04/04(月) [n年前の日記]
#9 [game] ファミコンの色数制限ってどのくらいだったんだろう
_こちらで詳細解説が。 「ファミコンが使えるのは52色中25色」だそうです。なるほど…。
ということで、以下、自分の解釈はあちこち間違ってますが。一応、調べた過程として残しとくのであります。
◎ 調べた過程 :
_ファミリーコンピュータ - Wikipedia
を眺めた。「パレット数 : RGB各16色 + グレー5色」「同時発色数 : 52色」とある。パレット数の記述が意味不明。同時発色数の52色もどうやって算出されたのやら…。
_こちらのページ を見ると、「同時発色数は4色」とある。何の同時発色数だろう。…スプライト?
_「最終的に宮本茂さんが五十四色を選択」 とある。すると、54色の中から選べるのか。…ちょっと待て。54色? 2色増えてますけど…。このページを書いた方は、色数の数え方が他とは違うんだろうか。何か特殊な種類の色が存在していて、それについてもカウントしていたりするのかな。それとも単に勘違いか。謎。
_こちらのページ を見ると、「同時発色数は4色」とある。何の同時発色数だろう。…スプライト?
_「最終的に宮本茂さんが五十四色を選択」 とある。すると、54色の中から選べるのか。…ちょっと待て。54色? 2色増えてますけど…。このページを書いた方は、色数の数え方が他とは違うんだろうか。何か特殊な種類の色が存在していて、それについてもカウントしていたりするのかな。それとも単に勘違いか。謎。
◎ _ファミコンの詳しい話 :
おお。詳しい解説が。
BGについては以下のような感じらしい。
要するに。スプライトだのBGだのに使うキャラクターには、4色分使えて。しかも、パレットは4つ。4色分 x 4パレット で、16色分。画面の中で、16色までは、同時に表示できたということだろうか。
← 2005/04/10追記:この解釈が間違ってた。これを書いた段階では、「スプライトにもBGにも同じパレットを使うもの」と思い込んでたけど。「スプライトと、BGは、別々のパレットを割り当てられる」というところがミソだったらしく。
そして、その16色分
25色分に割り当てる実際の色は、宮本氏が選択したという52色の中から選べる、みたいな?
しかし透明色もあるから実際はそれより少ないのか…。いや、透明色は背景色として埋められるだろうから、やっぱり16色までは出るのかな。うーん。
← 透明色分も加味しての、25色分ということで。
_「ファミコン当時は基本4色4パレットのスペックしかありません。」 とある。とりあえず、16色までしか使えないと考えればいいのかしら。
← これも間違い。想像するに、おそらく件の記事中で語られてるのは、スプライト、もしくは、BGのどちらかに絞り、かつ、透明色を意識しない場合、の話かもしれないと。
最大の特徴であるスプライトは、8x8dot、4色(うち一色は透明)のものが64枚使えます。一つは透明色、ということは、実質3色でせうか。
表示パレットは4つのなかから選択でき、ふむ。
BGについては以下のような感じらしい。
表示画面の大きさは256x240dotで、スプライトとは別の8x8dotのキャラクターを並べることで構成されます。こちらもキャラクターの色は4色、パレットは4つのなかから選ぶことが出来ます。ただし、パレットはキャラクター4つを組みにした16x16dot領域ごとに指定可能でした。
要するに。スプライトだのBGだのに使うキャラクターには、4色分使えて。しかも、パレットは4つ。
そして、その
_「ファミコン当時は基本4色4パレットのスペックしかありません。」 とある。
◎ _ファミコン PPU :
メモリマップ等の資料。複雑。
2つ持ってはいるけど、実質1つということかしら。
← この認識も間違い。ミラーリングされるのは、透明色に相当する部分だけ。そして、2つ持ってるのは、スプライト用と、BG用として2つ使うから、ですかな。
_こちら にも資料があった。合ってたみたい。
← や、自分の解釈がちょっと間違ってたわけで。
パターンテーブルには,実際のタイル(8x8ピクセル)が格納され,ネームテーブルから参照されます.また,ファミコンのパレットに格納される16色全部を操作するためには,4ビットのカラーマトリックが必要になりますが,パターンテーブルには,この4ビットの下位2ビットが格納されます.1dotあたり2bitあるので、0〜3 まで表せる。つまり4色使えると。
アトリビュートテーブルの各バイトは,画面上に表示されている4x4のタイル群に対応しています.アトリビュートテーブル内の1バイトの機能を説明するには,いくつかの表現があります.なんかよく判らんが…アトリュビュート云々には2bit分入ってると。前述のパターンテーブル内で、2bit分が入ってるから、(2+2)bit = 4bit = 16色を表現できるということかしら。
* 32x32ピクセルの格子の1格子分に対応する上位2ビットを保持(16x16ピクセル毎)
* 8x8ピクセルのタイルの16タイル分に対応する上位2ビットを保持
* 4x4タイルの格子の4格子分に対応する上位2ビットを保持
ファミコンは,16色の「パレット」を2つ(イメージパレット,スプライトパレット)持っています.これらのパレットは,物理的なRGB値を保持するわけではないので,実際のパレットというよりは,「ルックアップテーブル」というほうがふさわしいでしょう.む。16色のパレットを、2つ持ってる?
ミラーリングは,イメージパレットとスプライトパレットの間で発生します.$3F00に書き込まれたデータは,すべて,$3F10にもミラーリングされます.$3F04に書き込まれたデータは,すべて,$3F14にもミラーリングされます,等々.
なお,$3F00-$3FFFに書き込まれるデータ(バイト)のD6-D7は,無視されます.残り6bit。6bitあれば、64まで表せる。なるほど、52色分はカバーできそう。
_こちら にも資料があった。
ファミコンは64色16色使えます。
色は6bit(64色)で指定しますが、RGBでの指定ではなくあらかじめ決まっている64色の色の何番目の色を使うか指定します。
パターンの色はパレット番号で指定しますが、タイルパターンには下位2bitだけ格納します。
属性テーブルはネームテーブルで並べられたタイルパターンのパレットの上位2bitを格納します。なるほど。
◎ ということは、ですよ :
その宮本氏が選択したという52色だかのRGB値を得て。かつ、その52色から
16色
25色だけ選んで描けば。かなり正確なファミコンライク画像を作るのも夢ではないということでせうか。
と思ったけど。さらに正確さを求めれば…
つーか、フルカラー画像から減色して、BGとスプライトに分類して並べていく変換ツールでも作ったほうが早そうな気もする(爆) <今時そんなの作ってどうするねん。
と思ったけど。さらに正確さを求めれば…
- BGは、16x16dot毎に、
4色3色+背景色を使用。 - スプライトは、3色を使用。
- BGとスプライトに使える8x8dotのキャラクターは256x2個しか持てない。
- スプライトは64個、画面に置けるけど、1ライン単位では横方向に8つまでしか並べられない。
つーか、フルカラー画像から減色して、BGとスプライトに分類して並べていく変換ツールでも作ったほうが早そうな気もする(爆) <今時そんなの作ってどうするねん。
◎ _ファミコンパレット :
おお。ファミコンパレットらしきデータが。素晴らしい。なるほど、こういう色だったのか…。たしかにファミコンっぽいなぁ。
◎ 2005/05/07追記 :
ツッコミ欄で、面白い話を聞かせていただきました。thxです。とりあえず引用してみたり。
メモリマップ等の資料から、上限は、6bit分=64色なのは間違いないのだろうけど。そのうち、実際に使える色数については、諸説あるという感じのようで。…色数すら謎に包まれてるとは、侮れない(?)ゲーム機だ!! (´Д`) >ファミコン。
昔、PanasonicA1という機種のMSX2の販売添用プロモビデオ見たことあるんですが、その中ではファミコンは58色つってました(MSX2は256色も出るぞ!という比較で)52色、54色、58色…。うーむ。どれが真実なのやら。
メモリマップ等の資料から、上限は、6bit分=64色なのは間違いないのだろうけど。そのうち、実際に使える色数については、諸説あるという感じのようで。…色数すら謎に包まれてるとは、侮れない(?)ゲーム機だ!! (´Д`) >ファミコン。
◎ 2005/04/10追記 :
おお! ツッコミ欄で、
_詳細、かつ、正しい情報
を教えてもらいましたです。感謝感激であります。ということで、上記のあちこちを、修正しておきました。
せっかくだから(?)、件のページと、ツッコミ欄の内容を、引用させていただくのであります。 *1
せっかくだから(?)、件のページと、ツッコミ欄の内容を、引用させていただくのであります。 *1
まず、ファミコンのパレットは1キャラクター4色です。ただし、必ず透明がありますので実際には3色となります。この3色セットが、4パレットあります。さらに、このパレットがスプライトとBGで別々に設定できます。また「すべてが透明」の部分に表示する背景色も指定できます。
つまり、3色 x 4パレット x 2(スプライト・BG別) + 1(背景色) = 25 色が1画面中に同時発色できます。
もっと表示したいのであれば、走査線割り込みを使用してパレットを書き換えるという方法があります。これにより、25色以上出すことも不可能ではありませんが、これはちょっとした裏技ですね。
52色というのも中途半端に思えますが、別に宮本さんが選んだ色ではなく、理由があってこうなっています。(宮本さんが選んだ、というのは「256色程度必要か、64色程度でよいか、というようなバランスを、64色程度に決定した」という意味合いかと思います)
ミラーリング云々は、「どのパレットに書かれたものでも、透明色部分は背景色の扱いとして共通になるよ」って意味です。パレットの数とは無関係で、実質1つなどの意味ではありません。
16色パレット(うち、透明4つ)は2本ですので、16色という記述も誤りになります。(16-4) x 2 + 背景色1 = 25 色が同時表示性能ということになります。なるほど。そういう仕組みなのかと感心することしきり。うーむ。深い。深いぜ、ファミコン!! あの小さいケースの中に、色一つとってもこれだけ知恵(?)が詰まってるのだなぁ…。なんだか感慨深いであります。
*1: このページ、ツッコミ欄のログは、ファイルとしては日記ログと別領域に記録されてるので…。重要な情報は日記ログにも書いておいたほうが、いざという時に安心なのです。それもあって引用させていただきたいなと… (^^;
この記事へのツッコミ
[ ツッコミを読む(5) | ツッコむ ]
以上です。
その中ではファミコンは58色つってました(MSX2は256色も出るぞ!という比較で)
なんと! 情報thxです。
うーむ。52色、54色、58色…なんだか色が増えていく…(笑)
あれだけ普及したハードなのに、利用できる色数にすら諸説あるとは。
なんだか不思議な現象というか、それ自体、興味深いであります。
せっかくなので、表示できる色数について追記しておきました。
正解を言ってしまえば、52色中25色表示がファミコンの表示性能です。
52色というのも中途半端に思えますが、別に宮本さんが選んだ色ではなく、理由があってこうなっています。
(宮本さんが選んだ、というのは「256色程度必要か、64色程度でよいか、というようなバランスを、64色程度に決定した」という意味合いかと思います)
ミラーリング云々は、「どのパレットに書かれたものでも、透明色部分は背景色の扱いとして共通になるよ」って意味です。
パレットの数とは無関係で、実質1つなどの意味ではありません。
16色パレット(うち、透明4つ)は2本ですので、16色という記述も誤りになります。
(16-4)*2 + 背景色1 = 25 色が同時表示性能ということになります。
なんと! 情報thxであります!
そういう仕組みでしたか…なるほどなぁ…。
ということで、記事のあちこちを修正しておきました。感謝であります!
> 宮本さんが選んだ=「バランスを、64色程度に決定」という意味合い
なるほど。
てっきり、「1色1色を選んでいった」と思ってましたです。
全体的にどのくらいのスペックにするか、
というあたりで働きかけをしていたわけですね。
(でも、1色1色を選んでる姿を想像するほうが、
エピソードとしては、どこか劇的な感じもするなぁ(笑)
なもんで、ついそのようにイメージしちゃってたのかもしれない…)