최근 수정 시각 : 2024-03-21 13:11:28

RGB

파일:다른 뜻 아이콘.svg  
트루 컬러은(는) 여기로 연결됩니다.
다른 뜻에 대한 내용은 아래 문서를 참고하십시오.

파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
적색거성가지의 약어에 대한 내용은 적색거성 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
빛의 3원색

1. 개요
1.1. 디지털에서의 색상 처리
2. 대중매체에서의 활용3. 관련 문서

1. 개요

파일:나무_RGB_수정.png
RGB 벤 다이어그램

의 삼원색을 뜻하는 말이며 빨간색(Red), 초록색(Green), 파란색(Blue)의 합성어다.

색광에서 빨간색과 초록색을 합치면 노란색(Yellow)이 되고, 초록색과 파란색을 합치면 청록색(Cyan)이 되며, 파란색과 빨간색을 합치면 자홍색(Magenta)[1]가 된다. 그리고 세 가지 색을 모두 합치면 흰색(White)이 되고, 반대로 세 가지 색을 모두 제외하면 검은색(Black)이 된다.

이런 식으로 텔레비전이나 컴퓨터 모니터 등 영상 장치의 해상도를 조절하는 표시 장치에 사용된다. 또한 빛을 이용하는 장치가 아닌 인쇄 매체의 경우에는 잉크체계를 사용해 특정 색을 흡수하고 나머지를 반사하기 때문에 RGB가 아닌 CMYK가 적용된다.

RGB가 빛이 삼원색이 될 수 있는 것은 인간의 시각에서 색상을 담당하는 원뿔세포가 세 종류(적색, 녹색, 청색)이며, 각각 R, G, B에 가까운 파장을 흡수하기 때문이다. 인간이 인식하는 빛깔은 이 원뿔세포들에 인식된 빛의 세기가 되므로, RGB 3색만 가지고도 인간이 인식하는 빛깔을 상당 부분 재현할 수 있다. 그럼에도 불구하고, RGB가 인간이 인식 가능한 모든 색상을 표현 가능한 것은 아니다. 특정 파장대역을 샘플링해 얻은 RGB에 의해 표현 가능한 빛깔은 불연속적인 3점의 세기로만 표현되는 반면, 본래 자연에서의 빛은 대부분 연속 스펙트럼의 형태로 나타나기 때문이다.[2] 또한 R, G, B가 나타내는 파장은 생각보다 원추세포가 인식하는 파장[3]과는 다르다는 문제점도 있다. 인간이 인식 가능한 색상을 표현하기 위한 목적으로 만들어진 색상 공간 중에는 인간의 원뿔세포가 받아들이는 색역을 모델링해 만든 CIE XYZ가 있으며, 모니터가 재현 가능한 색 범위를 나타내는 컬러 개멋(Color Gamut) 그래프에서 삼각형[4] 바깥에 나타나는 폐곡선이 바로 CIE XYZ 공간을 나타낸다.

RGB 색상에서 두 가지 색상을 겹쳐서 흰색을 만들 수 있는 경우, 해당되는 두 색상을 보색이라고 한다.[5]

게이지 보존 중 하나인 글루온도 RGB의 색 개념이 있다. 정확히는 RGB의 개념을 가져다가 쓴거다. 전기에서의 전하는 두 종류밖에 없어서 쉽게 (+)와 (-)라고 쓰면 되었는데, 글루온의 경우 기본이 세 가지 종류라는 문제가 있었다. 그래서 자연에서 세 가지가 기본인 것 중 가장 쉬운게 색이어서 그냥 RGB를 가져다 쓰게 된거다. 즉, 실제 색이 있고 그런건 아니다.

2010년대 중후반기부터는 RGB를 한 개의 소자로 쓸 수 있는 LED도 등장해서 튜닝용으로 징하게 쓰이고 있다. 이렇게 정신 사납게 무지개빛으로 발광하는 기기를 보고 무지개를 상징으로 쓰는 LGBT에 빗대어 RGBT라고 놀리기도 한다.

