Computer Graphics: Colors
색상 (Colors)
- 이 보고서는 디지털 색상이 컴퓨터 그래픽스에서 처리되는 방식에 대한 기본 개념을 설명하며, 특히 sRGB 색 공간과 감마 보정에 초점을 맞춥니다.
sRGB
색상 채널과 비트 심도
- 표준 색상 채널(빨강, 초록, 파랑)은 일반적으로 8비트를 사용하며, 이는 256단계의 개별 강도 수준($2^8$)을 나타냅니다.
- RGB 시스템에서 이는 결합되어 약 1,670만 개의 고유한 색상($256^3$)을 생성합니다.
- 그러나 8비트 정밀도는 매끄러운 그라데이션에서 컬러 밴딩(Color Banding)과 같은 시각적 아티팩트를 유발할 수 있습니다.
- 이를 해결하기 위해 현대적인 그래픽 파이프라인은 16비트(Half) 또는 32비트(Float) 정밀도를 활용하여 “채널을 확장”합니다.
-
이러한 비트 심도의 증가는 하이 다이내믹 레인지(High Dynamic Range, HDR) 렌더링에 필수적이며, 1.0보다 큰 광도 값을 저장할 수 있게 하고 데이터 손실 없이 수학적으로 정밀한 조명 계산을 보장합니다.

선형 및 감마 공간 (Linear and Gamma Space)
- 선형 공간 (Linear space)은 “물리적인” 영역입니다.
- 이는 빛이 실제 세계에서 실제로 행동하고 측정되는 방식입니다.
- 이 공간에서 한 광원의 에너지가 다른 광원의 두 배라면, 그 수치 값은 정확히 두 배가 됩니다.
- 이는 레이 트레이싱과 같은 모든 물리 기반 렌더링 계산이 정확성을 보장하기 위해 수행되어야 하는 공간입니다.
- 감마 공간 (Gamma space)은 반면에 “인지적인” 영역입니다.
- 이는 우리의 눈이 빛을 인지하는 방식을 모방하도록 설계된 비선형 색 공간입니다.
- 우리의 눈은 밝은 톤의 변화보다 어두운 톤의 변화에 더 민감하기 때문에, 감마 공간은 스펙트럼의 어두운 끝 부분에 더 많은 데이터를 할당합니다.
- 이것이 감마 공간을 사용하는 디지털 파일(예: 표준 8비트 이미지)이 그렇게 좋아 보일 수 있는 이유입니다.
- 이는 제한된 데이터를 우리의 시각에 가장 중요한 색상을 표현하는 데 효율적으로 사용하고 있기 때문입니다.
- 요약하자면:
- 선형 공간은 정확한 계산을 위한 것입니다.
- 감마 공간은 효율적인 표시 및 저장을 위한 것입니다.

sRGB란 무엇인가? (What is sRGB?)
- sRGB (standard Red Green Blue)는 사진, 웹 그래픽, 컴퓨터 모니터와 같은 디지털 콘텐츠를 위한 가장 일반적인 색 공간 표준입니다.
- 이는 광범위하게 채택된 감마 공간의 본질적인 특정 유형입니다.
- sRGB 형식은 인간의 인지에 더 가깝게 비선형 방식으로 색상 정보를 인코딩하여 텍스처 압축에 도움이 됩니다.
- 이는 우리의 시각 시스템이 어두운 톤의 변화에 더 민감하기 때문입니다.
- 이러한 어두운 음영을 표현하기 위해 더 많은 비트를 할당함으로써,
- sRGB는 제한된 8비트 색 공간이 인지적 관점에서 더 효율적으로 활용되도록 보장하여, 눈에 보이는 밴딩을 줄이고 압축 품질을 향상시킵니다.

RGB(0.5, 0.5, 0.5)는 중간 회색인가? (Is RGB(0.5, 0.5, 0.5) mid-gray?)
- 선형 색 공간에서 RGB(0.5, 0.5, 0.5)는 수학적으로 중간 회색을 나타냅니다.
- 하지만, 감마 인코딩된 색 공간에서 이 값은 실제 인지적 중간 회색보다 훨씬 밝게 보입니다.
- 감마 공간에서의 진정한 중간 회색은 비선형 곡선 때문에 상당히 더 어둡습니다.
-
선형 값과 감마 보정된 값 사이의 관계는 감마 인코딩 및 디코딩 곡선의 다음 그래픽 표현에 의해 설명됩니다.

18% 회색 (18% gray)
- 18% 회색은 입사광의 18%를 반사하는 특정 중성 회색 음영입니다.
- 이 특정 반사율은 노출 측정(exposure metering)을 위한 사진 및 영화 촬영에서 핵심적인 참조점이 됩니다.
- 흔한 오해는 18% 회색이 sRGB와 같은 감마 인코딩된 공간에서 0.18 (1.0 기준)의 디지털 강도 값에 해당한다는 것입니다.
- 그림 1에 설명된 것처럼, 인간 인지의 비선형적 특성으로 인해 18% 선형 빛은 50% 밝기(인지적 중간 회색)로 인지됩니다.
- 이 비선형 전달 함수(non-linear transfer function) 때문에, 18% 선형 회색 값은 표준 모니터에서 인지적 중간 회색으로 나타나기 위해 약 0.457 ($0.18^{1/2.2}$)의 디지털 값으로 인코딩되어야 합니다.
-
그림 1: 인지적 중간 회색 매핑 (The Perceptual Mid-Gray Mapping).

