2016年05月31日の日記です


色数と VRAM 構造  2016-05-31 15:05:32  コンピュータ

FM-77AV や X1turboZ は、白黒画面を 12枚も持つ形で 4096色の画面表示を実現していた、という話を1年前に書いた

今更その関連話題を書きたくなった。


まず、以前の話を、ざっと概要だけおさらいしておこう。


ここに書いてある内容、少し誤りがあります。近いうちに修正予定。

カラーテレビの信号方式(NTSC信号)の記述がおかしいようです。詳しい方から指摘ありました。感謝。

僕自身、ソフト屋なので VRAM 構造までは理解しているのですが、そこから先の動作はちゃんと理解できていません。

勉強しながら書いた形ですが、理解不足でした。お詫びいたします。


8bit 機の時代は、メモリが2つの意味で貴重だった。


今よりもビット単価が高く、メモリは高価なものだった。

そして、CPU から扱えるメモリ空間はたった 64KByte で、画面表示用メモリ (VRAM) を多く搭載するわけにはいかなかった。


そこで、一般的には CPU から扱えるのは白黒画面とした。

640x200 の解像度で、白黒2値なら 16Kbyte 。


これを何らかの方法で「複数画面」もつ。

色つきのセロファンを重ねればいろんな色を出せるように、色付きの白黒画面を重ねて多くの色を出そう、という発想だ。


CPU からは特殊な方法で、アクセスできる画面を選ぶようにする。

同時に1つの白黒画面しか書き換えられない代わりに、占有するメモリ空間を少なく抑えられる。


3画面重ねれば8色、4画面重ねれば 16色を出せる。



でも、FM-77AV や X1turboZ では、なんと 12画面も重ねて、4096色を表示した。


320x200 ドットという、比較的荒い解像度にも関わらず VRAM だけで 96KByte も必要だし、1ドット変更するのに 12回もアクセスする必要があるので画面表示も遅い。

綺麗な画面が出せる、というメリットはあるが、あまり実用的ではなかったように思う。




ところで今回は、人間の目の特性を利用して画像データを圧縮する、というような話が中心になる。

そのため、目の特性について知っておく必要がある。



恐竜が闊歩する時代に、安全な夜間のみ行動する、夜行性のネズミのような生物がいた。

これが哺乳類の祖先だ。


夜行性なので、わずかな光でも捉えられるように目が進化した。その反面、色の違いを見分ける能力が失われた。

今でも多くのほ乳類は色がわからない。


霊長類になり再び色を見分ける能力を取り戻したのだけど、実は目のほんの一部、視野の中央付近でしか色を捉えられない。

しかも、色を取り戻した部分は代償に光の感受性が落ちてしまった。暗い明りを見るときは、周辺視野のほうがよく見える。



人間の脳は、目の部分による感受性の違いをうまく利用していて、無意識に使い分けている。

常に目を動かし、感受性の良い周辺部で明確に捉えた形状と、色覚できる中央部でとらえた色を後から合成し、カラーで鮮明な世界を感じさせてくれる。


つまり、我々が「見た」と思っているものは、実は断片的な情報を重ね合わせた、合成画像だ。




もう一つ、アナログカラーテレビについても知っておく必要がある。


まず最初に、白黒テレビが実現された。

そのあとに、白黒と互換性を保ったまま、カラーテレビが実現した。


もちろん、白黒テレビを設計した時点では、後でカラー化することなんて考えていない。

テレビ電波としては白黒の「輝度変化」のデータだけを、べったりと送ってしまっている。


その信号の隙間を、半ば無理やり探し出して、何とか圧縮した色データを送る。

これがカラーテレビの仕組みだった。


白黒テレビの信号としては、十分なものが送られている。

だから、輝度の表現は十分だ。


ここに、圧縮して隙間に詰め込んだカラー信号を「載せる」。

白黒の絵を元に塗り絵をするような感じだ。


色だから R G B の3つのパラメータが必要なのだけど、それとは別にすでに白黒の輝度信号がある。


つまり、RGB を3つ揃えた場合の、「明るさ」はわかっている。

R G B の配合割合だけわかれば、元の RGB を再現できる。


配合割合なので、全体が 100% だと仮定すれば、2つわかれば残りの1つもわかる。

このような考え方で、カラー信号は 2つしかない。そして、白黒画像のドットの隙間に、交互に入れてある。