원색이다 보니까 보다 보면 눈이 꽤 아픈 편이다.

1.1. 디지털에서의 색상 처리

디지털에서는 이산적인 값을 쓰게 되며, 정보량(비트)에 따라서 표현할 수 있는 색의 가지수가 달라지게 된다. 제한된 정보량 안에서 색상을 표현하기 위해서는 잘리는 값이 생기게 된다.

CGA부터 VGA까지 초창기 컬러 그래픽 시대에는 표현할 수 있는 색상의 가짓수가 적었으므로, R, G, B에 각각의 정보량을 할당하는 대신, 팔레트를 사용해 미리 원하는 색상을 집어넣고 필요한 경우 스크린 모드를 전환해 팔레트를 바꾸면서 색을 맞추는 경우도 있었다. 디스플레이가 RGB 컬러를 지원하는 경우에는 색상 출력이 가능했으며, 그래픽 카드와 단색 디스플레이가 호환되는 경우 그레이스케일처럼 명암처리가 되는 경우도 있었다.

색상에 사용되는 정보량은 색심도(color depth)라는 용어가 사용되며, 주로 사용된 색심도는 다음과 같다.
  • 1비트(2색): 기본 콘솔용 그래픽 처리 신호만 보내거나, 허큘리스 그래픽 카드 등을 사용해 고해상도 단색조 그래픽을 쓰는 경우엔 ON/OFF만으로 신호를 보냈다. 흑백 모니터, 단색 모니터라고 불리는 경우도 있지만, 이 당시 그래픽이 활발히 사용될 때의 모니터는 녹색, 주황색 등이 주로 사용되었고, ON/OFF는 2색이므로, 엄밀하게 따지면 둘 다 틀린 용어다.[6]
  • 2비트(4색): 컬러 그래픽 카드인 CGA에서 사용했던 단위로, 흑백에 더해 시안, 마젠타를 추가해서 썼다. 다만 당시의 NTSC 디스플레이 중에서는 서브픽셀 출력 라인에 따른 컬러 아티팩트가 있었기 때문에, 일부 고급 해킹 기술 중에서는 강제로 디스플레이의 서브픽셀 단위로 출력해 1비트(2색) 또는 2비트(4색)으로 훨씬 많은 색을 재현하는 경우[7]도 있다.
  • 4비트(16색): 후속 EGA 그래픽 카드에서 사용했던 것으로, 16색 표현이 가능하며, 이 수준부터는 기본적인 색상을 쓸 수 있었으며, 주어진 색 범위 안에서 도트 등을 찍어 자연색에 가깝게 표현하기 위한 디더링 같은 기술이 발달하기 시작했다. 일본에서 한자 그래픽 처리를 위해 그래픽 처리 용량을 키운 PC-9801에 맞춰 나온 게임들이 대표적.
  • 8비트(256색): PAL8이라고도 한다. VGA 그래픽 카드 이후에 나오기 시작한 것으로, 1990년대 말까지 유효하게 사용되었다. PC에서는 주로 R 3비트, G 3비트, B 2비트[8]를 썼으나, 휴대용 기기나 게임 콘솔 등에서 256색을 지원하는 경우엔 대부분 팔레트식이었다. PC에서 팔레트식을 못 쓰는 건 아니었으며, 스타크래프트 같이 게임 등에서는 팔레트 방식(indexed color 또는 pseudocolor, indirect color 등으로 불림)을 사용하는 경우도 있었다.
  • 16비트(65,536색): 윈도우 9x 시대에는 디스플레이 설정에 하이 컬러(High Color)라는 이름이 있었기 때문에 이 용어를 사용했던 경우도 많다. 8비트와 달리 16비트부터는 팔레트 식이 아닌 R, G, B 각 채널별로 정보값을 할당하는 경우가 많아졌다. 인간의 눈에서 가장 민감한 영역이 녹색 영역[9]임을 감안해 G에 1비트를 더 부여한 565 컬러 모드(R 5비트, G 6비트, B 5비트)가 가장 많이 사용되었으며 투명을 표현할 필요가 있는 경우 등에는 G에 부여된 추가 1비트 대신 A(알파) 채널 1비트를 만들어 사용하기도 했다. Windows Embedded Compact Windows Mobile, 안드로이드 진저브레드의 기본 지원색상이다.
  • 24비트(16,777,216색): R, G, B 채널에 각각 1바이트(8비트)를 할당한 것으로, 트루 컬러(True Color)라는 별칭도 있다. 현재 사용되는 대부분의 디지털 디스플레이들 및 그래픽 프로세서가 지원하는 것으로, 각 색상에 1바이트로 꽤 충분한 샘플을 부여했기 때문에, 대부분의 천연사진을 디지털화 해도 위화감 없이 받아들일 수 있다. 또한 1바이트 단위기 때문에 데이터 처리 등에 있어서도 굉장히 간단한데, 어지간하면 비트 단위 조작이 필요 없기 때문이다. Windows 95부터 지원하였으며, 아주 구형 VGA를 사용하지 않는 이상 트루 컬러가 기본설정이었다. 다만 일부 3D 게임 등 몇몇 프로그램은 퍼포먼스 문제로 16비트 하이 컬러를 사용했으며, Windows 9x 시절에는 리소스 낭비를 줄이기 위해 하이 컬러를 주로 사용했었다. 안드로이드 아이스크림 샌드위치부터 기본 지원이 되었다. 투명도나 데이터 처리를 위한 값을 확장해서 32비트라고 부르기도 한다.
  • 30비트(1,073,741,824색): R, G, B 채널에 각각 10비트를 할당한 것으로, 딥 컬러(Deep Color)라는 별칭도 있다. HDR 화면의 기본 요구사항이며 하드웨어와 드라이버에 따라 일부 기기는 Windows XP부터 지원되었다. Windows 11, 안드로이드 파이부터 권장사항이 되어 급속도로 보급되었다.

    HDR과 같은 딥 컬러 환경에서 하드웨어가 네이티브로 48비트 (FP16ppc) 연산을 지원하는 것에 비해 컨슈머 미디어에서 더 자주 쓰이는 편인데 픽셀당 24비트에 비해 더 세밀한 색상 표현을 하는 것이 가능하고 48비트 대비 용량을 적게 사용하기 때문이다. 그렇지만 연산장치에게 있어선 효율이 좋은 편은 아닌데 대부분의 하드웨어는 워드 단위로 처리되고 32비트 CPU를 기준으로 30비트는 한 레지스터에 담는 것이 가능하지만 특히 SIMD를 통해 구현하는 경우 프로세서가 벡터의 원소를 8, 16, 32, 64와 같이 2의 거듭제곱 단위의 연산을 지원해 바로 바로 처리가 가능한 것에 비해 [10] 10비트 단위로 연산하기 위해선 매 채널 연산마다 마스크를 입히고 연산 후 그 결과값을 10비트에 맞게 비트시프트로 Saturation 하고 채널에 채워넣는 추가적인 연산이 필요하기 때문이다. 그 때문에 게임과 같이 실시간으로 연산되어야 하는 곳에서는 30비트 보다는 아래의 48비트가 더 자주 사용된다.
  • 48비트(281,474,976,710,656색): 구현에 있어 픽셀당 16비트 정수 또는 16비트 부동소수점으로 구현된다. 개인 사용자가 이 포맷을 다룰 일은 없지만 프로그래머나 컨텐츠 제작자들에게는 자주 사용되는 포맷인데 3D의 HDR매핑을 가진 OpenEXR이 픽셀당 FP32또는 FP16을 사용하며 프로그래머의 경우 딥 컬러 프로세싱에 사용할 내부 서페이스 포맷을 FP16으로 하는 경우가 많다. 채널당 FP32인 픽셀당 96/128 비트도 존재하지만 이걸 넘는 포맷의 사용은 드문 편이다. DXGI_FORMAT_R32G32B32A32_FLOAT 데이터형의 경우 정수보다는 부동소수점 사용이 더 많은 편인데 그래픽 하드웨어의 경우 FPU가 FP16 연산을 네이티브로 지원하기 때문에 무리 없이 사용할 수 있으며 다른 분야와 다르게 그래픽의 경우 픽셀값이 0.0 - 1.0 사이의 값만 가지므로 부동소수점 연산 특유의 값이 0에서 가까울 수록 정밀도가 높아지고 멀수록 낮아지는 문제에서 자유롭기 때문이다.

