Chapter 14

HDR과 광색역 영상

SDR 영상의 코드값 255는 "그 화면이 낼 수 있는 가장 밝은 흰색"이라는 상대적인 약속이었다. HDR 영상의 PQ 코드값은 다르다. 10비트 풀 레인지 코드 769는 신호 정의상 1,000 cd/m²를 뜻한다. 신호가 절대 휘도를 실어 나르기 시작하면서 전달 함수는 인간 시각의 대비 감도에 맞춰 다시 설계되었고, 화면이 그 휘도를 다 내지 못할 때 어떻게 줄일지(톤 매핑)가 새로운 공학 문제가 되었다.

상대 휘도에서 절대 휘도로

6장에서 본 SDR 영상의 전달 함수는 상대적이다. ITU-R BT.1886은 기준 디스플레이의 EOTF를 \( L = a\,\max(V+b,0)^{2.4} \)로 정의하는데, 계수 \(a, b\)는 그 디스플레이의 백색 휘도 \(L_W\)와 흑 휘도 \(L_B\)로부터 정해진다. 신호 \(V=1\)은 "100 cd/m²"가 아니라 "이 화면의 백색"이다. 마스터링 기준 환경(어두운 방, 약 100 cd/m²의 기준 모니터)이 관례로 정해져 있을 뿐, 소비자가 300 cd/m² 모니터로 보면 영상 전체가 세 배 밝아진다. 비율(대비)만 보존되고 절대 밝기는 화면이 정한다.

$$L = a\,\bigl[\max(V+b,\,0)\bigr]^{2.4},\qquad a = \bigl(L_W^{1/2.4}-L_B^{1/2.4}\bigr)^{2.4},\quad b = \frac{L_B^{1/2.4}}{L_W^{1/2.4}-L_B^{1/2.4}}$$
BT.1886 EOTF. \(V\): 정규화 신호(0–1), \(L\): 화면 휘도(cd/m²). \(L_B = 0\)이면 \(L = L_W V^{2.4}\)인 순수 거듭제곱이 된다.

이 방식은 화면의 밝기 범위가 대략 0.1–300 cd/m²로 비슷하던 시절에는 문제가 없었다. 그러나 실제 장면의 휘도는 훨씬 넓다. 아래 그림은 장면과 디스플레이의 휘도를 한 로그 축에 놓은 것이다. 장면 값은 조건에 따라 한두 자릿수씩 달라지는 개략적인 크기로만 읽어야 한다.

10⁻⁴10⁻³10⁻²10⁻¹11010²10³10⁴10⁵10⁶ 휘도 (cd/m², 로그 축) 장면 별빛 밤하늘~10⁻³ 달빛 장면~10⁻² 실내 조명 아래~10² 맑은 날 야외 반사면10³–10⁴ 눈·직사광 반사10⁵ 이상 태양 원반 ~10⁹ → SDR 0.1 – 100 (기준) ~300 (소비자) HDR 0.005 – 1,000 (흔한 마스터링 모니터) ~4,000 PQ 0 – 10,000 cd/m² 를 하나의 절대 척도로 부호화 203 (HDR 기준 백색)
그림 14-1. 장면 휘도와 디스플레이 휘도 범위(로그 축). 장면 값은 날씨·재질·노출 조건에 따라 크게 달라지는 개략적 크기다. SDR은 약 3자릿수, 고급 HDR 디스플레이는 5자릿수 이상을 표현하며, PQ는 0–10,000 cd/m²를 절대값으로 부호화한다.

장면은 10자릿수 이상에 걸치지만, 사람은 한 시야 안에서 그 전부를 동시에 보지 않는다. 눈은 적응 상태에 따라 한 번에 대략 4–5자릿수 정도의 범위를 구분하고, 적응을 바꿔 가며 나머지를 덮는다. HDR 영상의 목표는 장면을 그대로 재현하는 것이 아니라, 밝은 하이라이트와 깊은 그림자를 SDR보다 훨씬 넓은 디스플레이 범위 안에서 의도대로 재현하는 것이다. 그러려면 "이 픽셀은 몇 cd/m²로 보여야 한다"를 신호에 담아야 하고, 그 신호는 사람 눈이 구분하는 단계보다 촘촘해야 한다. 이 두 요구에서 PQ가 나왔다.

항목SDR (BT.709/BT.1886)HDR PQ (ST 2084 / BT.2100)HDR HLG (BT.2100)
신호의 의미디스플레이 기준, 상대 휘도디스플레이 기준, 절대 휘도장면 기준, 상대 장면광
정의된 함수EOTF(γ 2.4)EOTF(PQ)OETF(HLG) + OOTF(시스템 감마)
부호화 상한화면 백색 = 110,000 cd/m²장면광 1 = 디스플레이 피크 \(L_W\)
기준 백색(그래픽 백색)100 cd/m² 관례203 cd/m² (BT.2408)신호 75% (1,000 cd/m² 화면에서 203 cd/m²)
원색BT.709BT.2020BT.2020
비트 깊이8 / 1010 / 1210 / 12
메타데이터없음정적(HDR10) 또는 동적없음(설계상 불필요)

공학자 관점 — 단위와 용어. HDR 업계는 cd/m²를 흔히 "nit"이라 부른다(1 nit = 1 cd/m²). 이 장에서도 두 표기를 섞어 쓴다. "SDR 100 nit"는 기준 마스터링 관례일 뿐 BT.1886 자체에 박힌 값이 아니라는 점, 반면 PQ의 10,000 cd/m²는 SMPTE ST 2084 식에 상수로 들어 있는 절대 상한이라는 점을 구분하자.

PQ: 지각 양자화 곡선

