2016年05月31日の日記です

目次

05-31 色数と VRAM 構造
05-31 WEBセーフカラー


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

▲目次へ ⇒この記事のURL

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 の中で生き続けている。



▲目次へ ⇒この記事のURL

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

コンピュータ

関連ページ

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

別年同日の日記

02年 新しいFinePix

06年 ゲンジボタル

11年 Smalltalk,Squeak, Etoys, and Scratch!

13年 LUMIX Phone 不具合

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

19年 契約解消


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

WEBセーフカラー  2016-05-31 18:46:33  コンピュータ

▲目次へ ⇒この記事のURL

VRAM の話書いていたら急に思い出した、オマケの話。


WEB の黎明期、まだ Netscape が標準的な WEB ブラウザったころ、WEB セーフカラー、というものが存在していた。

今でもこの単語を調べれば解説しているページがたくさんある。


でも、どうも書いてあることがおかしい。

すでに失われた技術なので、なぜこんなものが存在したのか覚えている人があまりいないようだ。


・Windows でも Mac でも表示できる色を選んだものだ、という話があった。

・各ブラウザごとに使える色が違ったので、その共通色を選んだものだ、という話があった。

・この色を使えばディザリングなしに表示できるのだ、というような話があった。


そんなことはない。これ以外の色を選んだって、ちゃんと表示は出来た。

ただ、表示は出来るけど悲惨な副作用が待ち構えていただけだ。




Machintosh に 1bit の白黒時代があったことを忘れてはならない。


「すべてがグラフィック」という機械は、VRAM を大量に消費する。

メモリが高価だった時代、そんなに大量のメモリを使うと機械の値段がバカ高くなってしまう。


だから、最初の Mac は白黒だった。


でも、内部のソフトはカラーに対応していた、という有名な話がある。

ソフト的にはカラー対応なのだけど、「メモリが高価だから」白黒になっていただけなんだ。


後で無理なくカラーに拡張され、16色表示できるようになった。

Windows だって、最初は 16色からだった。


そして、Win も Mac も、256色表示できる時代がやってきた。

ちょうどそのころ、WEB が流行し始めたんだ。




たとえば MSX2 は 256色表示ができた。ここでは、RGB を 3:3:2 bit で表現する固定 256色だった。


でも、Win も Mac ももっと自由だった。使える色はたしかに 256色なのだけど、4096色とか、1670万色の中から選ぶことができた。

ただ、一つ問題がった。Win も Mac も、マルチウィンドウだったんだ。


あるウィンドウで、256色の絵Aを表示したとする。ちゃんと表示できる。

別のウィンドウで、256色の絵Bを表示したとする。これもちゃんと表示できる。


ただし、さっき表示したウィンドウの絵Aは、パレットが変更されて酷いことになっている。

Aのウィンドウをアクティブにすると、Aの色は元に戻る。代わりにBが酷いことになる。


これは 256色同時発色の宿命だ。仕方がない。そんなもんだ。

見ようと思ったときには正しく表示できるのだから、まぁ諦めよう。


でも、WEB ではもっと困ったことが起こった。

ひとつのウィンドウの中に、絵が複数表示されるんだ。


最後の絵だけが正しい色合いで、後はぐちゃぐちゃ。

または、最初の絵だけが正しかったり、すべての絵を表示しようと努力して、減色を行ったり…


まぁ、そこらへんは環境依存。

ブラウザだけでなく、OS にもよる。いずれにせよ正しく表示されない。



実は、もっと困った問題だって起きる。

256色で絵を表示されると、ウィンドウの枠とか、メニューの文字とかの色まで変わってしまうのだ。


だって、画面全体で 256色しか使えないのに、絵を表示するために全部のパレットを変えてしまうのだもの。




この説明だけで理解できたと思うけど、必要なのは「すべての絵が同じパレットで描かれている」ことだった。