프로세서 등 데이터 처리 과정에선 32비트(4바이트) 단위로 처리하는 경우가 많으므로, RGB에 1바이트 채널 하나를 더해 쓰는 경우도 많다.[11] 비워 두는 경우에는 단순한 패딩이지만, 이 추가 1바이트를 투명도를 나타내는 알파 채널로 쓰는 경우가 많다. 이 경우엔 RGBA라 부르기도 한다. 다만 알파 채널은 어디까지나 직접 출력될 색상을 나타내는 것이 아니며, 그래픽 프로세서 등에서 내부 처리(색상 혼합 = 블렌딩)를 통해 결과 색상을 다시 계산하는 것이므로, 색상을 표현하기 위한 것이 아닌 것에 주의할 필요가 있다. 모니터 페널들은 디더링 기법으로 지원하는 색상 깊이보다 더 깊은 색상을 구현해 원가를 절감하기도 한다.

각 채널별 색 심도를 10비트가 아니라 12비트, 16비트 등으로 더 늘여 쓰는 경우도 있다. 이 경우 총 색상은 36, 48비트 등이 되며, 이 경우에는 10비트처럼 딥컬러 혹은 HDR 등의 용어를 쓴다. 색심도를 더 높게 쓰는 곳이 많지는 않지만, 대표적으로는 다음과 같은 경우에 사용된다.
  • 사진 촬영 시에 RAW 포맷으로 저장하는 경우 광학 센서에서 샘플링되는 신호 레벨을 그대로 적용해 손상없이 저장하며 따라서 더 깊은 색심도로 저장된다.
  • 전문가용 고급 디스플레이 중에서는 HDR을 지원하는 경우도 있으며, 포토샵 등에서도 이런 경우를 위해 딥컬러를 다룰 수 있게 되어있다. 2021년 기준 출시되는 대부분의 TV는 HDR을 지원하며, 40~50만원대 이상인 중급형 이상 모니터들은 HDR을 대부분 지원한다.
  • 프로그래머의 경우 3개의 값이 들어간다는 점에 착안해서, 3가지 원소를 사용하는 개체를 RGB식으로 저장하는 경우나 그 반대의 경우도 꽤 많다. 대표적으로 3D 그래픽에서의 3차원 벡터/좌표. 특히 노멀 매핑같은 경우 RGB텍스쳐 저장 포맷을 그대로 사용할 수 있어 편하기 때문에 3차원 노멀 벡터의 xyz값을 RGB로 변환해서 이미지 파일로 저장하는 경우가 많으며, DirectX에서는 컬러값을 Vector3(float, float, float)으로 저장하기도 한다. 또한 분류 3개가 나오는 그래프의 경우도 RGB로 색상을 구분하기도 하는데, 왜냐면 색상값을 하드코딩으로 입력하기 편하기 때문. (255, 0, 0)이나 (1.0f, 0, 0) 또는 0xFF0000 등. 그것보다 갯수가 많으면 RGB 다음으로 CMYK가 들어간다.
  • OpenCV의 경우 메모리 내부 구조체에서 RGB가 아닌 BGR 포맷으로 이미지를 처리한다. 왜냐면 라이브러리 개발 당시 카메라 제조사들이 BGR포맷을 선호했기 때문. Endianness와 관련이 깊다.
  • 팔레트식 256색의 경우 R, G, B를 임의의 단계로 나눈 팔레트도 쓰였으며, 이는 n Level RGB 또는 n-n-n Levels RGB 식으로 불렸다. R, G, B의 단계를 동일하게 나눈 것으로는 6 Level RGB가 주로 쓰였으며, 그 외에도 6-7-6 Levels RGB와 6-8-5 Levels RGB, 8-8-4 level RGB도 쓰였다. 이 중 8-8-4 level RGB를 제외하면 남는 자리가 있는데, 이 경우는 남은 곳에 임의의 색이 들어간 경우도 있었다.

