VRAM

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

VRAM (ブイラム, Video RAM)は、コンピュータなどにおける、ディスプレイに対するビデオ表示部分のメモリ(記憶装置)として使われるRAM。専用のデュアルポートのものもあれば、メインメモリと同じDRAMSRAMを利用したものもある。かつて、グラフィックス用フレームバッファの為に用意したメモリをG-RAMと表記していた時期もあるが、意味としては等価である。

概要[編集]

現代における、狭義のVRAMとは、ビデオ描画に適したデュアルポートRAMのことのみを指す。

近年ではVRAMの高速化が進み、GDDRと呼ばれる高速処理専用のメモリ規格が登場。3次元グラフィックス描画における莫大なデータの高速転送を実現している。主な規格として、GDDR3GDDR4GDDR5ビデオカードに搭載されている。

その主な用途はレンダリングした画面を走査するまでのバッファであるが、レンダリングに際して用いるテクスチャなどの素材をバッファリングしたりするなど、中間の処理にも用いられる。これらの構成は各機種のアーキテクチャによって大きく異なる。

VRAMを用いたシステムのメモリ空間は、主記憶装置と同じアドレス空間を持つ場合と、グラフィックコントローラCRTCVDPなど)が独立したアドレス空間を持つ場合がある。

VRAMにカラーピクセル(画素)を配置する方法としては、カラーコードのビットごとに配置するプレーンドアクセス方式(フレームアクセス方式/水平型VRAM)、カラーコードのバイトごとに配置するパックドピクセル方式(ビットマップ方式/垂直型VRAM)、キャラクタ単位で配置するキャラクタグラフィックPCGなどがある。

素材のバッファ[編集]

VRAMの用途のひとつに、レンダリングに用いる素材のバッファリングがある。設計や用途にも依存するが、レンダリングに際してはグラフィックコントローラーからこれら素材に対して頻繁にアクセスする場合が多く、VRAMの重要な用途のひとつとなっている。

テキストVRAM[編集]

RAMの容量が小さかったころは、高度なグラフィックスを保持しておくことは困難だった。そこで初期のコンピュータでは、キャラクタ(文字)のみの描写に特化したテキスト(文章)画面を持っていた。これは画面上に表示する文字のキャラクタコードのみをVRAMに記憶し、走査時にCRTコントローラがVRAMの値を元に予めキャラクタジェネレータROM内に用意されたフォントデータを文字として展開するものである。

国産機種の場合、CG-ROM内には、ASCIIコードに含まれる英数字の他、空き部分には、カタカナ、記号等が割り当てられ、記号は機種によって異なったほか、平仮名のフォントを持っている機種も存在した。通常、書き込む値は、ASCIIコードと一致していたが、MZ-80シリーズと、その後継機はディスプレイコードという特殊な並びのデータを書き込むようになっており、テキストモードしか持たない同機では、キャラクタコードの一部を4×4のピクセルに見立て、その組み合わせである空白を除いた15個のパターンを割り当て、80×50ピクセルのビットマップパターンとして見立てる様になっており、擬似的に超低解像度のビットマップを実現していた。広告では「セミグラフィック」と記述されている。

テキストVRAMには、その文字の属性、色等を示すアトリビュートエリアが文字そのもの以外の領域として多くの機種が持っていた。グラフィックスプレーンを兼用する場合は、その場所のデータをどう扱うかというものや、純粋にテキスト用のエリアであっても、複数の文字単位ないし、文字単位で、文字色、背景色、ブリンク、キャラクタテーブルの指定等を行えるようになっていた。これらの構造は、ハードウェア的にキャラクタディスプレイの機能を持たない機種であっても、サブプロセッサ領域内に相当する領域が設けられており、少ないデータによって文字列を処理することを可能にしていた。

また、キャラクタジェネレータROMは、単色、256パターンのフォントを書き込まれたROMであることが多かったが、この部分をRAMにし、物によっては、カラーでデータを持てるようにしたものが、PCGである。ワープロや、一部機種の外字、ゲーム機のBG画面のパターン等も同様の機能と利便性を提供する。

これらの実装では、1文字に付き、文字種の指定が1バイトとなっており、空白を含め、256種しか取り扱えず、英語圏では有用ではあったものの、日本語の文字情報を取り扱うには仕様として不足していた。そこで、テキストVRAMのテキストを取り扱う部分自体を拡張した、漢字テキストVRAMをハードウェア的に持つようになった機種も生まれた。8ビット機では、X1turboMZ-2500。16ビット機ではPC-9801シリーズがこれらの仕組みを持っており、グラフィックスプレーンにソフトウェア的に処理するよりも格段に早く、快適な日本語のテキスト処理を可能としていた。

その後、ハードウェアの進化に伴い、日本語処理もソフトウェア的に処理するDOS/Vや、文字の座標が不定であるGUIなど、速度的に問題がなくなったり、ハードウェアによって、表示座標や、文字種、フォントが固定されることが、問題になる実装が出てくると、ハードウェアによる、テキスト処理は、見られなくなっていった。ゲーム機などにおけるタイルパターン等の実装も、ポリゴンと、テクスチャマッピングを基準とした構造のハードウェアが増えるにつれ、前述のような構成、機能を持つことは無くなった。

現在のPCでもPOST画面等、最低限のシステムで文字情報が表示できるよう、同じ手順で文字を表示する仕組みを備えている。

テクスチャバッファ[編集]

ポリゴンにテクスチャマッピングを施す際、その素材となるテクスチャのデータを格納するための領域である。

画像の高精細化にともない、テクスチャのデータも大容量化の傾向にあるため、近年のGPUなどはテクスチャバッファに対してデータを自動的に圧縮格納してVRAMを節約する機能を持っていることが多い(例:S3TCなど)。

