VRAM
VRAM (ブイラム, Video RAM)は、コンピュータなどにおける、ディスプレイに対するビデオ表示部分のメモリ(記憶装置)として使われるRAM。専用のデュアルポートのものもあれば、メインメモリと同じDRAMやSRAMを利用したものもある。
目次
概要
狭義のVRAMとは、ビデオ描画に適したデュアルポートRAMのことのみを指す。
近年ではVRAMの高速化が進み、GDDRと呼ばれる高速処理専用のメモリ規格が登場。3次元グラフィックス描画における莫大なデータの高速転送を実現している。主な規格として、GDDR3、GDDR4、GDDR5がビデオカードに搭載されている。
その主な用途はレンダリングした画面を走査するまでのバッファであるが、レンダリングに際して用いるテクスチャなどの素材をバッファリングしたりするなど、中間の処理にも用いられる。これらの構成は各機種のアーキテクチャによって大きく異なる。
VRAMを用いたシステムのメモリ空間は、主記憶装置と同じアドレス空間を持つ場合と、グラフィックコントローラ(CRTC、VDPなど)が独立したアドレス空間を持つ場合がある。
VRAMにカラーピクセル(画素)を配置する方法としては、カラーコードのビットごとに配置するプレーンドアクセス方式(フレームアクセス方式)、カラーコードのバイトごとに配置するパックドピクセル方式(ビットマップ方式)、キャラクタ単位で配置するキャラクタグラフィック・PCGなどがある。
素材のバッファ
VRAMの用途のひとつに、レンダリングに用いる素材のバッファリングがある。設計や用途にも依存するが、レンダリングに際してはグラフィックコントローラーからこれら素材に対して頻繁にアクセスする場合が多く、VRAMの重要な用途のひとつとなっている。
テキストRAM
RAMの容量が小さかったころは、高度なグラフィックスを保持しておくことは困難だった。そこで初期のコンピュータでは、キャラクタ(文字)のみの描写に特化したテキスト(文章)画面を持っていた。これは画面上に表示する文字のキャラクタコードのみをVRAMに記憶し、走査時にグラフィックコントローラがフォントデータを参照しながら文字として展開するものである。しかしDOS/VやGUIなど、文字をグラフィックスで描くシステムが主流になると、ソフトウェアレベルでの処理に代替していった。ただし現在のPCでも互換性確保のためにBIOSレベルではこの機能を持っている。
ゲーム機などでも、得点や固定背景を描くためのBG(バックグラウンド)と呼ばれる描画面を持っていた。これもポリゴン描写が主流になると廃れていった。
テクスチャバッファ
ポリゴンにテクスチャマッピングを施す際、その素材となるテクスチャのデータを格納するための領域である。
画像の高精細化にともない、テクスチャのデータも大容量化の傾向にあるため、近年の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の衰退は顕著となり、現在ではGDDR3、GDDR4、GDDR5といった高速シングルポートRAMにとって代わられている。
UMA
描画を走査に間に合わせる必要があることから、VRAMは通常のワークRAM(メインメモリ)よりも高速なものを用いることが多いが、その分素子が高価となる。しかし全てのシステムが高速な描画を要求されているわけではなく、PCのオンチップグラフィックスなど安価で描画能力を重視しないシステムでは、専用のVRAMを持たずにメインメモリから間借りする場合が多い。このように、メインメモリの領域から他用途のメモリを間借りすることをUMA(ユニファイドメモリアーキテクチャ)という。
またUMAには、高速処理が必要な部分だけに高価な素子を用い、比較的低速でも構わない部分はメインメモリに間借りするといった方法もある。その代表例としてAGPが挙げられる。これは高速性を求められるフレームバッファのみをビデオカードに実装し、その他のメモリをCPUのワークエリアから間借りして、GPUとの間を専用のバスで繋ぐものである。
逆に、描画密度の割に画素数の少ないシステムでは、テクスチャバッファなどへ専用VRAMを充当しつつ、フレームバッファのほうをUMAでまかなってしまうといった場合も存在する。
近年ではPlayStation 4に見られるようにhUMAとして、CPUとGPUでメモリーマップを統合させている例も有る。
- 「ユニファイドメモリーアーキテクチャー」を参照