감마 보정 (Gamma Correction)
전달 함수 (Gamma Correction)
- 전달 함수, 특히 감마 인코딩은 선형 공간과 감마 공간 사이의 간극을 연결하기 위해 선형 빛 값에 적용됩니다.
- 이 비선형 연산은 우리의 눈에 더 인지적으로 균일하게 보이도록 어두운 톤을 확장하고 밝은 톤을 압축합니다.
- 역 과정인 감마 디코딩은 렌더링 계산에 필수적입니다.
- 이는 모든 물리적 빛 상호 작용(예: 색상 결합, 그림자)이 물리적으로 정확하려면 선형 공간에서 발생해야 하기 때문입니다.
-
이 전달 함수를 제대로 관리하지 못하면 이미지가 상당히 어두워지거나 부정확한 톤 균형을 가질 수 있습니다.

감마 보정을 적용하는 방법? (How to apply gamma correction?)
- 일반적인 단순화는 선형 공간과 감마 공간 사이의 변환을 설명하기 위해 감마 값 2를 사용합니다.
- 감마 인코딩된 값 $g$를 선형 값 $l$로 변환하려면:
- $l = g^\gamma$
- 감마가 2인 경우, 이는 다음과 같이 됩니다:
- $l = g^2$.
- 선형 값 $l$을 감마 인코딩된 값 $g$로 다시 변환하려면:
- $g = l^{1/\gamma}$
- 감마가 2인 경우, 이는 다음과 같이 됩니다:
- $g = \sqrt{l}$.

- 감마 인코딩된 값 $g$를 선형 값 $l$로 변환하려면:
노멀 및 거칠기 텍스처도 감마 보정되어야 하는가? (Should normal and roughness textures be gamma-corrected?)
- 아닙니다, 노멀 및 거칠기 텍스처는 감마 보정되어서는 안 됩니다.
- 이 텍스처들은 색상이 아닌 표면의 물리적 속성(예: 노멀의 방향, 표면 거칠기)을 나타내는 데이터를 저장합니다.
- 이 데이터는 물리 기반 렌더링 계산이 정확하려면 선형 상태를 유지해야 합니다.

실시간 렌더링에서의 색상 변환 (Color Transformation in Real-Time Rendering)
- 게임 엔진에서 빛과 색상을 시뮬레이션하는 과정은 빛이 물리적 세계에서 행동하는 방식을 정확하게 표현하기 위한 일련의 변환을 포함합니다.
- 이는 모니터에 표시되기 전에 조명, 쉐이딩 및 후처리 효과가 정확한 광도 값에 대해 계산되도록 보장합니다.
-
다음 단계들은 이 파이프라인을 간략하게 설명합니다.
- 입력 텍스처 (감마에서 선형으로):
- 아티스트가 만든 텍스처는 일반적으로 sRGB 형식(감마 인코딩됨)으로 저장됩니다.
- 게임 엔진이 물리적으로 정확한 조명 계산을 수행하려면,
- 먼저 이러한 sRGB 텍스처를 감마 공간에서 선형 공간으로 변환해야 합니다.
- 이는 확산 반사, 반사 하이라이트 및 그림자를 위한 조명 방정식이 실제 광도 값에 대해 수행되도록 보장합니다.
- 조명 및 렌더링 (선형):
- 빛이 3D 장면 주변에서 어떻게 반사되는지, 그림자가 어떻게 드리워지는지, 재질이 빛에 어떻게 반응하는지에 대한 모든 무거운 계산(heavy lifting)은 전적으로 선형 공간에서 발생합니다.
- 이는 물리적으로 정확하고 사실적인 렌더링을 달성하는 데 중요합니다.
- 후처리 및 톤 매핑 (선형):
- 초기 조명 계산 후, 블룸, 피사계 심도 및 색 보정과 같은 많은 후처리 효과가 선형 공간에서 적용됩니다.
- 톤 매핑은 여기서 중요한 단계로, 선형 빛 값의 넓은 동적 범위를 일반적인 모니터에 표시할 수 있는 범위로 압축합니다.
- 디스플레이로 출력 (선형에서 감마로):
- 최종 렌더링된 이미지는 디스플레이로 보내지기 전에 선형 공간에서 감마 공간(sRGB)으로 다시 변환되어야 합니다.
- 이 최종 감마 보정 단계는 모니터가 올바르게 해석할 수 있는 데이터를 수신하도록 보장하여, 사용자에게 인지적으로 균형 잡힌 이미지를 제공합니다.

- 입력 텍스처 (감마에서 선형으로):
감마 보정 없이 이미지가 더 어둡게 보이는 이유는 무엇인가? (Why do images look darker without gamma correction?)
- 감마 보정이 적용되지 않으면
- 디스플레이는 데이터가 감마 공간에 있을 것으로 예상하고 자체 감마 곡선을 데이터에 적용합니다.
- 입력 값이 이미 선형이므로, 디스플레이의 감마 곡선은 이미 정확한 값에 거듭제곱 함수를 효과적으로 적용합니다.
- 이로 인해 이미지가 의도한 것보다 상당히 더 어둡게 보이게 됩니다.
-
예를 들어, 0.5의 선형 중간 회색은 디스플레이에 의해 감마 값으로 취급되어 $0.5^{2.2} \approx 0.22$로 표시되며, 이는 인지적으로 매우 어둡습니다.

Leave a comment