2. 대중매체에서의 활용

파일:상세 내용 아이콘.svg   자세한 내용은 삼원색(클리셰) 문서
번 문단을
부분을
참고하십시오.

3. 관련 문서


[1] 바이올렛이 섞인 선홍색이다. 여기서 파란색과 빨간색의 밝기를 동시에 낮추면 자주색(Purple)이 나온다. [2] 인간의 시각으로만 한정해도 4색각의 사례가 있다. 4색각의 경우 각 원뿔세포의 파장대역을 3색각자가 인지하는 색상으로 따지면 RYGB로 볼 수 있다. [3] 원뿔세포가 받아들이는 적색역은 거의 노란색의 파장에서 최대가 되며, 청색광도 일부 수용(!)하는 등의 문제가 있다. 또한 세 원뿔세포가 인식하는 빛에너지의 강도가 다르기도 하다. [4] 특정 RGB, 모니터가 재현 가능한 색 범위 [5] CMYK에서는 반대로 두 가지 색상을 섞었을때 검은색이 되는 해당 두 색상이 보색이다. [6] IBM MDA 허큘리스 그래픽 카드가 단색, 정확히는 2색만을 표현할 수 있다는 말이 있으나, 틀린 말이며 4색까지 표현할 수 있다. 이는 MDA와 허큘리스가 화면을 표시할 때 비디오, 강도 등 2핀을 사용하기 때문이다. 비디오 핀 신호는 색의 ON/OFF를 담당했으며 강도 핀 신호는 색조를 담당했다. 이러한 조합을 통해 이론적으로 검은색, 어두운 회색, 밝은 회색, 흰색을 표현할 수 있었다. 그러나 일반적으로 호환 모니터는 3색의 표현(검은색, 어두운 회색, 흰색)까지만 지원했으며 4색을 모두 사용하는 소프트웨어도 당대에는 극히 드물었다. [7] 다만 이렇게 되면 색이 나타나는 픽셀 전체의 정보량을 맞추기 위해 서브픽셀을 쓴다는 개념으로 이해해야 한다. [8] 청색의 표현 수가 적은 것은 인간의 눈에 있는 청색 원뿔세포가 가장 적고, 적색/녹색 원뿔세포가 단파장을 흡수하지 못하기 때문에 청색에 상대적으로 둔감하기 때문이다. 아날로그 컬러 TV 등에 사용되는 영상용 색상공간에서도 이런 요소가 고려되었으므로, 디지털에서도 큰 차이 없이 적용되었다. [9] 적색/청색 원뿔세포가 같이 받아들일 수 있는데다, 밀도가 상당히 높기 때문에 적색보다도 더 민감하다. [10] AVX의 vpaddb, vpaddw, vpaddd, vpaddq 가 그 예이다. 256비트의 벡터에서 각각 8비트, 16비트, 32비트, 64비트 단위로 연산한다. [11] R 11비트, G 11비트, B 10비트로 할당하는 방법도 있긴 하다.