「交互」ということは、1ドットごとには色を変えることができない。

それでも、我々の目は輝度信号が正しい形を表現していれば、色が多少おかしくても違和感を感じない。


先に書いたように、もともと形と色を別々に捉え、脳内で合成しているためだ。

輝度信号と色信号が多少ずれていても、脳内で補正して正しい画像を認識してしまう。




さて、以上を前提に、AMIGA の話をしよう。FM-77AV や X1turboZ と同じく、4096色の表示ができる。


先の2機種と違って 16bit マシンなのだけど、先の2機種よりも前に発売されている。

(AMIGA:1985/7 FM-77AV:1985/10 X1turboZ:1986/12。X1のみ、発売日ではなく発表日)


この頃だと、メモリ空間の狭さは技術により克服されつつあった。値段もどんどん下がってはいた。

とはいえ、メモリはやっぱり高価なものだった。


そのため、AMIGA は先の2機種の半分の VRAM サイズで、4096色を表示する工夫が凝らされている。



基本は同じ、白黒画面を重ねてカラーを出す方式だ。

ただし、AMIGA では 4096色に必要な 12bit の半分、6枚分の VRAM しかない。


基本はこのうち4枚を使った 16色モードだ。

当時のコンピューターとしては標準的な構成。


そして、1ドットに対してあと 2bit を追加できる。

このとき、2bit は「モード」を示すフラグとなる。


2bit あるのだから、4つのモードがある。

1つ目は、4bit をパレット番号として使い、あらかじめ 4096色中から設定しておいた 16色を選び出すモードだ。

これも、当時のコンピューターとしてはごく普通。


あとの3つの画面モードは、それぞれ R G B と名付けられている。もちろん光の三原色の RGB だ。

R モードでは、赤の色成分だけを 4bit で指定する。

残りの GB は、直前に表示した左隣のドットの色を受け継ぐ。


G B のモードも同様だ。RGB のうち、どれか一つの色成分だけを指定し、残りは左隣から受け継ぐ。

RGB すべてを任意のものに変えるには、3ドットの幅が必要となる。


4096 色は本来 12bit 必要だけど、この方法で、半分の 6bit で表現できる。

AMIGA の後期機種では、24bit 必要な 1670万色を 10bit で表現するモードもあった。




ところで、AMIGA はテレビに接続して使うのが前提のパソコンだった。

先に書いたように、テレビでは色を急に変えることができない。


AMIGA の方式では「急に色が変えられない」のがデメリットになるのだけど、もともと色は急に変えられないんだ。

じゃぁ、VRAM が半分で済む、というメリットの方が大きい。


非常に美しい設計だ。




アナログテレビの特性を上手に利用した機種と言えば、Apple II (1977) を語らないわけにはいかないだろう。


Apple II では、横 280ドットの表示を行えた。

そして、基本的に白黒の VRAM しか持っていない。


アナログカラーテレビの仕組みとして、ドットごとの信号の「隙間」に、交互に色信号が入っていると書いた。

Apple II の回路は、ドットの「明るさ」の信号を出力する際に、この色信号の部分にまで信号を入れてしまう。


本当なら、信号が正しく送れていないダメ回路だ。

でも、これはわざとなんだ。


カラー信号は交互に入っている、と書いた。

しかし、ドットの輝度信号と一緒に送られてしまう。ということは、ドットを交互に描けば、色信号を制御できる。


偶数ドットだけを描いた縦縞を作ると、紫色になる。

奇数ドットだけだと緑色になる。


両方とも出力すると、白くなる。両方出さないときは黒だ。


Apple II では、さらにこの信号の位相をずらせるようになっていた。

白黒画面では、通常横 8dot を 1byte にするのだけど、横 7dot を 1byte にして、残り 1bit を位相ずらしのフラグにしたんだ。


位相がずれると色情報がずれる。青と橙になった。この場合も、白と黒は同じように出せる。


これにより、Apple II では黒、白、紫、緑、青、橙の6色を出せるようになった。



カラーなのに VRAM は白黒1画面分しかない。

画面表示を変えるときに書き換える VRAM も最低限で済むので、非力な CPU でもアクションゲームに強かった。



ちなみに、カラーテレビでなく白黒テレビに表示を行うと、位相をずらした部分だけ、ドットが半分ずれる。