PQ(Perceptual Quantizer)는 SMPTE ST 2084로 표준화되고 ITU-R BT.2100에 포함된 EOTF다. 정규화 신호 \(E' \in [0,1]\)을 디스플레이 휘도 \(F_D \in [0, 10000]\) cd/m²로 직접 대응시킨다. 감마 곡선처럼 하나의 거듭제곱이 아니라, 유리함수를 거듭제곱으로 감싼 형태다.

$$F_D = \mathrm{EOTF}[E'] = 10000\left(\frac{\max\!\bigl(E'^{1/m_2}-c_1,\;0\bigr)}{c_2 - c_3\,E'^{1/m_2}}\right)^{1/m_1}$$ $$E' = \mathrm{EOTF}^{-1}[F_D] = \left(\frac{c_1 + c_2\,Y^{m_1}}{1 + c_3\,Y^{m_1}}\right)^{m_2},\qquad Y = F_D/10000$$
\( m_1 = \tfrac{2610}{16384} = 0.1593017578125,\;\; m_2 = \tfrac{2523}{4096}\times128 = 78.84375,\;\; c_1 = \tfrac{3424}{4096} = 0.8359375 = c_3 - c_2 + 1,\;\; c_2 = \tfrac{2413}{4096}\times32 = 18.8515625,\;\; c_3 = \tfrac{2392}{4096}\times32 = 18.6875 \)

상수들이 4096이나 16384를 분모로 갖는 것은 고정소수점 구현을 염두에 둔 것이다. \(c_1 = c_3 - c_2 + 1\)이므로 \(Y = 1\)이면 분수가 정확히 1이 되어 \(E' = 1\)이고, \(Y=0\)이면 \(E' = c_1^{m_2} \approx 7.3\times10^{-7}\)으로 사실상 0이다. 즉 코드 전 범위가 0–10,000 cd/m²에 남김없이 쓰인다.

PQ — 디스플레이 기준 장면카메라·그레이딩 마스터링 모니터예: 1,000 nit, P3 PQ 신호= 절대 nit 디스플레이 EOTF능력 밖이면 톤 매핑(EETF) 보는 사람이 본 화면(마스터링 결과)을 그대로 nit 값으로 전송한다. OOTF는 그레이딩 단계에서 이미 적용되어 있다. HLG — 장면 기준 장면광 E상대값 0–1 HLG OETF√ + log HLG 신호= 상대 장면광 OETF⁻¹ → OOTF(γ)γ는 화면 피크 LW에 따라 카메라가 본 장면광의 비율을 전송하고, 각 디스플레이가 자기 피크에 맞춰 OOTF를 적용한다. 메타데이터 없이 1,000 nit와 500 nit 화면이 각자 알맞게 표시한다.
그림 14-2. PQ와 HLG의 신호 사슬. PQ는 마스터링 화면의 휘도를 절대값으로 실어 나르고, 수신 측이 그 값을 낼 수 없을 때만 톤 매핑한다. HLG는 장면광의 상대값을 보내고 수신 측이 OOTF를 적용한다.

아래 표는 대표 휘도의 PQ 신호값이다. 10비트 "풀 레인지"는 \(\mathrm{round}(1023E')\), "리미티드 레인지"(방송·영상 파일의 일반형)는 \(\mathrm{round}(64 + 876E')\)이다(레인지 개념은 15장). 0–100 cd/m²에 10비트 풀 레인지 코드의 절반 남짓(0–520)이 할당된다는 점이 PQ의 성격을 요약한다. 어두운 쪽을 촘촘히, 밝은 쪽을 성기게 쓴다.

휘도 (cd/m²)PQ \(E'\)10비트 풀10비트 리미티드12비트 풀비고
0.010.0215228388OLED급 흑
0.10.062364119255
10.1499153195614
100.29973073271227
1000.50815205092081SDR 기준 백색 관례
2030.58075945732378HDR 기준 백색(BT.2408)
1,0000.75187697233079흔한 마스터링 피크
4,0000.90269238553696고급 마스터링 피크
10,0001.000010239404095PQ 상한

흔한 실수 — PQ 코드값으로 평균 내기. PQ 신호는 휘도의 강한 비선형 함수다. 1 nit(0.150)와 1,000 nit(0.752) 두 픽셀의 PQ 평균 0.451은 약 55 nit에 해당하지만, 광량 평균은 500.5 nit다. 스케일링·블러·합성·평균 휘도(MaxFALL) 계산은 반드시 EOTF로 선형 nit로 되돌린 뒤 해야 한다(6장의 "선형광 연산" 원칙과 같다).

양자화와 대비 감도: 왜 이런 곡선인가

코드값 하나를 올렸을 때의 휘도 변화 \( \Delta L \)를 그 휘도로 나눈 Weber 비율 \( \Delta L / L \)이 그 휘도에서 사람이 볼 수 있는 최소 대비(대비 임계)보다 작으면, 매끈한 그라데이션에서 계단(밴딩)이 보이지 않는다. 반대로 임계보다 크면 하늘이나 어두운 벽에 등고선 같은 띠가 생긴다.

$$\frac{\Delta L}{L}(L) = \frac{\mathrm{EOTF}\!\left(E' + \tfrac{1}{N}\right) - \mathrm{EOTF}(E')}{\mathrm{EOTF}(E')},\qquad E' = \mathrm{EOTF}^{-1}(L),\;\; N = 2^{\text{bit}}-1$$
곡선이 미분 가능하면 \( \Delta L/L \approx \dfrac{1}{N}\,\dfrac{d\ln L}{dE'} \). 즉 Weber 비율은 "로그 휘도의 기울기"를 코드 수로 나눈 것이다.

이 식에서 곡선 설계의 세 가지 극단이 보인다.

PQ의 설계 동기는 Barten의 대비 감도 모델이다. 각 휘도 적응 상태에서 가장 민감한 공간 주파수의 대비 임계를 모아 놓은 곡선("Barten ramp")을 기준으로 삼고, 12비트 PQ의 코드 간격이 이 임계를 전 범위에서 밑돌도록 곡선을 맞추었다. 이것은 최악 조건(최적 주파수, 완전 적응, 잡음 없는 화면)의 임계라서 보수적이다. 10비트 PQ는 이 임계보다 약간 위에 놓이지만, 실제 영상은 카메라 잡음과 디더 덕분에 10비트 배포에서도 밴딩이 거의 보이지 않는다는 것이 업계 경험이다.

SIMULATOR

비트 깊이와 곡선에 따른 코드 간격 ΔL/L

PQ감마 2.4 (10,000 nit까지 확장)순수 로그 (10⁻³–10⁴)SDR 감마 2.4 (100 nit)개략적 대비 임계
비트 깊이
조사 휘도에서 ΔL/L (PQ · γ2.4 · log)—
개략적 임계—
임계 아래인 구간 비율 0.01–1,000 nit (PQ · γ2.4 · log)—
0–100 nit에 쓰인 코드 수 (PQ · γ2.4 · log)—
해볼 것: ① 12비트로 바꾸면 PQ 곡선이 임계선 바로 아래로 내려온다 — PQ가 그렇게 맞춰 설계되었다. ② 감마 2.4를 10,000 nit로 늘린 곡선은 1 nit 아래에서 10비트로도 ΔL/L이 10%를 넘는다. ③ 순수 로그는 평평하지만 밝은 영역에서 PQ보다 성기다. ④ 8비트 PQ는 어디서나 임계를 크게 넘는다 — HDR 배포가 최소 10비트인 이유다. 점선 임계는 Barten 모델을 직접 계산한 것이 아니라, 밝은 곳에서 약 0.25%로 평탄하고 어두울수록 오르는 경향을 \(T(L)=0.25\%\,[1+(1.2/L)^{0.45}]\)로 흉내 낸 개략적 교육용 근사다.

시뮬레이터에서 100 nit의 값을 읽어 보면, 10비트 PQ의 코드 간격은 약 0.98%, 12비트는 0.24%다. 같은 10비트라도 감마 2.4를 10,000 nit까지 늘린 곡선은 100 nit에서 1.6%, 1 nit에서 11%로, 어두운 영역이 PQ보다 5배 이상 성기다. 반대로 5,000 nit에서는 감마 곡선이 0.31%로 PQ(0.92%)보다 촘촘하다 — 아무도 구분하지 못하는 밝은 쪽 차이에 코드를 낭비하는 셈이다.

공학자 관점 — 파이프라인의 비트 깊이. 배포는 10비트 PQ로 충분하지만, 그레이딩·합성·톤 매핑 같은 중간 처리는 부동소수점(half float 이상)이나 12비트 이상에서 하는 것이 원칙이다. 10비트 PQ 신호에 게인이나 커브를 적용하고 다시 10비트로 양자화하면 코드 간격이 벌어진 구간에서 밴딩이 드러난다. 디스플레이 쪽 패널 구동도 10비트 + FRC/디더링을 흔히 쓴다.

HLG: 장면 기준 하이브리드 로그-감마

HLG(Hybrid Log-Gamma)는 NHK와 BBC가 방송용으로 설계해 ARIB STD-B67로 먼저 표준화되었고, BT.2100에 PQ와 함께 들어갔다. PQ와 철학이 반대다. 신호가 나타내는 것은 디스플레이 휘도가 아니라 카메라가 본 장면광의 상대값 \(E \in [0,1]\)이며, 정의의 중심은 OETF다.

$$E' = \mathrm{OETF}[E] = \begin{cases} \sqrt{3E}, & 0 \le E \le \tfrac{1}{12} \\[4pt] a\,\ln(12E - b) + c, & \tfrac{1}{12} \lt E \le 1 \end{cases}$$
\( a = 0.17883277,\;\; b = 1 - 4a = 0.28466892,\;\; c = 0.5 - a\ln(4a) = 0.55991073 \). 경계 \(E = 1/12\)에서 두 식은 값(\(E'=0.5\))과 기울기가 모두 이어지고, \(E = 1\)에서 \(E' = 1\)이 된다.

아래쪽 절반의 신호(\(E' \le 0.5\))는 제곱근, 즉 감마 2에 해당하는 전통적인 카메라 곡선과 거의 같다. 그래서 HLG 신호를 BT.2020 원색의 SDR 디스플레이에 그대로 넣어도 중간톤까지는 그럴듯한 영상이 나온다(SDR 호환성). 위쪽 절반은 로그로 바뀌어 하이라이트를 압축한다. 로그 구간의 Weber 비율은 일정하므로, 밝은 영역에서도 코드가 효율적으로 쓰인다.

01/12100.50.751 장면광 E (상대값) 신호 E′ 경계 (1/12, 0.5) √(3E) 연장 (점선) 로그 구간: a·ln(12E−b)+c 제곱근 구간 ≈ 감마 2 • 하위 절반 신호 = 전통적 카메라 감마 → SDR 화면에서도 중간톤까지 자연스럽다 • 상위 절반 = 로그 압축 → 하이라이트(장면광 1/12–1)를 담는다 • E′ = 0.75: 기준 백색(그래픽 백색) → 1,000 nit 화면에서 203 cd/m² • 신호가 nit를 정하지 않는다 → 화면이 OOTF로 결정
그림 14-3. HLG OETF. \(E \le 1/12\)에서는 \(\sqrt{3E}\)(점선과 일치), 그 위에서는 로그 곡선으로 갈라져 하이라이트를 압축한다. 장면광의 12분의 1까지가 신호 범위의 절반을 차지한다.

HLG에서 디스플레이 휘도는 OETF의 역함수로 장면광을 되찾은 뒤, 디스플레이가 OOTF(Opto-Optical Transfer Function)를 적용해 정한다. BT.2100의 OOTF는 장면 휘도 \(Y_S\)에 시스템 감마를 걸고 그 비율을 세 채널에 똑같이 곱한다. 채널별로 감마를 걸지 않으므로 색도가 보존된다.

$$F_D = \alpha\, Y_S^{\,\gamma-1}\,E,\qquad Y_S = 0.2627R_S + 0.6780G_S + 0.0593B_S,\qquad \gamma = 1.2 + 0.42\,\log_{10}\!\frac{L_W}{1000}$$
\(\alpha = L_W\): 디스플레이 공칭 피크(cd/m²). \(\gamma\) 식은 \(L_W\) 400–2,000 cd/m² 범위에 대해 BT.2100이 주는 값이며, 1,000 cd/m²에서 1.2다. 흑 휘도 \(L_B\)가 있으면 EOTF 입력에 \(\beta = \sqrt{3(L_B/L_W)^{1/\gamma}}\)를 더해 \( \max(0,(1-\beta)E'+\beta) \)를 OETF⁻¹에 넣는다.

시스템 감마가 1보다 큰 이유는 9장의 외관 효과 때문이다. 밝은 장면을 어둑한 시청 환경의 화면으로 보면 대비가 약해 보이므로(Stevens·Bartleson–Breneman 효과), 재생 쪽에서 감마를 조금 올려 보상한다. 화면이 밝을수록 필요한 보상이 커지므로 \(\gamma\)가 \(L_W\)에 따라 오른다. 실제로 신호 75%(기준 백색)를 계산하면 \(E = \mathrm{OETF}^{-1}(0.75) = 0.26497\)이고, 1,000 nit 화면에서 \(1000 \times 0.26497^{1.2} = 203.2\) cd/m², 2,000 nit 화면(\(\gamma = 1.326\))에서 343 cd/m², 400 nit 화면(\(\gamma = 1.033\))에서 102 cd/m²가 된다. 같은 신호가 화면 능력에 맞춰 다르게, 그러나 각자 자연스럽게 표시된다.

SIMULATOR

EOTF 비교: PQ · HLG(+시스템 감마) · BT.1886

PQ (ST 2084)HLG (LW, γ)BT.1886 SDR
디스플레이 흑 LB (cd/m²)
PQ 휘도—
HLG 휘도—
HLG 시스템 감마 γ—
BT.1886 휘도—
해볼 것: ① 신호를 0.58에 두면 PQ가 203 nit, 0.75에 두면 HLG(1,000 nit 화면)가 203 nit다 — 두 방식의 기준 백색 위치가 다르다. ② HLG 피크를 400 ↔ 2,000으로 움직이면 HLG 곡선 전체가 위아래로 움직이지만 PQ는 그대로다(절대 vs 상대). ③ SDR 백색을 100 → 300으로 올리면 BT.1886 곡선도 위로 평행이동한다. ④ 흑 LB를 바꾸면 어두운 쪽 꼬리가 들린다. PQ는 흑 오프셋이 신호 정의에 없다.

공학자 관점 — PQ와 HLG의 선택. PQ는 마스터링 의도(절대 nit)를 정밀하게 전달하므로 영화·스트리밍(HDR10, Dolby Vision, HDR10+)에서 주류다. 대신 화면 능력이 마스터링보다 낮으면 수신기 톤 매핑에 결과가 좌우된다. HLG는 메타데이터 없이 실시간 생방송에 쓰기 쉽고 SDR 수신기 호환성이 있어 방송에서 주로 쓰인다. 두 방식 사이 변환은 BT.2100·BT.2408에 정의된 관계(HLG를 1,000 nit 기준 디스플레이로 표시한 결과를 PQ로 부호화하는 식)를 쓴다.

BT.2100과 ICtCp

ITU-R BT.2100은 HDR 영상 시스템의 매개변수를 한데 묶은 권고다. 원색과 백색점은 BT.2020과 같고(R 0.708/0.292, G 0.170/0.797, B 0.131/0.046, D65), 전달 함수로 PQ와 HLG 두 가지를, 비트 깊이로 10·12비트를 정한다. 색차 신호로는 BT.2020과 같은 비상수 휘도 Y′C′BC′R(15장) 외에 ICtCp를 정의한다.

Y′C′BC′R은 감마(또는 PQ) 인코딩된 R′G′B′를 섞기 때문에, 고채도·고휘도 색에서 "휘도" 성분 Y′에 색 정보가 새고 색차 신호에 휘도 정보가 샌다. 크로마 서브샘플링이나 톤 매핑 때 이 누설이 색상·밝기 오차로 나타난다. ICtCp는 순서를 바꾸어, 먼저 원추세포에 가까운 LMS로 선형 변환한 뒤 PQ(또는 HLG)를 각 성분에 적용하고, 마지막에 반대색 축으로 회전한다. 지각적으로 더 균등하고, 휘도와 색이 더 잘 분리된다.

선형 RGBBT.2020, cd/m² LMS크로스토크 포함 3×3 L′M′S′각 성분에 PQ⁻¹ I, CT, CP밝기 · 청-황 · 적-녹 M₁/4096 비선형 M₂/4096 각 행렬의 행 합: M₁은 4096(백색 → L = M = S), M₂의 CT·CP 행은 0(무채색 → CT = CP = 0) 비선형 단계가 행렬 사이에 있어 "휘도에 색이 새는" 문제가 Y′C′BC′R보다 작다
그림 14-4. BT.2100 ICtCp 변환. 선형 BT.2020 RGB → 크로스토크가 섞인 LMS → 성분별 PQ 역EOTF → 반대색 회전. 무채색은 정확히 \(C_T = C_P = 0\)으로 가고, \(I\)는 PQ 신호값과 같아진다.
$$\begin{bmatrix}L\\M\\S\end{bmatrix} = \frac{1}{4096}\begin{bmatrix}1688 & 2146 & 262\\ 683 & 2951 & 462\\ 99 & 309 & 3688\end{bmatrix}\begin{bmatrix}R\\G\\B\end{bmatrix},\qquad L' = \mathrm{EOTF}^{-1}_{PQ}(L),\;\dots$$ $$\begin{bmatrix}I\\C_T\\C_P\end{bmatrix} = \frac{1}{4096}\begin{bmatrix}2048 & 2048 & 0\\ 6610 & -13613 & 7003\\ 17933 & -17390 & -543\end{bmatrix}\begin{bmatrix}L'\\M'\\S'\end{bmatrix}$$
RGB는 BT.2020 원색의 선형 휘도(cd/m²)이며 PQ 역함수 안에서 10,000으로 정규화된다. HLG용 ICtCp는 같은 LMS에 HLG OETF를 적용하고 회전 행렬 계수가 다르다(여기서는 PQ판만 다룬다).

ICtCp 공간에서 HDR 색차 지표 ΔEITP가 ITU-R BT.2124로 정해졌다. \(C_T\) 축은 지각 균등성을 위해 절반으로 줄여 \(T = 0.5\,C_T\), \(P = C_P\)로 쓰고, 720을 곱해 ΔEITP = 1이 대략 한 단계의 가시 차이(JND)가 되게 맞추었다.

$$\Delta E_{ITP} = 720\sqrt{\Delta I^2 + \Delta T^2 + \Delta P^2},\qquad T = 0.5\,C_T,\;\; P = C_P$$
무채색에서 10비트 PQ 코드 하나는 \(\Delta I = 1/1023\)이므로 \(\Delta E_{ITP} = 720/1023 = 0.704\), 12비트는 0.176이다 — 앞 절의 "10비트는 임계 근처, 12비트는 충분히 아래"와 같은 결론이 색차 단위로 나온다.
SIMULATOR

PQ · HLG · SDR 신호 계산기와 ICtCp / ΔEITP

휘도 δ% 변화의 ΔEITP (선택 색)10비트 PQ 1코드 (무채색)12비트 PQ 1코드
색 (BT.2020 선형 비율)
PQ E′ (10비트 풀 / 리미티드 · 12비트)—
HLG 신호 (무채색)—
SDR 신호 (100 nit, γ2.4)—
RGB₂₀₂₀ (cd/m²)—
I, CT, CP—
ΔEITP (Y → Y·(1+δ))—
해볼 것: ① 무채색 203 nit에서 PQ 0.5807, HLG 0.75, SDR은 범위 밖(100 nit 초과)임을 확인하자. ② δ = 1%로 두고 휘도를 0.1 → 1,000 nit로 올리면 ΔEITP가 0.19 → 0.78로 커진다. 같은 1% 변화라도 어두운 곳에서는 덜 보인다는 뜻이다(드브리스–로즈 영역). ③ 10비트 PQ 1코드 선은 휘도에 무관하게 0.704로 평평하다 — I가 PQ 신호 그 자체이기 때문이다. ④ 색을 바꾸면 I와 CT·CP가 함께 바뀐다. 2020 R처럼 고채도 색은 CP가 크다.

계산 예: BT.2020 적색 원색 1,000 cd/m²(\(R = 1000, G = B = 0\))는 \((I, C_T, C_P) = (0.608, -0.165, 0.443)\)이다. 같은 \(Y\)의 무채색보다 \(I\)가 낮게 나오는 것은 LMS의 원추 감도 가중 때문이며, \(I\)가 "휘도"가 아니라 "지각 밝기의 근사"라는 점을 보여 준다.

톤 매핑: 마스터링 휘도를 디스플레이 능력으로

PQ 콘텐츠가 4,000 nit 모니터에서 마스터링되었는데 시청자의 TV 피크가 600 nit라면, 600 nit를 넘는 값을 어떻게 할지 정해야 한다. 이 변환을 톤 매핑(tone mapping), BT.2390의 용어로는 EETF(Electrical-Electrical Transfer Function)라 한다. 설계 목표는 서로 충돌한다.

대표 커브를 출력 휘도 \(L_o\)(cd/m²)에 대해 정리하면 다음과 같다. \(L_m\)은 마스터링 피크(또는 MaxCLL), \(L_d\)는 디스플레이 피크, \(x = L/L_d\), \(w = L_m/L_d\)이다.

$$\text{Reinhard: } L_o = L_d\frac{x}{1+x}\qquad \text{확장 Reinhard: } L_o = L_d\,\frac{x\,(1 + x/w^2)}{1+x}$$ $$\text{필름형(Hable): } L_o = L_d\,\frac{h(11.2\,L/L_m)}{h(11.2)},\quad h(t) = \frac{t(At + CB) + DE}{t(At + B) + DF} - \frac{E}{F}$$
Hable 곡선의 상수는 널리 쓰이는 값 \(A=0.15, B=0.50, C=0.10, D=0.20, E=0.02, F=0.30\), 백색점 11.2를 썼다. 단순 Reinhard는 \(L_m\)과 무관하게 \(L_d\)에 점근할 뿐 도달하지 않고, 확장형은 \(x = w\)에서 정확히 \(L_d\)가 된다.

BT.2390 EETF는 PQ 신호 영역에서 작동한다. 마스터링 범위 \([L_B, L_W]\)의 PQ 값을 0–1로 정규화한 \(E_1\)에 대해, 디스플레이 피크의 정규화 PQ값 \(m_L\)으로부터 knee 시작점 \(KS = 1.5\,m_L - 0.5\)를 잡고, 그 아래는 그대로(기울기 1), 위쪽은 에르미트 스플라인으로 \((1, m_L)\)에 기울기 0으로 닿게 한다.

$$E_2 = \begin{cases} E_1, & E_1 \lt KS\\ P(E_1), & KS \le E_1 \le 1\end{cases},\qquad T = \frac{E_1 - KS}{1 - KS}$$ $$P = (2T^3 - 3T^2 + 1)\,KS + (T^3 - 2T^2 + T)(1-KS) + (-2T^3 + 3T^2)\,m_L$$
\(E_1 = \bigl(E' - \mathrm{PQ}(L_B)\bigr)/\bigl(\mathrm{PQ}(L_W) - \mathrm{PQ}(L_B)\bigr)\), \(m_L\)도 같은 방식으로 정규화한 디스플레이 피크. 흑 쪽에는 \(E_3 = E_2 + b(1-E_2)^4\)(\(b\): 정규화 디스플레이 흑)로 바닥을 들어 올리는 항이 있다. 이 장의 시뮬레이터는 \(L_B = 0\), 디스플레이 흑 0으로 두어 이 항을 생략한다. 결과는 \(E_4 = E_2(\mathrm{PQ}(L_W)-\mathrm{PQ}(L_B)) + \mathrm{PQ}(L_B)\)를 EOTF로 되돌린다.

PQ가 지각적으로 균등하므로, PQ 영역에서의 knee는 "눈에 보이는 단계"로 균형 잡힌 압축이 된다. 예를 들어 1,000 → 600 nit 매핑의 knee는 약 464 nit에서 시작하고, 4,000 → 600 nit 매핑에서는 약 229 nit에서 시작한다. 두 경우 모두 203 nit 기준 백색은 그대로 203 nit에 남는다. 반면 단순 Reinhard는 4,000 → 600 nit에서 203 nit를 152 nit로 끌어내려 영상 전체를 어둡게 만든다.

SIMULATOR

톤 매핑 커브 편집기와 합성 HDR 장면

커브
색 처리
203 nit →—
1,000 nit →—
기울기 1에서 벗어나는 지점(±2%)—
Lm → —
해볼 것: ① 클리핑으로 두면 장면 상단 그라데이션의 오른쪽 끝이 Ld에서 평평하게 하얗게 잘리고, 밝은 패치 줄(맨 아래 패치 행)의 색 구분이 사라진다. ② Reinhard는 하이라이트를 살리지만 203 nit 이하까지 어둡게 누른다(장면 전체가 침침해짐). ③ BT.2390은 knee 아래를 그대로 두고 위만 압축한다. Ld를 Lm 가까이 올리면 knee가 올라가 거의 항등이 된다. ④ 색 처리를 "채널별"로 바꾸고 파랑·마젠타 패치의 맨 아래 행을 보라 — 하양·청록 쪽으로 색이 바랜다. 장면은 BT.2020 선형 nit로 계산한 뒤, 디스플레이 피크 Ld를 이 화면의 백색으로 놓고 sRGB로 표시했다(sRGB 밖 색은 화면에서 클리핑됨).

심화 — 톤 매핑은 어디서 일어나는가. HDR10 TV는 정적 메타데이터(마스터링 피크, MaxCLL)를 보고 자체 알고리즘으로 EETF를 고른다. 같은 콘텐츠가 TV 제조사마다 다르게 보이는 주된 원인이다. 동적 메타데이터는 장면별 통계를 실어 보내 이 추정을 돕고, 게임·그래픽에서는 콘솔/OS가 디스플레이 능력을 질의해 렌더러 안에서 직접 톤 매핑하기도 한다.

색상 보존: 무엇에 톤 커브를 거는가

톤 커브 \(f\)는 1차원 함수인데 픽셀은 3차원이다. 커브를 어디에 거느냐에 따라 색이 달라진다.

SIMULATOR

채널별 vs 휘도·maxRGB·ICtCp 톤 매핑의 색도 궤적

채널별휘도 Y + 클리핑maxRGBICtCp I
원래 색 (BT.2020 선형 비율)
커브
입력 색도 xy—
피크에서 색상각 변화 ΔhTP (채널별 · Y · max · ICtCp)—
피크에서 색도 이동 Δu′v′ (같은 순서)—
해볼 것: ① 밝은 파랑에서 채널별 궤적(빨강 선)이 원래 점에서 출발해 청록·흰색 방향으로 길게 끌려간다. maxRGB는 한 점에 머문다. ② 휘도 Y 방식은 처음엔 제자리였다가, B 채널이 Ld를 넘는 순간부터 클리핑 때문에 움직인다. ③ 디스플레이 피크를 마스터링 피크 쪽으로 올리면 모든 궤적이 짧아진다 — 톤 매핑이 덜 필요하기 때문이다. ④ 피부톤은 채도가 낮아 방식 간 차이가 작다. 아래 띠는 세기를 10 nit부터 마스터링 피크까지 올리며 각 방식의 결과 색을 Ld = 화면 백색으로 정규화해 늘어놓은 것이다. ΔhTP는 ICtCp의 \(\mathrm{atan2}(C_P, 0.5C_T)\) 각도 차다.

밝은 파랑(BT.2020 선형 비율 0.1 : 0.25 : 1, xy = 0.169, 0.160)을 4,000 nit 피크로 마스터링하고 600 nit 화면에 BT.2390 커브로 채널별 톤 매핑하면, 최대 세기에서 색도가 (0.263, 0.318)로 이동한다 — 원래의 짙은 파랑이 연한 하늘색이 된다. maxRGB 방식은 (0.169, 0.160)을 그대로 지킨다. 채널별 톤 매핑의 색상 이동은 버그가 아니라 수학적 필연이다.

흔한 실수 — 감마 영역에서 maxRGB나 Y 구하기. \(Y = 0.2627R + 0.6780G + 0.0593B\)는 선형 BT.2020 성분에만 유효하다. PQ 인코딩된 R′G′B′에 이 가중치를 곱한 값은 휘도가 아니다(이것이 비상수 휘도 Y′의 정의이고, 바로 ICtCp가 피하려는 누설의 원인이다). 톤 매핑의 "휘도"는 항상 선형광에서 구한다.

HDR 메타데이터

PQ 신호만으로는 "이 영상에서 실제로 쓰인 최대 휘도"를 알 수 없다. 10,000 nit 범위 중 1,000 nit까지만 쓴 영상인지, 4,000 nit까지 쓴 영상인지에 따라 수신기의 최적 톤 커브가 달라진다. 메타데이터는 이 정보를 실어 보낸다.

구분이름내용쓰임
정적SMPTE ST 2086 (MDCV)마스터링 디스플레이의 원색·백색점 xy, 최대·최소 휘도콘텐츠가 실제로 존재할 수 있는 색역·휘도 범위의 상한
MaxCLL전체 콘텐츠에서 가장 밝은 픽셀의 광 레벨(픽셀별 max(R,G,B), cd/m²)톤 커브의 상단 기준(Lm 대신)
MaxFALL프레임 평균 광 레벨(픽셀별 max(R,G,B)의 프레임 평균)의 최댓값전력·ABL 제한 추정, 전체 밝기 판단
동적SMPTE ST 2094 계열장면·프레임별 휘도 분포 통계와 톤 매핑 매개변수장면마다 다른 커브 적용
상용 체계Dolby Vision(ST 2094-10 계열), HDR10+(ST 2094-40 계열)배포 포맷과 수신기 구현이 함께 정의됨

흔히 "HDR10"이라 부르는 것은 PQ + BT.2020 원색 + 10비트 + 정적 메타데이터(ST 2086, MaxCLL, MaxFALL)의 조합이다. MaxCLL과 MaxFALL은 CTA-861.3에서 정의되며, 둘 다 픽셀별 \(\max(R,G,B)\)를 선형 nit로 계산한다. 정적 메타데이터의 약점은 "가장 밝은 한 프레임"이 전체 영상의 톤 매핑을 지배한다는 점이다. 어두운 장면이 대부분이고 폭발 한 번이 4,000 nit라면, MaxCLL만 보는 수신기는 어두운 장면까지 과하게 압축한다. 동적 메타데이터가 이를 해결한다.

SIMULATOR

MaxCLL · MaxFALL 계산 (합성 클립 120 프레임)

프레임 최대 광 레벨프레임 평균 광 레벨디스플레이 피크
MaxCLL—
MaxFALL—
피크를 넘는 프레임—
PQ 코드 평균으로 잘못 구한 FALL—
해볼 것: ① 폭발 면적을 1%로 줄여도 MaxCLL은 그대로다 — 픽셀 하나의 최댓값이기 때문이다. MaxFALL만 줄어든다. ② 디스플레이 피크를 MaxCLL 위로 올리면 "피크를 넘는 프레임"이 0이 되어 톤 매핑이 필요 없다. ③ 마지막 값은 PQ 코드값을 평균한 뒤 nit로 바꾼 "틀린 FALL"이다. 광량 평균보다 크게 낮게 나온다. 각 프레임은 48×27 픽셀로 계산했으며, 배경 패닝·작은 반사 하이라이트·프레임 40–90의 폭발로 구성된다.

SDR↔HDR 변환과 기준 백색 203 nit

HDR 프로그램에 SDR 소스(자막, 그래픽, 기존 영상)를 섞거나 HDR을 SDR로 내려보낼 때 가장 먼저 정할 것은 SDR의 백색을 HDR에서 몇 nit로 둘 것인가다. 100 nit로 두면 SDR 영상이 HDR 프로그램 안에서 어둡고 칙칙해 보이고, 너무 높이면 그래픽이 눈부시다. ITU-R BT.2408은 운영 지침으로 HDR 기준 백색(HDR Reference White)을 203 cd/m²로 권고한다. 이것은 PQ 신호 58%, 1,000 nit 화면 기준 HLG 신호 75%에 해당한다.

SDR (BT.1886, γ 2.4) HDR PQ (절대 nit) 100%50%0% 10,000 nit (1.000) 1,000 nit (0.752) 203 nit (0.581) 38.5 nit (0.416) 1 nit (0.150) SDR 100% → 203 nit SDR 50% → 203 × 0.5^2.4 = 38.5 nit 하이라이트 헤드룸 기준 백색 위(PQ 0.58–1.0)는 반사광이 아닌 광원·정반사 하이라이트를 위한 여유
그림 14-5. 디스플레이 기준 SDR→HDR 매핑. SDR의 100% 백색을 203 nit에 놓고, BT.1886 감마 2.4로 선형화한 비율을 그대로 유지한다. PQ 막대의 위치는 신호값 \(E'\)에 비례한다.

디스플레이 기준의 가장 단순한 SDR→HDR 변환은 \(L_{HDR} = 203 \cdot V_{SDR}^{2.4}\)(BT.2020 원색으로 행렬 변환 후)를 PQ로 부호화하는 것이다. SDR 50% 회색은 38.5 nit, PQ 0.416이 된다. SDR 영상이 원래 의도대로(=기준 백색 아래에서) 보이고, 그 위의 헤드룸은 비어 있다. 반대 방향 HDR→SDR은 203 nit를 SDR 100% 근처에 놓고 그 위를 톤 매핑으로 압축한 뒤 BT.709 가멋으로 매핑한다. 업컨버전에서 SDR 하이라이트를 "확장"해 헤드룸을 채우는 역 톤 매핑도 있지만, 원래 없던 정보를 만드는 것이므로 결과는 알고리즘에 따른 선택이다.

공학자 관점 — 203이라는 숫자. BT.2408은 18% 반사 회색 카드를 HDR에서 26 nit 근처, 기준 백색을 203 nit로 두는 운영 관행을 기술한다. 그래픽 백색이 203 nit라면 PQ 10비트 풀 레인지 코드 594, 리미티드 레인지 573이다. OS의 HDR 모드에서 "SDR 콘텐츠 밝기" 슬라이더가 하는 일이 바로 이 SDR 백색 nit 값을 바꾸는 것이다.

광색역 렌더링: Rec.2020 컨테이너 안의 P3

BT.2100 신호는 BT.2020 원색을 쓰지만, 현재 이 원색을 완전히 내는 소비자 디스플레이는 드물고, 마스터링 모니터도 대부분 DCI-P3 원색(D65 백색) 수준이다. 그래서 실무 HDR 콘텐츠의 대부분은 "Rec.2020 컨테이너 안의 P3 콘텐츠"다. 신호 좌표계는 2020이지만 실제 색은 P3 삼각형 안에 있고, ST 2086 메타데이터는 마스터링 디스플레이의 원색을 알려 준다. 이 정보는 제작 환경의 색역이며, 프레임의 실제 색 분포를 측정하거나 보장하는 값은 아니다.

00.40.800.40.8 D65 2020 G P3 G — Rec.2020 (컨테이너) — DCI-P3 D65 (실제 콘텐츠 범위) - - sRGB / Rec.709 xy 면적 비 (Rec.2020 = 100%) P3 71.7% · sRGB 52.9% u′v′ 면적 비 P3 72.9% · sRGB 58.0% P3 → 2020 선형 행렬 [0.7538 0.1986 0.0476] [0.0457 0.9418 0.0125] [−0.0012 0.0176 0.9836] P3 원색은 2020 안쪽(적색만 R–G 변에 극히 근접)
그림 14-6. CIE 1931 xy 위의 Rec.2020, DCI-P3(D65), sRGB 삼각형. 실무 HDR 콘텐츠는 2020 좌표로 부호화되지만 실제 색은 대부분 P3 삼각형 안에 있다. 면적 비는 이 장의 행렬 계산으로 구한 값이다.

P3 → 2020 변환은 같은 D65 백색을 쓰는 두 RGB 공간 사이의 3×3 행렬이다(5장의 \(M_{2020}^{-1}M_{P3}\)). 계산해 보면 P3 적색 \((1,0,0)\)은 2020 선형 \((0.7538, 0.0457, -0.0012)\)이 된다. B 성분이 아주 작은 음수인 것은 P3 적색점(0.680, 0.320)이 2020의 R–G 변(그 x에서 y ≈ 0.318)보다 미세하게 바깥에 있기 때문이다. 실무에서는 무시해도 되는 크기지만, 0 미만 값을 허용하지 않는 정수 파이프라인에서는 클리핑된다는 점을 알아 둘 만하다.

반대로 2020 컨테이너 신호를 P3 디스플레이나 sRGB 디스플레이로 보낼 때는 가멋 매핑이 필요하다. 단순 클리핑은 톤 매핑의 채널별 클리핑과 같은 이유로 색상을 이동시킨다. 색상을 보존하며 채도를 줄이는 방법들은 5장의 가멋 매핑과 16장의 렌더링 인텐트에서 다룬다. HDR에서는 휘도 압축(톤 매핑)과 채도 압축(가멋 매핑)이 서로 영향을 주므로, ICtCp 같은 지각 균등 공간에서 함께 처리하는 것이 일반적인 방향이다.

공학자 관점 — 세 개의 "색역" 정보를 구분하라. ① 신호 컨테이너 원색(BT.2020, VUI/SEI의 colour primaries), ② 마스터링 디스플레이 원색(ST 2086, 보통 P3-D65), ③ 수신 디스플레이의 실제 원색. ①만 보고 2020 전체를 매핑 대상으로 잡으면 P3 콘텐츠를 불필요하게 압축한다. ②는 제작 환경을 파악하는 참고 정보다. 실제 콘텐츠의 색역을 좁혀 매핑하려면 화소 분석이나 그 목적의 콘텐츠 메타데이터가 필요하다.

핵심 정리

  1. SDR(BT.1886)은 화면 백색에 대한 상대 휘도를, HDR PQ는 0–10,000 cd/m²의 절대 휘도를 부호화한다. HLG는 장면광의 상대값을 보내고 화면이 OOTF로 휘도를 정한다.
  2. PQ EOTF: \(F_D = 10000\,[\max(E'^{1/m_2}-c_1,0)/(c_2-c_3E'^{1/m_2})]^{1/m_1}\), \(m_1 = 2610/16384\), \(m_2 = 78.84375\), \(c_1 = 0.8359375\), \(c_2 = 18.8515625\), \(c_3 = 18.6875\). 100 nit = 0.508, 203 nit = 0.581, 1,000 nit = 0.752.
  3. PQ는 Barten 대비 임계에 맞춰 설계되었다. 12비트에서 임계 아래, 10비트는 임계 근처(100 nit에서 ΔL/L ≈ 0.98%)이며 실제 배포에는 충분하다. 감마 2.4를 10,000 nit로 늘린 곡선은 어두운 쪽이 수 배 성기다.
  4. HLG OETF는 \(E \le 1/12\)에서 \(\sqrt{3E}\), 위에서 \(a\ln(12E-b)+c\). 시스템 감마 \(\gamma = 1.2 + 0.42\log_{10}(L_W/1000)\). 신호 75%는 1,000 nit 화면에서 203 nit다.
  5. ICtCp = BT.2020 RGB → LMS(/4096 행렬) → PQ → 반대색 회전. ΔEITP = 720√(ΔI² + ΔT² + ΔP²), T = 0.5CT. 무채색에서 10비트 PQ 1코드는 ΔEITP 0.704다.
  6. 톤 매핑은 중간톤 보존과 하이라이트 계조 사이의 절충이다. BT.2390 EETF는 PQ 영역에서 knee \(KS = 1.5m_L - 0.5\) 위만 에르미트 스플라인으로 압축한다.
  7. 채널별 톤 매핑은 색상을 이동시킨다(밝은 파랑 → 하늘색·흰색). 휘도·maxRGB·ICtCp 기반 방식은 색도를 보존하되 각각 클리핑, 채도 색 어두워짐, 가멋 이탈의 대가가 있다.
  8. 정적 메타데이터(ST 2086, MaxCLL, MaxFALL)는 선형 nit의 max(R,G,B)로 계산한다. 동적 메타데이터(ST 2094 계열)는 장면별 톤 매핑을 가능하게 한다.
  9. SDR 백색은 HDR에서 203 cd/m²(BT.2408)에 둔다. 실무 HDR은 대부분 Rec.2020 컨테이너 안의 P3 콘텐츠이며, 마스터링 원색 메타데이터로 가멋 매핑 범위를 좁힐 수 있다.

확인 퀴즈

SDR 영상 신호 V = 1과 PQ 신호 E′ = 0.7518의 의미 차이로 옳은 것은?

BT.1886은 디스플레이의 LW, LB로 계수가 정해지는 상대 EOTF다. PQ는 절대 EOTF이므로 E′ = 0.7518 → 1,000 cd/m²로 고정된다.

PQ 상수에서 \(c_1 = c_3 - c_2 + 1\)이 갖는 의미는?

\(Y^{m_1}=1\)이면 \((c_1+c_2)/(1+c_3) = 1\)이 되려면 \(c_1 = 1 + c_3 - c_2 = 0.8359375\)이어야 한다. 코드 전 범위가 0–10,000 nit에 정확히 대응한다.

10비트에서 0.001–10,000 cd/m²를 순수 로그로 부호화할 때 코드 간격 ΔL/L은 약 얼마이며, 이것이 PQ보다 불리한 곳은?

\(10^{7/1023}-1 \approx 1.59\%\)로 일정하다. 사람의 임계는 밝은 곳에서 낮으므로 로그는 밝은 영역에서 PQ보다 성기고, 어두운 영역(임계가 높은 곳)에서는 필요 이상으로 촘촘하다.

HLG 신호 75%를 2,000 cd/m² 디스플레이에 표시할 때 휘도는? (OETF⁻¹(0.75) = 0.26497)

\(\gamma = 1.2 + 0.42\log_{10}2 = 1.326\). \(2000 \times 0.26497^{1.326} \approx 343\) cd/m². HLG는 화면 피크에 따라 기준 백색 휘도도 함께 움직인다.

HLG의 OOTF가 R, G, B 각각에 감마를 걸지 않고 \(Y_S^{\gamma-1}\)을 공통으로 곱하는 이유는?

공통 스케일 \(\alpha Y_S^{\gamma-1}\)은 세 채널에 같은 배율이므로 xy가 변하지 않는다. 채널별 감마는 톤 매핑의 채널별 처리처럼 고채도 색의 색상·채도를 바꾼다.

ICtCp 변환에서 무채색(R = G = B)이 정확히 CT = CP = 0으로 가는 근거는?

1688+2146+262 = 683+2951+462 = 99+309+3688 = 4096이므로 L = M = S, 따라서 L′ = M′ = S′. 6610−13613+7003 = 0, 17933−17390−543 = 0이므로 색차 성분은 0이다.

무채색에서 10비트 PQ 코드 1단계의 ΔEITP는?

무채색이면 I = PQ 신호값이므로 ΔI = 1/1023, ΔEITP = 720/1023 = 0.704. 0.18은 12비트(720/4095)의 값이다.

4,000 nit로 마스터링된 밝은 파랑 하이라이트를 600 nit TV에 채널별(R, G, B 각각) 톤 매핑하면 일반적으로 어떻게 보이는가?

압축 커브는 큰 값을 더 많이 누른다. 가장 큰 B 채널이 가장 많이 눌리고 상대적으로 G가 커지므로 청록·흰색 방향으로 색도가 이동한다. maxRGB나 Y 기반 스케일은 이 이동을 피한다.

MaxFALL 계산으로 옳은 것은?

MaxFALL은 선형 광 레벨의 프레임 평균의 최댓값이다. 두 번째 보기는 MaxCLL, 네 번째는 ST 2086 정보다. PQ 코드 평균은 비선형 평균이라 크게 틀린다.

BT.2408 운영 지침에서 SDR 백색(그래픽 백색)을 HDR PQ로 옮길 때 권고하는 휘도와 대략의 PQ 신호값은?

HDR 기준 백색은 203 cd/m² = PQ 0.5807(10비트 풀 594, 리미티드 573), 1,000 nit HLG 신호 75%다.