Top > Knowledge > Parts > グラフィック

グラフィック

CPU が計算した結果を知りたいのは人間です。そりゃそうですよね、計算させるのも人間ですからね。ということはその計算結果を何らかの形で人間に解るように表現しなければなりません。昔はそれが紙テープだったりしていたわけですが、今ではディスプレイと呼ばれる表示装置が使われます。
液晶だったりブラウン管だったり方式は様々ですが、要するに人間の目に見えるように表示する目的は変わりません。

このディスプレイ、数値しかないはずなのにどうやって色や文字を表示しているのか。その仕組みに迫ります。
まず CPU にとってはこのディスプレイという装置、別に何か表示する装置だという認識はありません。CPU にとってもそこはメモリです。つまり CPU は計算結果を単純にディスプレイ用のメモリに出力しているのです。
ディスプレイ用のメモリを VRAM(Video RAM)と言います。ここに格納されたデータは CRTC*1 という装置が画像に変換します。どう変換するかというと、VRAM に入っている数値を明るさとして認識し、変換するのです。
光の三原色はです( RGB と言います)。この三つの色で全ての色が表現できます。全部消せば黒、全てつければ白です(絵の具の三原色とは逆ですね)。そしてこれらの三原色がどれくらいの明るさなのかを 256 段階で制御できます。0 が点いていない時、255 がもっとも明るい時というわけです。
赤=0,緑=255,青=0 の場合緑というわけですね。

RGB 重ね合わせ:

rgb.png

色の例:
  color0.png color1.png

そしてこれがディスプレイ上の一つの点になります。つまり一つの点を表現するのに 3 バイトの数値が必要になるわけですね。
皆さんが使っているディスプレイの広さをさっそく見てみましょう。画面のプロパティを開き、モニタの解像度を見てみてください。1024 x 768 とか 1280 x 1024 ピクセルなんていう表示を見つけることができると思います。それがまさに今表示されているディスプレイの細かさになります。ピクセルとは点のことです。
1024 x 768 ピクセルの場合、点が横に 1024 個、縦に 768 個並んでいることになり、点の数は 786,432 個にもなります。容量も計算してみましょう。1 つの点に 3 バイト必要でした。ということは 786432 x 3 = 2,359,296 バイト! なんと 2.3 メガバイトもの VRAM が必要なのです。

CPU が画像を書き換えたいときは、この VRAM に数値を書き込みます。
青に変わった、赤に変わった……そのたびにその数値を書き込んでいるわけです。そしてそうすることによって、計算結果も表示することができるようになります。単純に計算した結果をメモリではなく VRAM という別のメモリに書き込むことによって、人の目に見えるようになるというわけです。

でもちょっと待ってください、画像を表現するにはグラフィック・カード(ビデオ・カード、ビデオ・ボード)というものが必要なはずです。皆さんのパソコンにはディスプレイをつなげるための特別なボードがあることがあります。でも今までの説明では CPU と VRAM だけがあればグラフィック・カードなんていらなさそうです。
先ほども説明したように、1024 x 768 ピクセルの画面で 2.3 メガバイトもの容量になります。
ゲームや DVD を見たりする場合、1 秒間に 30 ~ 60 回も書き換えなければなりません。
1 秒間に 30 回書き換えただけでも、2359296 x 30 = 70,778,880 バイトものメモリ操作が必要になります。それでなくても CPU は他のこともしなければなりません。たとえばユーザーが動かしたマウスの処理や音の処理。とてもじゃないですが CPU だけでは面倒見切れません。
そこでグラフィック・カード(ビデオ・カード)の登場です。これには画像を表示し、様々な画像処理に特化した計算をする CPU(GPU と言います)と VRAM がセットになっているのです。CPU はグラフィック・カードに対して、「こことこことここを変えておいて」とか「この画像を表示しておいて」と命令を出すだけで、あとはグラフィック・カードが描画してくれます。すると CPU は次の処理に移れる、というわけなのです。


*1 今はもっと細かく分かれているようで、現在調査中。

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Wed, 01 Oct 2008 17:45:07 JST (5678d)