Zバッファ[編集]

画面上へポリゴンを重ね合わせる際に、その優先順位を決定するための深度情報およびその格納領域がZバッファである。概念についての詳細は該当項目を参照のこと。

初期のポリゴン描画システムでは、Zソートという簡易的な方式を用いていた。これはポリゴン1枚ごとに深度情報を持たせていたが、ポリゴン同士が絡み合うように配置された場合には意図されたような重ね合わせにならない場合があった。Zバッファはこれを改め、ピクセルごとに深度情報を持たせたものである。比較的正確な表示が可能になった一方、情報量や処理負荷は増大したため、GPUの近傍にデータの格納領域が必要となった。

レンダリングバッファ[編集]

レンダリングにかかる時間は、描画の内容やハードウェアの構成によって大きく異なる一方、画面の走査は特定のタイミングでおこなわれる。レンダリングされた画像(レンダリングの過程も含まれる場合がある)を走査するまでの間保持しておくメモリがレンダリングバッファである。

ラインバッファ[編集]

小容量の時代であっても高度なグラフィックスを描く方法が工夫されていた。それは走査線1本分のみのグラフィックデータを保持するラインバッファである。これは低価格のハードウェアで高速に描画する必要のあったゲーム機などに多用された。スプライトスクロール面、BG面などの画面情報を読み出し、それをVDPが走査線ごとにレンダリングしていた。

走査線1本分のみのデータなので容量が少なくても済む一方、レンダリングのタイミングが厳しく、処理が間に合わないとスプライトなどの表示が欠けてしまう場合がしばしば見られた。

これもRAMの大容量化にともない消えていった。

フレームバッファ[編集]

画面の1フレーム分をまるごとバッファリングするもの。

汎用性の求められるコンピュータでは、画面の表示欠けが許されないとされる場合が多かった。これを解決するために、画面1フレームをまるごとバッファリングすることのできるフレームバッファが多くの機種で採用された。描画処理の時間や順序に多少の融通ができるため、レンダリング処理が間に合わない事態を防ぐ効果がある。ただし能力の限界を超えて描画しようとすると、ラインバッファと同様に表示欠けを生じたり、見た目のフレームレートが低下(いわゆる処理落ち)したりする。

初期のパソコンでも中級機以上のものはフレームバッファに似たグラフィックVRAMを保有していた。現代から見れば色数が少なかったもののVRAMの使用量は比較的多く、それらがゲーム機やホビーパソコンなどに比べて非常に高価な理由のひとつとなった。

ゲーム機でも、RAMの容量価格比が増大するとフレームバッファが使われるようになり、本格的な3D描画が可能となった。

高いフレームレートで高度なレンダリングをおこなうため、しばしばダブルバッファという方式が採られる。これはフレームバッファを2フレーム分用意し、片方がレンダリングの結果を出力している間、もう片方にレンダリングを重ねていくものである。原理上表示欠けは発生しないが、レンダリングに時間がかかると処理落ちを生じてしまう。高度なグラフィックスをリアルタイムで動かすゲームのCGにとって重要な技術だが、VRAMを大量に消費するためゲーム機では容量が不足しやすいといったジレンマがある。プレイステーション2ではこの対策として、インターレース画面の1フレームを2フィールドに分け、片方のフィールドを走査する間にもう片方のフィールドへレンダリングするという、簡易的なダブルバッファを用いることが多い。この場合プログレッシブ走査が不可能となり、そのためPS2ではプログレッシブ走査に対応したソフトが少ない。

VRAMのバスアーキテクチャ[編集]

VRAMはその用途から高速性が求められるため、しばしば通常のRAMとは異なる工夫がなされる。

デュアルポートRAM[編集]

VRAMの主用途はバッファであるため、入力用のバスと出力用のバスを独立させることによってスループットを改善させたものである。半導体素子が持つ能力の割に高速な処理が可能となるが、I/O回路が複雑となるため通常のRAMよりも割高である。

かつてはVRAMといえばデュアルポートRAMが主流だったが、低コストの機種ではデュアルポートRAMを採用しないものも多かった。近年SDRAMなどシングルポートRAMの高速化技術が発展するとデュアルポートRAMの衰退は顕著となり、現在ではGDDR3GDDR4GDDR5といった高速シングルポートRAMにとって代わられている。

UMA[編集]

描画を走査に間に合わせる必要があることから、VRAMは通常のワークRAM(メインメモリ)よりも高速なものを用いることが多いが、その分素子が高価となる。しかし全てのシステムが高速な描画を要求されているわけではなく、PCのオンチップグラフィックスなど安価で描画能力を重視しないシステムでは、専用のVRAMを持たずにメインメモリから間借りする場合が多い。このように、メインメモリの領域から他用途のメモリを間借りすることをUMA(ユニファイドメモリアーキテクチャ)という。

またUMAには、高速処理が必要な部分だけに高価な素子を用い、比較的低速でも構わない部分はメインメモリに間借りするといった方法もある。その代表例としてAGPが挙げられる。これは高速性を求められるフレームバッファのみをビデオカードに実装し、その他のメモリをCPUのワークエリアから間借りして、GPUとの間を専用のバスで繋ぐものである。

逆に、描画密度の割に画素数の少ないシステムでは、テクスチャバッファなどへ専用VRAMを充当しつつ、フレームバッファのほうをUMAでまかなってしまうといった場合も存在する。

近年ではPlayStation 4に見られるようにhUMAとして、CPUとGPUでメモリーマップを統合させている例も有る。

ユニファイドメモリーアーキテクチャー」を参照