RGBのbitについて

概要

「RGB444とかRGBA4444て何?」

と、話題になったりたまに聞かれたりしたので、自分の知っている情報を出来るだけ分りやすく書いてみた。

※この記事では、RGB4444への変換については触れない
※なんか間違ってたら連絡ください

まずフルカラー、24bitカラーについて

一般的なモニターや、画像編集ソフトなどで扱うカラー

R:0-255
G:0-255
B:0-255

RGBの各色を0~255 (8bit) の値で扱うのが、フルカラー。
R256通り * G256通り * B256通り = 全16,777,216通りの色が出せる。

150724_blog_rgb_bit_010_color_bar_pscc2015

150724_blog_rgb_bit_020_color_bar_flashcc2015
画像編集ツール等でも、0~255 や 00~FF で各256までの値を設定している。どこもこの辺は一緒のはず。

RGBAのAって何?

  • R:Red 赤
  • G:Green 緑
  • B:Blue 青
  • A:Alpha 透明度

Alpha。透明度。基本的に、値が低いと薄くなる。

RGBA4444の画像とは?

  • : 4bit
  • G : 4bit
  • B : 4bit
  • A : 4bit

のように値を4bitで扱う画像の事。

8bit0-255までの値を扱えるが、
4bit0-15までの16通りの値しか扱えない。フルカラーに比べて色がアバウトになる。

bitって?

扱うメモリの量。いっぱい使うとそれだけ、いっぱいメモリが必要。

フルカラーの場合の使用メモリ

R
8bit
G
8bit
B
8bit

R:8bit + G:8bit + B:8bit = 24bit
1px(1ピクセル,1ドット)に24bit必要。

なんでみんなフルカラーにしないの?

フルカラーの24bitより、12bitとかの方が軽いから。

  • 画像を保持するのに必要なVRAM(ビデオメモリ)が少なくて済む
  • 描画時に使うVRAMが少なくて済む
  • 使うメモリが少ないと、メモリを書き換える回数が少ないので、描画転送速度が速い
    • 携帯ゲーム機などはバッテリー使用量も少なくなる

ただし、24bit->12bitと行き来したりすると、変換に時間がかかったりする事も。

いろんなRGB(色深度)

種類 1px

bit数
扱える値 最大
表示色数
備考
RGB(8,8,8) 24bit 0-255 16,777,216色 フルカラー、トゥルーカラー
一般的なモニタ。
プレステ・セガサタも扱える
RGBA(8,8,8,8) 32bit 0-255 16,777,216色 フルカラー+透過8bit
Canvasのcontextとかもコレに近い
RGB(16,16,16)
RGB(32,32,32)
48bit
96bit
0-65,535
0-すごい
281兆色強
すごい色
16/32bitチャンネルとか言う。
Photoshop等で使えるが・・・
普通のモニタでは見えない
印刷向け?
RGB(4,4,4)
RGBA(4,4,4,4)
12bit
16bit
0-15 4,096色 ゲームギアなど
最近だとunity,cocos等の
スマホ向けアプリで扱う
RGB(5,5,5)
RGBA(5,5,5,1)
15bit
16bit
0-31
A:0-1
32,768色 ハイカラー
SFC,GBA等
透明度はアンチエイリアスなしの
ナシ0/アリ1のみ。
RGB(6,6,6) 18bit 0-63 262,144色 Nintendo DS等
RGB(1,1,1) 3bit 0-1 8色 デジタルカラー
昔のパソコンゲーム。
ソーサリアンや3までのイース等
モノクロ256階調 8bit 0-255 白-黒 256色 あまり使うところを見た事が無い
モノクロ8階調 4bit 0-7 白-黒 8色 ワンダースワン
4階調 2bit 0-3 白-黒 4色 GB
2階調 1bit 0-1 白-黒 2色 白と黒のみ
ウォッチ型ゲームなど

※コンシューマー系ゲームの場合、最大表示色数のすべてを色を画面に出せる訳ではなく、パレットに設定できる色数になる

ドット風ゲームを作る際の色設定

使える色に気をつけると、より古いゲームっぽさを出せる。

例:ゲームギア風の場合

RGBに使えるのが各4bitなので、0~15までを指定できる。
これは16進数のカラーコード(00~FF)で言えば、

00, 11, 22, 33, 44 … DD, FF

のように1桁目と2桁目を同じ数値にすれば4bitカラーと同じ扱いとなる。
8bitチャンネルの画像編集ソフト上で色を指定する際は、カラーコードを入れると楽!

#1122CC, #FF6655, #99DD00 等

関連 → PhotoshopCS6,CCで塗りつぶしの色がズレてしまう問題

例:オールドPCゲーム風の場合

RGBに使えるのが各1bitのものは、0 か 1を指定できる。
これは単純で、画像編集ソフト上のカラー設定で

0 か 255 (00 か FF)

を入れればヨイだけ。
全8色しか使えないが、それでもすばらしい絵はたくさんあるのだ・・・これとか

ゲームハードの各RGBに使える値を出す

ゲームの仕様等を調べて、最大表示色数が分れば計算できる!計算式は

150724_blog_rgb_bit_030_eqn

ただしRGBに均等にbitを割り振られている前提。
適当に16とか32とか64を3回かけても、そのうち当たる…

そのた

bpp

bits per pixel
1pxあたりのbit数を、~bppと言ったりする。

画像ファイルの容量とVRAMは別

画像ファイルを軽くしても、描画処理速度やメモリが軽くなるかは別問題。
大抵のゲームでもパソコンでも言える事ではあるが、CDやHDDの中にある画像ファイルを直接スクリーンに出したりはしない。
CDやHDDの読み込みは遅いので、一度ビデオメモリの中に格納するのだ。また圧縮してある画像ファイルは、圧縮をデコード(展開)する必要がある。

VRAMを確保する領域

たとえば320*320の画像ファイルをVRAMに展開する際、320px*320pxの領域に割り当てられるわけではない。
OSやハードによって異なるが、8の乗数である512px*512pxのスペースに確保されたりする。空白が無駄になってしまう。

必要なメモリを計算する

面倒くさいけど、そんなに難しくない。
例えば横10px*縦10px(ピクセル)の画像があった場合、

10px * 10px = 100px

面積が100px。フルカラーは1pxに対して24bit使うので、

100px * 24bit = 2400bit

bitだと分かりにくいからバイト(byte)に変換。8bitで1byteなので、

2400bit / 8 = 300byte

10px*10pxの画像を扱うのに300byteのメモリが必要になる。

※このメモリは画像を保存したときのファイル容量ではなく、メモリに展開する量

FHD 1920px * 1080px

フルHD画質。最近のモニタは大体この解像度

フルカラーで表示する場合

1920px * 1080px * 24bit = 49,766,400bit = 6,220,800 byte = 6075KB = 5.9326171875MB

約6MBのメモリが必要。

RGB444で表示する場合

1920px * 1080px * 12bit = 24,883,200bit = 3,110,400 byte = 3,037.5KB = 2.96630859375MB

約3MBのメモリが必要。フルカラーに比べると、2枚分使える。

参考

8ビットカラー、セーフカラー、ハイカラ―、トゥルーカラーとは

第9弾 : VRAM解説 | 誰得PSPプログラミング日誌