ビデオメモリ
画面表示や画像処理に用いるメモリ。画面1枚分を非圧縮で保持する最低容量は、画素数と1画素当たりのビット数から求める。実機では画像以外の作業領域なども必要になる。
イマシルちゃんの解説
方眼紙の一つ一つのマスに、色を選んで絵を描くとするよ。
紙が大きいほど、書き留める色の数も増えるよね。
選べる色を細かく区別するほど、一つのマスに必要なメモも長くなるんだ。
次に見せる絵を別の紙に用意するなら、その紙の分も置き場所が必要になるよ。
この解説はわかりやすかったですか?
より深い解説
表示用のデータを置く
描画結果の画素情報を保持する領域をフレームバッファという。画面に表示する値をメモリから読み出すことで、描画と表示を進める。
ビデオメモリには、この領域のほか、テクスチャや描画途中のデータなどが置かれる場合もある。専用メモリを持つ構成と、主記憶の一部を共有する構成がある。「画面1枚の容量」と「GPUが必要とする全メモリ容量」は同じではない。
色数から必要な桁数を求める
画素の色をbビットで表すなら、区別できる値の数は2のb乗である。色数Cを固定長で表すための最低ビット数は、2のb乗がC以上になる最小の整数bである。
| 表現 | 区別できる値の数 |
|---|---|
| 1ビット | 2通り |
| 4ビット | 16通り |
| 8ビット | 256通り |
| 24ビット | 16,777,216通り |
1画素に割り当てる情報量を色深度と呼ぶ。RGBの各成分のビット数と、1画素全体のビット数を取り違えない。例えば各成分8ビットなら、色の情報は合計24ビットになる。
最低容量の計算
画素を固定長で隙間なく保存し、補助情報を含めない場合の式は次のとおりである。
画素数 = 横の画素数 × 縦の画素数
容量[バイト]= 画素数 × 1画素当たりのビット数 ÷ 8
独自の例として、640×480画素を24ビットで保持する。画素数は307,200であり、容量は307,200×24÷8=921,600バイトとなる。1MB=1,000,000バイトなら0.9216MBである。
メモリ容量の設問では、kやMを1,000倍で扱うか、1,024倍で扱うかの指定を先に読む。割る数を途中で混ぜない。
実際には増える領域
| 要因 | 最低計算との差 |
|---|---|
| 行の配置 | 各行の末尾に整列用の余白が入る場合がある |
| 画素形式 | 色成分以外の情報や未使用部分を含む場合がある |
| 複数の画面領域 | 表示中と描画中の領域を分ければ、その分が増える |
| その他の画像処理 | 奥行き情報や素材画像などの領域を別に使う |
表示中の領域と、次に表示するために描画する領域を二つに分ける方式をダブルバッファリングという。同じ大きさなら画素データだけでも1枚分の2倍が必要になる。
ファイル容量との区別
PNGやJPEGのファイルサイズは、圧縮方法や絵柄によって変わる。画面の非圧縮データの容量を求める計算に、保存ファイルの大きさをそのまま使うことはできない。
また、何枚を毎秒表示するかは転送量の計算に関わるが、1枚を保存する容量とは別である。容量、毎秒の転送量、画面の更新頻度を分けて考える。