同じであれば何でもいい。ただ、世界中の人に同じパレットをつかおう、と提案するのだから、それなりに「公平な」ものでないといけなかった。


これが WEB セーフカラーだ。


全部で 256色しか使えない、とわかっている中で、誰もが使いやすいように満遍なく色を決定したい。


RGB の3つのパラメーターの掛け合わせで色が作られる。

1つの色で何階調使えるかは、256の三乗根を求めればいい。

∛256 = 6.349…になる。


だから、RGB 各6段階に設定する。6^3 = 216 で 40色ほど余るけど、これはむしろ好都合。

ウィンドウの枠などを描く色が確保できるからね。


階調が 8bit指定(RGB で 1670万色)だとすれば、00 33 66 99 CC FF の6段階を使えばいい。

4096色から選ばれるようなシステムの場合、適切に変換して、とにかく等間隔の6段階があればいい。




WEB セーフカラーではなくなるけど、256色しか使えないシステムで、ウィンドウの枠とかはないので 256色全部使って良くて、でも同時に違う絵を重ね合わせたりするので使われるパレットは共通化したい…


ゲームなんかではそういう用途が想定される場合があったのだけど、その場合は余った 40色にも色を詰め込んでいい。


R G B と Grayscale の4種類の、次の 10段階のグラデーションを詰め込んでいるのを見たことがある。


11 22 44 55 77 88 AA BB EE DD


間がとびとびだけど、その飛んでいる部分は、ベースとなる 216色に入っている。

だから、10段階追加しただけで、16段階のグラデーションが表示できるようになる。


巧妙に作られたパレットに感心した覚えがある。




どうせオマケ話なので、思い付きでどんどん横道にそれていこう。


「WEB セーフカラーをつかえればどんな環境でも表示で来た」というのは嘘で、MSX2 のような 256色固定表示の WEB 環境も当時普及していた。


i-mode を初めとする、ネット接続可能な携帯電話の、カラーが使えるようになった第二世代。

ほんのわずかな期間で、固定ではなく 4096色などを表示できるものに変わっていくのだけど、当初は固定 256色だった。


そのころに携帯電話の仕事をしていて、僕がプログラムを作り、知人がドット絵を描いていた。

RGB 3:3:2 の固定だと、グラデーションを描くのもままならない。階調が少ない青が邪魔するのだ。


パレットが使えないっていうのは、色表現に想像以上の制約を与える。



それらの携帯電話では、一応普通の WEB ページだって表示できた。

WEB セーフカラーで描かれた絵は、固定カラーに無理やり変換され、ディザリングされた。


非常に珍しい環境だから、見られないことを怒るわけではない。

ただ、「WEB セーフカラーだったら表示できる」と妄信してはいけない、という具体例として挙げたかっただけ。




関係ないついでに。


当時の国際的な定義では、ネットに接続できる携帯電話を「スマートホン」と呼んだ。

世界初のスマートホンは i-mode だ。


でも、世界的に「スマートホン」って概念が普及したころには、日本では i-mode は当然だった。

だから、日本では言葉に特別な意味を持たせ、「QWERTYキーボードが付いている機械」をスマートホンと呼ぶようになっていた。


日本初のスマートホンは W-ZERO3 だ。


今は…どう定義されているかわからない。


アプリをインストールできる機械? それだと i-mode 時代でも可能だった。

キーボードが「ついてない」機械? ついている機種だってあるけど、スマートホンと呼ばれる。


タッチパネルで操作する機械?

…本質ではないけど、これが一番、現在のスマートホンの定義にあっているような気がする。


▲目次へ ⇒この記事のURL

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

コンピュータ

関連ページ

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

別年同日の日記

02年 新しいFinePix

06年 ゲンジボタル

11年 Smalltalk,Squeak, Etoys, and Scratch!

13年 LUMIX Phone 不具合

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

19年 契約解消


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


戻る
トップページへ

-- share --

2000

-- follow --




- Reverse Link -