上手く使えば横方向の見た目上の解像度を上げられる。240dot の解像度しかないのに 480dot のように見えるんだ。


これにより、細かな図などを表示できるため、ビジネス分野でも使用された。


工夫したことで少メモリになり、安く本体を提供できるから普及し、非力な CPU でもアクションゲームが作れたのでゲーム機としても普及し、白黒モニタできれいな画面が出せたのでビジネスマシンとしても普及した。


Apple II が強かった理由の一つだ。




PC-6001 でも白黒モードを同じような技法でカラー化できた。


もちろん、家庭用テレビに接続している時だけ。

Apple II のような「位相ずらし」はないので、4色出せることになる。



白黒モードなので、AppleII と同じ理由でアクションゲームに向いている。

PC-6001mkII のスペースハリアーでもこの画面モードを使っているのだけど、僕の友人宅には専用モニタがあったので白黒だった。


専用モニタに送られる信号は、テレビ信号のような「情報の圧縮」を行わず、VRAM に書いた通りのものを正確に描画してくれる。

本当はそれが正しいのだけど、テレビの特性をうまく使ってカラーを出すようなゲームでも、正確に白黒描画してくれる。


高価なモニタ使っているほうが貧弱な画面になる、というのが当時は不思議だったのだけど、こんな理由だったと後で知った。




MSX や SG-1000 で使用されている画面表示回路は、Apple II よりも後に設計されたものだ(1981)。

Apple II の考え方をもう少し汎用的にする形で 16色表示を実現している。


やはり、ドット表現としては白黒と同じだ。ただ、MSX では横8ドットごとにもう 1byte 使い、bit が 0 の時と 1 の時の色を決められる。

1byte = 8bit の中に2色を表現したいのだから、1色は 4bit 。16色の中から選ぶことになる。


Apple II よりも2倍の VRAM を使ってしまうが、色数は2倍以上に増えるし、自由な位置にドットを打てる。

(Apple II では、色とドット位置に相関関係があるので、好きな色で好きな位置にドットを打てない)


ここら辺、詳しい話は過去に書いたので、気になる人は参照してほしい。




MSX2 (1985) では 256色表示のモードができたのだけど、特記するようなことはない。


RGB を 3:3:2 bit で表現する。

合計 8bit 、1dot = 1byte の、とてもシンプルな方式だ。



MSX2+ (1988) では、この 256色モードと同じ VRAM 容量で、1万9千色を出せる。

自然画モードと呼ばれるのだけど、この方式は巧妙だ。


カラーテレビと同じように情報を圧縮する。だから、ベースとなるのは「白黒」の画面だ。


1ドットに付き 32階調、5bit の輝度情報を持つ、白黒画面を持っている。

これだけでも、当時普通だった「16色しか出ないパソコン」には真似のできない階調表現だ。


でも、1ドットに付き 5bit しか使わないのだから、3bit あまる。

横2ドット分で 6bit になる。4ドットあれば、6bit を2組作れる。


12bit ではなく、6bit 2組、というのが大切だ。

カラーテレビがそうだったように、RGB のうち2つの色の割合を示せる。これで色が決定できる。


カラーテレビでは、横2ドットで1つの色を作り出していた。

MSX2+ の場合、横4ドットなので、色のにじむ範囲がちょっと大きい。


でも、最初に人間の目の仕組みとして説明した通りだ。

輝度信号さえ正しければ、色が多少おかしくても気にならない。


僕が知っている中では、一番巧妙で複雑な VRAM 構造だ。




今はメモリが安くなったので、こんな複雑な構造の VRAM は使わない。

1ドットに 32bit あれば、 RGB に透明度まで加えて表現できる。


ハイビジョンサイズだって 8Mbyte ぽっちだ。今のメモリ容量なら誤差みたいなもの。


でも、人間の目の特性を活かした巧妙な圧縮方法は、今でも JPEG や MPEG の中で生き続けている。




同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

WEBセーフカラー【日記 16/05/31】

別年同日の日記

02年 新しいFinePix

06年 ゲンジボタル

11年 Smalltalk,Squeak, Etoys, and Scratch!

13年 LUMIX Phone 不具合

13年 次女の水疱瘡・その後

19年 契約解消


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

2000

-- follow --




- Reverse Link -