Chapter 16

색 관리 시스템

RGB (255, 0, 0)은 색이 아니라 장치에 내리는 명령이다. 같은 숫자를 sRGB 모니터에 보내면 L* 54의 빨강이, Rec.2020 해석을 거치면 채도가 1.5배인 빨강이 나온다. 색 관리 시스템은 모든 장치 값을 하나의 장치 독립 공간(PCS)을 거쳐 옮김으로써 “같은 색”을 숫자로 보장하는 장치다. 이 장은 ICC 프로파일의 내부 구조부터 렌더링 인텐트, 소프트 프루핑, 영상 산업의 ACES 파이프라인, 그리고 LUT 정밀도까지 실제 수치로 따라간다.

같은 숫자, 다른 색

RGB 값은 “빨강 채널을 최대로 켜라”는 장치 의존 값(device-dependent values)이다. 그 결과로 나오는 빛의 3자극치는 원색의 분광 분포, 백색점, 전달 함수에 따라 달라진다. 5장에서 원색 xy와 백색점으로 RGB→XYZ 행렬을 유도했다. 같은 (1, 0, 0)을 서로 다른 공간의 행렬에 넣으면 아래 표처럼 완전히 다른 색이 된다.

공간에서 R′G′B′ = (1, 0, 0)PCS XYZ (D50 적응)PCS L*a*b*C*ab
sRGB (IEC 61966-2-1)0.4361, 0.2225, 0.013954.3, 80.8, 69.9106.8
Display P30.5151, 0.2412, −0.001156.2, 94.5, 98.9136.8
Adobe RGB (1998)0.6098, 0.3111, 0.019562.6, 90.4, 78.2119.5
Rec.2020 (ITU-R BT.2020)0.6735, 0.2791, −0.001959.8, 116.9, 106.8158.3
ProPhoto RGB (ROMM)0.7978, 0.2881, 0.000060.6, 139.2, 104.5174.0

표 16-1. 같은 숫자 (1, 0, 0)이 다섯 공간에서 나타내는 색. 모두 이 장의 핵심인 ICC 프로파일 연결 공간(PCS: D50 XYZ, 2° 관측자)으로 옮겨 비교했다. sRGB 빨강과 Display P3 빨강의 차이는 ΔE00 = 7.1로, 인쇄 허용차(ΔE00 1~3)의 두세 배다. Adobe RGB 빨강은 xy 색도가 sRGB와 같지만 Y가 0.2225 대신 0.3111이다. 백색을 맞추느라 원색의 상대 휘도 배분이 달라졌기 때문이다.

장치마다 숫자의 의미가 다르니, 장치 A의 숫자를 장치 B에서 같은 색으로 재현하려면 변환이 필요하다. 입력 장치 N종과 출력 장치 M종이 있을 때 모든 쌍에 대해 변환을 따로 만들면 N×M개가 필요하다. 대신 모든 장치를 하나의 장치 독립 공간(Profile Connection Space, PCS)에 연결해 두면 장치마다 “나 ↔ PCS” 변환 하나씩, 총 N+M개면 된다. 이것이 ICC 색 관리의 전부라고 해도 과언이 아니다.

직접 연결: 3 × 4 = 12개 변환 디지털카메라 스캐너 sRGB 파일 모니터 프로젝터 잉크젯 오프셋 인쇄 장치 하나 추가 → 상대편 수만큼 새 변환 PCS 경유: 3 + 4 = 7개 프로파일 디지털카메라 스캐너 sRGB 파일 PCS D50 XYZ/Lab 모니터 프로젝터 잉크젯 오프셋 인쇄 장치 하나 추가 → 프로파일 하나
그림 16-1. 색 관리의 핵심 구조. 왼쪽처럼 장치 쌍마다 변환을 만들면 N×M개가 필요하지만, 오른쪽처럼 모든 장치를 PCS에 연결하면 장치마다 프로파일 하나(N+M개)로 충분하다. 실행 시점에는 소스 프로파일의 “장치→PCS”와 목적 프로파일의 “PCS→장치”를 이어 붙인다.
$$\mathbf{d}_\text{dst} = T_\text{dst}^{\,\text{PCS}\to\text{dev}}\!\left(T_\text{src}^{\,\text{dev}\to\text{PCS}}(\mathbf{d}_\text{src})\right)$$
여기서 \(\mathbf{d}\)는 장치 값 벡터(RGB, CMYK, 다채널), \(T\)는 각 프로파일에 저장된 변환이다. 두 변환을 이어 붙이고 실행하는 소프트웨어가 CMM(Color Management Module)이다.
공학자 관점: 프로파일은 “측정의 요약”이다

프로파일은 해당 장치를 측정해 얻은 장치 값 ↔ 측색값 관계를 압축한 파일이다. 모니터 프로파일은 측색기로 R, G, B 램프와 백색·흑색을 재서 만들고, 프린터 프로파일은 수백~수천 개 패치(예: ISO 12642-2의 1,617패치 IT8.7/4 차트)를 분광광도계로 재서 만든다. 측정이 틀리면 프로파일이 틀리고, 장치가 변하면(램프 노화, 잉크 로트 변경) 프로파일도 다시 만들어야 한다. 측정 기하와 불확도는 11장에서 다룬다.

ICC 프로파일의 구조

ICC(International Color Consortium)는 1993년 결성된 업계 컨소시엄으로, 프로파일 파일 형식을 ICC.1 규격으로 정한다. 현재 판은 ICC.1:2022(프로파일 버전 4.4)이며 그 이전 판(4.3)은 ISO 15076-1:2010으로도 발행되었다. 지금도 많은 파일이 쓰는 v2(2.1~2.4) 프로파일과 v4는 구조는 같지만 몇몇 규칙이 다르다.

프로파일 연결 공간(PCS)

PCS는 두 가지 인코딩 중 하나다. PCSXYZ는 CIE 1931 XYZ, PCSLAB는 CIELAB이며 둘 다 다음 조건을 공유한다.

프로파일의 바이트 구조

헤더 128 바이트 태그 수 4 B 태그 테이블 12 B × n 태그 데이터 desc · wtpt · rXYZ … rTRC … chad · A2B0 … 0x00 size · CMM 'lcms' 0x08 version 4.4 0x0C class 'mntr' 0x10 data 'RGB ' · PCS 'XYZ ' 0x24 'acsp' (서명) 0x40 rendering intent 0x44 PCS 광원 0.9642 1 0.8249 0x54 profile ID (MD5) 'rXYZ' offset size 태그 테이블 항목: 서명 · 오프셋 · 크기 (각 4 B) 'XYZ ' 타입: s15Fixed16 × 3 rXYZ = 0x6FA2 0x38F5 0x0390 → 0.43607 0.22249 0.01392 'para' 타입: 함수 유형 3, g=2.4 a=0.9479 b=0.0521 c=0.0774 d=0.04045
그림 16-2. ICC 프로파일 파일 구조. 128바이트 헤더(클래스, 데이터 색공간, PCS, 렌더링 인텐트, PCS 광원 등) 뒤에 태그 테이블이 오고, 각 항목은 4바이트 서명·오프셋·크기로 태그 데이터를 가리킨다. 아래는 sRGB 디스플레이 프로파일의 rXYZ 태그와 TRC 파라메트릭 곡선의 실제 인코딩 예.

프로파일 클래스

클래스서명방향대표 예
입력 장치scnr장치 → PCS (B2A는 선택)스캐너, 카메라(IT8·ColorChecker 측정 기반)
디스플레이mntr양방향sRGB, Display P3, 모니터 교정 결과
출력 장치prtr양방향 + 가멋 태그잉크젯·오프셋 CMYK(FOGRA, GRACoL 특성화 데이터)
장치 링크link장치 → 장치 (PCS 없음)CMYK→CMYK 리타기팅(K 채널 보존)
색공간 변환spac양방향장치가 아닌 색공간(예: 특정 RGB 작업 공간)
추상abstPCS → PCS룩·효과(채도 강조, 톤 곡선)
명명 색nmcl이름 → PCS스폿 컬러 견본첩

표 16-2. ICC.1의 프로파일 클래스. 장치 링크는 두 프로파일을 미리 합성한 결과라서 CMYK→CMYK처럼 “검정은 K 하나로만” 같은 장치 수준 제약을 지킬 수 있다. PCS를 거치면 K 정보가 Lab에 녹아 사라지기 때문이다.

행렬/TRC 프로파일과 LUT 프로파일

가산 혼합이 잘 성립하는 디스플레이는 채널별 1차원 곡선(TRC: Tone Reproduction Curve)과 3×3 행렬만으로 정확히 표현된다. 이것이 행렬/TRC(matrix/TRC, matrix-shaper) 프로파일이다. 필요한 태그는 rXYZ·gXYZ·bXYZ(행렬의 세 열), rTRC·gTRC·bTRC(곡선), wtpt(매체 백색), v4에서는 chad(색순응 행렬)다.

$$\begin{bmatrix}X\\Y\\Z\end{bmatrix}_\text{PCS}=\begin{bmatrix}r_X&g_X&b_X\\r_Y&g_Y&b_Y\\r_Z&g_Z&b_Z\end{bmatrix}\begin{bmatrix}f_R(R')\\f_G(G')\\f_B(B')\end{bmatrix},\qquad f(x)=\begin{cases}(ax+b)^{g} & x\ge d\\ cx & x\lt d\end{cases}$$
sRGB의 TRC는 'para' 함수 유형 3으로 정확히 표현된다: \(g=2.4,\ a=1/1.055,\ b=0.055/1.055,\ c=1/12.92,\ d=0.04045\) (6장의 sRGB 디코딩 식과 같다). 역방향(PCS→장치)은 행렬 역과 곡선 역함수로 계산하므로 별도 태그가 필요 없다.

프린터처럼 잉크가 겹치며 산란·흡수가 비선형으로 얽히는 장치는 행렬로 설명되지 않는다(17장). 이때는 다차원 룩업 테이블(CLUT)을 쓰는 LUT 프로파일을 쓴다. 인텐트별로 A2B0/A2B1/A2B2(장치→PCS: 지각적/상대 측색/채도)와 B2A0/B2A1/B2A2(PCS→장치)를 따로 둘 수 있다. 절대 측색 인텐트에는 전용 태그가 없다. 상대 측색 태그 결과를 매체 백색(wtpt)으로 스케일해 계산한다.

행렬/TRC (디스플레이) R′G′B′ rTRC gTRC bTRC1D 곡선 × 3 [rXYZ gXYZ bXYZ]3×3 행렬 PCS XYZ LUT (lutAtoBType 'mAB ') CMYK A 곡선입력 선형화 CLUT격자 n⁴ → 3 M 곡선1D × 3 행렬3×3 + 오프셋 B 곡선1D × 3 PCS 각 단계는 생략 가능하다. 행렬/TRC 프로파일은 이 사슬에서 “M 곡선 + 행렬”만 남긴 특수한 경우와 같다.
그림 16-3. 두 종류의 장치→PCS 변환. 위: 디스플레이용 행렬/TRC. 아래: v4의 lutAtoBType 처리 순서(A 곡선 → CLUT → M 곡선 → 행렬 → B 곡선). CLUT 격자는 차원마다 최대 255점까지 지정할 수 있고, 실무에서는 RGB 입력에 17³·33³, CMYK 입력에 9⁴~17⁴ 정도를 쓴다.

CMM이 하는 일

CMM은 두 프로파일(또는 여러 개)을 읽어 인텐트에 맞는 태그를 고르고, 필요하면 절대 측색 스케일링과 블랙 포인트 보상을 넣어 하나의 변환으로 합성한다. LittleCMS(lcms2), Apple ColorSync, Windows의 WCS/ICM, Adobe CMM 등이 있다. 성능을 위해 행렬/TRC끼리의 연결은 “곡선 → 하나의 3×3 → 곡선”으로 축약하고, LUT가 끼면 전체 사슬을 새 3D LUT로 미리 샘플링해 두는 것이 보통이다. 이 샘플링이 9절에서 다룰 보간 오차의 근원이다.

v2와 v4의 차이 중 실무에 영향을 주는 것

(1) v4 디스플레이 프로파일의 wtpt는 항상 D50이고, 원래 백색은 chad 태그로 기록한다. v2 프로파일은 wtpt에 실제 측정 백색을 넣기도 해서, 같은 모니터라도 v2/v4에 따라 절대 측색 결과가 다르다. (2) v4는 지각적 인텐트의 PCS를 “지각적 기준 매체”(흑점이 약 L* 3.1인 가상 매체)로 정의해 서로 다른 회사의 프로파일끼리 지각적 인텐트를 섞어도 흑점이 맞도록 했다. (3) v4는 16비트 Lab 인코딩에서 L* 100을 0xFFFF에 맞췄다(v2는 0xFF00). v2용 CMM이 v4 Lab 값을 그대로 읽으면 약간 어둡게 해석한다. 분광 PCS와 다중 관찰 조건이 필요한 경우를 위해 별도 규격 iccMAX(ICC.2)가 있다.

흔한 실수: rXYZ를 “모니터 빨강의 색도”로 읽기

v4(그리고 대부분의 v2) 디스플레이 프로파일의 rXYZ·gXYZ·bXYZ는 D50으로 색순응된 값이다. sRGB 프로파일의 rXYZ에서 xy를 계산하면 (0.6485, 0.3309)가 나오지 실제 원색 (0.64, 0.33)이 아니다. 실제 원색을 알려면 chad 행렬의 역을 곱해 되돌려야 한다.

왜 D50인가, 그리고 chad 태그

PCS 백색이 D50인 이유는 역사적이면서 실용적이다. 색 관리가 탄생한 그래픽 아트(인쇄·출판) 업계의 표준 관찰 조건이 D50이다. 교정쇄와 인쇄물을 비교하는 관찰 부스는 ISO 3664에 따라 D50 시뮬레이터(P1: 2000 lx, P2: 500 lx)를 쓴다. 인쇄물의 측색값도 관례적으로 D50, 2°로 보고된다(ISO 13655). 그래서 PCS를 D50으로 고정하면 인쇄 측색 데이터는 변환 없이 바로 PCS가 된다.

대신 D65 백색을 가진 디스플레이(sRGB, P3, Rec.709/2020)는 프로파일을 만들 때 한 번 색순응해야 한다. ICC 규약은 “디스플레이의 백색이 PCS의 D50 백색에 대응한다”는 상대 측색 해석을 쓴다. 즉 관찰자가 모니터 백색에 완전히 순응했다고 보고, 모니터 백색 (0.9505, 1, 1.0891)을 D50 백색 (0.9643, 1, 0.8251)로 옮기는 3×3 색순응 변환(CAT)을 원색 행렬에 미리 곱해 둔다. v4는 이 행렬을 chad(chromaticAdaptationTag) 태그에 기록하고, 권장 방법은 선형화된 Bradford 변환이다(8장).

$$\mathbf{M}_\text{chad}=\mathbf{M}_B^{-1}\begin{bmatrix}\rho_D/\rho_S&0&0\\0&\gamma_D/\gamma_S&0\\0&0&\beta_D/\beta_S\end{bmatrix}\mathbf{M}_B,\qquad \mathbf{M}_B=\begin{bmatrix}0.8951&0.2664&-0.1614\\-0.7502&1.7135&0.0367\\0.0389&-0.0685&1.0296\end{bmatrix}$$
\((\rho,\gamma,\beta)_S=\mathbf{M}_B\,\mathbf{X}_{W,\text{src}}\), \((\rho,\gamma,\beta)_D=\mathbf{M}_B\,\mathbf{X}_{W,\text{D50}}\). Bradford의 원래 모델(Lam, 1985)은 청색 채널에 비선형 지수가 있었으나 ICC와 대부분의 CMM은 이를 뺀 선형 버전을 쓴다.

D65 (0.3127, 0.3290) → D50 (0.3457, 0.3585)에 대해 계산하면

$$\mathbf{M}_\text{chad}=\begin{bmatrix}1.04793&0.02295&-0.05019\\0.02963&0.99043&-0.01707\\-0.00924&0.01506&0.75187\end{bmatrix},\quad \mathbf{M}_\text{sRGB}^\text{PCS}=\mathbf{M}_\text{chad}\mathbf{M}_\text{sRGB}=\begin{bmatrix}0.43607&0.38515&0.14308\\0.22249&0.71689&0.06062\\0.01392&0.09708&0.71410\end{bmatrix}$$
오른쪽 행렬의 세 열이 그대로 sRGB 프로파일의 rXYZ, gXYZ, bXYZ 태그다. 널리 배포된 “sRGB IEC61966-2.1” 프로파일의 값 rXYZ = (0.4361, 0.2225, 0.0139), gXYZ = (0.3851, 0.7169, 0.0971), bXYZ = (0.1431, 0.0606, 0.7141)과 s15Fixed16 정밀도(1/65536) 안에서 일치한다. 세 열의 합은 D50 백색 (0.9643, 1.0000, 0.8251)이다.
SIMULATOR

chad 행렬과 원색 태그 계산기

디스플레이 공간
색순응 방법
소스 백색 XYZ—
열 합 − D50 (최대 오차)—
Bradford 대비 (원색·2차색 최대 ΔE00)—
해볼 것: ① sRGB + Bradford에서 아래 표의 rXYZ가 0.43607, 0.22249, 0.01392인지 확인하라. ② ProPhoto는 원래 백색이 D50이라 chad가 단위 행렬이 되고 점선(원래 원색)과 실선(D50 적응 원색)이 겹친다. ③ DCI-P3(백색 x=0.314, y=0.351)를 고르고 방법을 “XYZ 스케일”로 바꾸면 Bradford와의 차이가 커진다. 순응 모델 선택이 프로파일 값을 바꾼다는 뜻이다. 그림에서 점선 삼각형 = 원래 원색, 실선 = PCS(D50)로 적응한 원색, 화살표 = 소스 백색 → D50.
공학자 관점: 상대 측색 해석을 잊지 말 것

chad는 “모니터 백색을 D50으로 보이게 하는” 수학적 장치일 뿐, 모니터 빛이 실제로 D50이라는 뜻이 아니다. 같은 모니터의 PCS 값과 분광복사계로 잰 절대 XYZ는 다르다. 모니터 측정값을 PCS와 비교하려면 측정값에도 같은 Bradford 행렬을 곱해야 한다. 반대로 인쇄물 측정값(D50 반사 측색)은 그대로 PCS다.

변환 체인을 따라가기

행렬/TRC 프로파일 두 개를 잇는 변환은 다음 일곱 단계다. 각 단계가 무엇을 하는지, 어디서 정보가 사라지는지(클리핑) 숫자로 확인해 보자.

디코딩소스 TRC로 R′G′B′ → 선형 RGB
원색 행렬선형 RGB → 소스 백색 기준 XYZ
chad소스 백색 → D50 (PCS)
PCSXYZ 또는 L*a*b* (D50)
역 chad·역 행렬PCS → 목적 선형 RGB
클리핑 + 인코딩[0, 1] 밖을 자르고 목적 TRC 적용
SIMULATOR

소스 RGB → PCS → 목적 RGB 변환 체인

소스 공간
목적 공간
PCS L*a*b* (D50)—
목적 8비트—
가멋—
왕복 오차 ΔE00—
해볼 것: ① 기본값(P3 빨강 → sRGB)에서 목적 선형 RGB가 (1.2249, −0.0421, −0.0196)로 [0, 1]을 벗어나 클리핑되고, 결과 sRGB (255, 0, 0)이 원래 색과 ΔE00 7.1 다르다는 것을 확인하라. ② 소스를 sRGB, 목적을 ProPhoto로 바꾸고 (255, 128, 0)을 넣어 보라. 같은 주황이 ProPhoto에서는 (192, 127, 44)라는 전혀 다른 숫자다. ③ ACEScg는 선형 공간이라 슬라이더 값이 그대로 선형광이다. 오른쪽 색도도는 PCS(D50 적응) 좌표로 그린 두 공간의 원색 삼각형과 색의 위치(채운 점: 소스, 빈 점: 클리핑 후 목적)다. 견본은 sRGB 화면 기준이라 가멋 밖 색은 화면에서 클리핑되어 보인다.

여기서 “왕복 오차”는 클리핑과 8비트 반올림을 거친 목적 값을 다시 PCS로 되돌려 원래 색과 비교한 ΔE00이다. 가멋 안의 색은 8비트 반올림만 남아 ΔE00이 0.3 이하이고, 가멋 밖의 색은 클리핑만큼 오차가 커진다. 이 단순한 클리핑이 바로 다음 절에서 볼 상대 측색 인텐트의 기본 동작이다.

실무 팁: 행렬/TRC끼리의 변환은 사실상 무손실

소스와 목적이 모두 행렬/TRC면 두 행렬은 미리 곱해져 하나의 3×3이 된다(예: sRGB → Display P3 선형 행렬은 대각 성분이 0.82~0.97인 행렬). 부동소수점으로 계산하면 가멋 안 색은 오차가 사실상 0이고, 오차는 오직 클리핑과 최종 양자화에서 생긴다. 반대로 LUT 프로파일이 끼면 보간 오차가 추가된다(9절).

렌더링 인텐트

목적 장치의 가멋이 소스보다 작으면 일부 색은 재현할 수 없다. 이를 어떻게 처리할지 정하는 정책이 렌더링 인텐트(rendering intent)다. ICC.1은 네 가지를 정의하지만 각 인텐트의 구체적 알고리즘은 정하지 않는다. 지각적·채도 인텐트의 매핑은 프로파일 제작 소프트웨어가 정해 B2A0/B2A2 테이블에 구워 넣는다. 그래서 같은 프린터라도 프로파일 제작 도구에 따라 지각적 결과가 다르다.

인텐트보존하는 것가멋 밖 색백색점주 용도
지각적 (0)색 사이의 관계, 계조전체를 압축(가멋 안 색도 이동)매체 백색으로 매핑사진, 큰 가멋 차이
상대 측색 (1)가멋 안 색의 측색값(매체 백색 기준)경계로 클리핑매체 백색으로 매핑로고·교정, 가멋이 비슷할 때
채도 (2)선명함(채도)경계로 밀어냄, 색상 이동 허용매체 백색으로 매핑차트·도표·비즈니스 그래픽
절대 측색 (3)절대 측색값(종이 색 포함)경계로 클리핑소스 백색을 그대로 재현교정쇄로 다른 종이 시뮬레이션

표 16-3. 네 가지 렌더링 인텐트. 괄호 안 숫자는 헤더의 인텐트 코드이자 A2B/B2A 태그 번호다(절대 측색은 1번 태그 + 백색점 스케일링).

상대 측색: 경계로 클리핑 L*C* 가멋 안 색은 그대로, 밖은 경계에 겹침 지각적: 전체 압축 L*C* 모든 색이 조금씩 이동, 순서·계조 유지
그림 16-4. 한 색상(hue) 단면 L*–C* 평면에서 본 두 인텐트. 점선 = 소스 가멋(예: sRGB), 채운 영역 = 출력 가멋(인쇄). 상대 측색은 가멋 밖 색을 같은 L*에서 경계로 자르므로 서로 다른 색이 한 점으로 겹친다(계조 손실). 지각적은 소스 흑점을 출력 흑점으로 옮기고(아래 화살표) 채도도 비례적으로 줄여 색 사이의 차이를 보존한다.

백색점과 흑점 처리

인쇄물의 “백색”은 종이다. 고급 코팅지도 L* ≈ 95, b* ≈ −2 정도이고 신문지는 L* ≈ 82로 꽤 어둡다. 상대 측색·지각적·채도 인텐트는 소스 백색을 종이 백색으로 매핑한다(종이에는 잉크를 찍지 않는다). 절대 측색 인텐트는 PCS 값을 매체 백색 비율로 스케일해 원래의 절대 측색값을 재현하려 한다.

$$X_\text{abs}=\frac{X_\text{mw}}{X_\text{D50}}\,X_\text{rel},\quad Y_\text{abs}=\frac{Y_\text{mw}}{Y_\text{D50}}\,Y_\text{rel},\quad Z_\text{abs}=\frac{Z_\text{mw}}{Z_\text{D50}}\,Z_\text{rel}$$
\(\mathbf{X}_\text{mw}\)는 매체 백색(wtpt 태그). 절대 측색은 이 식으로 상대 PCS 값을 절대값으로 바꾼다. 예컨대 신문지 교정을 코팅지에 찍을 때 절대 측색을 쓰면 프린터가 코팅지 위에 연한 회황색 잉크를 깔아 신문지 색을 흉내 낸다.

흑점도 문제다. 소스(모니터)의 흑색은 L* ≈ 0이지만 인쇄의 가장 진한 검정은 코팅지에서 L* ≈ 10, 비코팅지에서 20 이상이다. 상대 측색으로 그냥 보내면 L*가 출력 흑점보다 어두운 모든 그림자 색이 출력 흑점 하나로 뭉개진다. 블랙 포인트 보상(BPC, Black Point Compensation)은 소스 흑점을 출력 흑점으로 옮기는 선형 스케일을 XYZ에 적용해 이를 막는다. Adobe가 공개한 방식이 ISO 18619로 표준화되었다.

$$\mathbf{X}'=a\,\mathbf{X}+(1-a)\,\mathbf{X}_\text{D50},\qquad a=\frac{1-Y_{k,\text{dst}}}{1-Y_{k,\text{src}}}$$
\(Y_k\)는 흑점의 상대 휘도. 백색(\(\mathbf{X}=\mathbf{X}_\text{D50}\))은 그대로, 소스 흑점은 출력 흑점으로 간다. 코팅지 흑점 L* = 10은 \(Y_k=0.0113\)이므로 \(a\approx0.989\)로, 밝은 색은 거의 그대로이고 그림자만 들어 올려진다.
SIMULATOR

렌더링 인텐트 비교와 소프트 프루프

인텐트
출력 매체 (가상 가멋)
sRGB 가멋 경계(점선)출력 가멋소스 → 출력 이동
가멋 밖 견본—
평균 ΔE00 (화면 기준)—
최대 ΔE00—
소스 흑 → 출력 L*—
어두운 회색 계조—
위 캔버스의 각 견본은 위 절반 = 원본 sRGB, 아래 절반 = 인쇄 결과 예측(소프트 프루프)이다. 아래 캔버스는 선택한 색상각 단면의 L*–C* 평면. 해볼 것: ① 상대 측색에서 맨 아래 회색 행의 어두운 쪽 견본들이 같은 검정으로 뭉치는 것을 보고, BPC를 켜서 계조가 살아나는지 확인하라(“어두운 회색 계조” 수치). ② 지각적으로 바꾸면 가멋 안 색까지 조금씩 움직여 평균 ΔE00은 오히려 커질 수 있지만 단면 그림의 화살표 끝점이 겹치지 않는다. ③ 신문지 + 종이 백색 시뮬레이션: 흰색이 회황색으로, 검정이 회색으로 바뀌어 실제 신문의 인상이 된다. ④ 절대 측색 + 종이 백색 시뮬레이션은 소스 흰색이 종이 색 그대로 표현된다. 출력 가멋은 FOGRA39·신문 인쇄의 경향을 흉내 낸 단순화 모델이다(색상별 첨점 삼각형, CIELAB 색상각 보존 매핑).

이 모델에서 코팅지 출력은 60개 견본 중 36개가 가멋 밖이고 신문지는 52개가 밖이다. 코팅지 상대 측색의 평균 ΔE00은 약 6.3, 지각적은 약 7.1이다. 지각적이 평균 오차는 더 크지만 그라데이션과 그림자 계조를 지킨다. ΔE 평균이 작다고 좋은 인텐트가 아니라는 점이 핵심이다. 계조가 중요한 사진에는 지각적 또는 “상대 측색 + BPC”가, 로고처럼 특정 색을 정확히 맞춰야 할 때는 상대 측색이 쓰인다.

지각적 매핑의 한 예: 무릎 압축

시뮬레이터의 지각적 인텐트는 같은 L*·h에서 \(C_d\)(출력 경계)의 70%까지는 그대로 두고, 그 위 구간 \([0.7C_d,\ C_s]\)를 \([0.7C_d,\ C_d]\)로 선형 압축한다: \(C'=0.7C_d+(C-0.7C_d)\dfrac{C_d-0.7C_d}{C_s-0.7C_d}\). 여기서 \(C_s\)는 소스(sRGB) 경계다. 실제 제품은 CIELAB 대신 CAM16 같은 색 외관 공간(9장)에서 색상 비선형(파랑이 보라로 휘는 현상)을 보정하고, 명도와 채도를 함께 움직이는 등 훨씬 정교한 방법을 쓴다.

소프트 프루핑과 가멋 경고

소프트 프루핑(soft proofing)은 인쇄 결과를 종이에 찍기 전에 화면에서 미리 보는 것이다. 원리는 간단하다. 이미지를 출력 프로파일로 보내 CMYK를 얻고(선택한 인텐트), 그 CMYK를 다시 출력 프로파일의 A2B로 PCS로 되돌린 뒤, 모니터 프로파일로 표시한다. 두 번째 단계를 상대 측색으로 하면 종이 백색이 모니터 백색으로 보이고, 절대 측색으로 하면 종이 백색 시뮬레이션이 된다.

이미지sRGB/Adobe PCS 프린터 B2A인텐트 0/1/2 CMYK(가상 출력) 프린터 A2B1상대 / 절대 PCS 모니터 B2A행렬/TRC 역 화면 표시 가멋 경고: 원본 PCS와 왕복 PCS의 ΔE가 임계값을 넘거나, 출력 프로파일의 gamt 태그가 “밖”이라고 답하는 픽셀을 표시 절대 = 종이 백색 시뮬레이션
그림 16-5. 소프트 프루핑 체인. 인쇄 경로(B2A)와 되돌림 경로(A2B1)를 모두 실제로 계산하므로 클리핑·압축·흑점 손실이 화면에 그대로 드러난다. 앞 절 시뮬레이터의 “종이 백색 시뮬레이션”과 “가멋 경고”가 이 체인을 단순화해 구현한 것이다.

종이 백색 시뮬레이션을 켜면 처음에는 화면 전체가 “칙칙하다”고 느낀다. 화면의 최대 백색(모니터 백색)이 이미지 바깥 UI에 남아 있어 눈이 그쪽에 순응하기 때문이다. 실제 인쇄물을 볼 때는 종이 백색에 순응하므로 그렇게 보이지 않는다. 그래서 숙련된 작업자는 이미지 주변을 회색 또는 종이색으로 채운 전체 화면 모드에서 소프트 프루프를 판단한다.

공학자 관점: 소프트 프루프가 성립하는 조건
  • 모니터는 교정·특성화되어 있어야 한다. 화면 프루프용 디스플레이의 요구 조건은 ISO 12646에 있다(백색점 D50 근처, 휘도 수준, 균일도, 가멋 커버리지).
  • 관찰 부스(ISO 3664 P1, D50, 2000 lx)의 인쇄물과 화면을 나란히 비교할 때는 화면 휘도를 부스 백색과 맞춘다(보통 120~160 cd/m²).
  • 출력 프로파일은 실제 인쇄 조건(용지, 잉크, 망점 확대)을 대표해야 한다. 오프셋은 ISO 12647-2의 표준 인쇄 조건과 그 특성화 데이터(FOGRA39, FOGRA51 등)를 쓴다. 허용차는 보통 ΔE00 수준으로 관리한다.
  • 형광 증백제(OBA)가 든 종이는 D50 측정 조건(ISO 13655 M0/M1/M2)에 따라 값이 달라진다. 측정 조건이 프로파일과 일치해야 한다.

운영체제·브라우저·파일의 색 관리

태그가 없으면 sRGB

웹의 기본 규칙은 단순하다. 색 프로파일이 없는(untagged) 이미지와 CSS의 #rrggbb·rgb() 색은 sRGB로 간주한다(CSS Color 4). 브라우저는 이미지에 내장된 ICC 프로파일이나 코드 포인트(cICP, nclx)를 읽어 디스플레이 프로파일로 변환한다. 그래서 같은 파일이라도 프로파일을 지워 버리면 숫자는 그대로인 채 해석만 sRGB로 바뀐다.

CSS Color 4부터는 sRGB 밖의 색을 직접 지정할 수 있다. color(display-p3 1 0 0), color(rec2020 …), color(a98-rgb …), 그리고 장치 독립 표기인 lab(), oklch()가 있다. 미디어 쿼리 @media (color-gamut: p3)로 화면 가멋을 판별하고, canvas도 getContext("2d", {colorSpace: "display-p3"})로 P3 버퍼를 쓸 수 있다.

운영체제

macOS는 ColorSync로 창 합성 단계에서 모든 앱의 출력을 디스플레이 프로파일로 변환한다. 앱이 색공간을 밝히지 않으면 sRGB로 본다. Windows는 오랫동안 색 관리를 앱 책임으로 두었다. 색 관리를 하지 않는 앱은 sRGB 숫자를 그대로 패널에 보내므로, 광색역(P3·Adobe RGB급) 모니터에서는 같은 숫자가 더 넓은 원색으로 해석되어 과포화된다. 피부가 붉게 뜨고 하늘이 형광처럼 보이는 현상이다. 모니터의 “sRGB 모드”는 패널 내부에서 sRGB 가멋을 흉내 내 이 문제를 피하는 장치이고, 최근 Windows 11은 자동 색 관리(ACM) 옵션을 제공한다.

SIMULATOR

태그 누락·비관리 앱 사고 재현

사고 유형
평균 ΔE00—
최대 ΔE00—
평균 채도 변화—
이 화면/브라우저—
견본의 위 절반 = 의도한 색, 아래 절반 = 실제로 표시되는 색. 브라우저가 CSS color(display-p3 …)·color(a98-rgb …)를 지원하고 화면이 광색역이면 실제 차이가 보이고, 아니면 sRGB로 클리핑된 근사가 표시된다. 해볼 것: ① “P3 파일, 태그 없음”에서 빨강·초록의 채도가 약 22% 떨어지는 것을 확인하라. ② “sRGB 앱 → P3 패널”은 반대로 채도가 약 20~30% 올라간다(과포화). ③ Adobe RGB 파일은 감마도 2.2(563/256)로 sRGB 곡선과 달라서 회색(0.5, 0.5, 0.5)조차 ΔE00 0.4만큼 어긋난다. 색도도의 채운 점은 의도한 색, 빈 점은 잘못 해석된 색이다.

파일에 프로파일 싣기

JPEG은 APP2 마커의 ICC_PROFILE 세그먼트(64 KB 단위로 분할)에, PNG는 iCCP 청크(또는 sRGB 청크, HDR용 cICP 코드 포인트)에, WebP는 ICCP 청크에, AVIF/HEIF는 colr 박스(ICC 또는 nclx 코드 포인트)에, TIFF는 태그 34675에 프로파일을 싣는다. 코드 포인트(ITU-T H.273의 원색·전달 함수·행렬 번호)는 몇 바이트로 표준 공간을 지정하는 가벼운 방법이고, 영상 코덱(15장)과 HDR(14장)에서 주로 쓴다.

“프로파일 지정”과 “프로파일로 변환”은 정반대다

지정(assign)은 숫자를 그대로 두고 해석만 바꾼다. 위 시뮬레이터의 사고가 바로 “잘못된 지정”이다. 변환(convert)은 색을 유지하고 숫자를 바꾼다. 웹용 이미지를 내보낼 때는 작업 공간(예: Adobe RGB, ProPhoto)에서 sRGB로 변환하고 sRGB 프로파일을 싣는 것이 가장 안전하다. 프로파일을 지우는 최적화 도구를 쓴다면 반드시 sRGB로 변환한 뒤에 지워야 한다. P3 이미지를 그대로 쓰려면 프로파일(또는 코드 포인트)을 절대 지우지 말아야 한다.

영상·VFX 파이프라인: ACES와 OCIO

ICC는 “장치 → 장치”의 정적 이미지 세계에서 자랐다. 영화·VFX는 여러 카메라의 영상을 합성하고 극장·HDR TV·스트리밍 등 여러 출력에 맞춰 내보내야 해서 다른 체계를 쓴다. 핵심 구분은 다음 두 가지다.

장면 기준 (선형, 상한 없음) 디스플레이 기준 카메라 A RAW 카메라 B Log CG 렌더 IDT입력변환 ACES2065-1AP0 · 선형 · 교환/보관 ACEScg / ACEScctAP1 · 합성 / 그레이딩 RRT기준 렌더링(톤·가멋 매핑) ODT출력별 sRGB/709 100 nit DCI-P3 시네마 BT.2100 PQ HDR RRT + ODT = 출력 변환(Output Transform) — 장면의 무한 범위를 특정 디스플레이의 유한 범위로 렌더링
그림 16-6. ACES 1.x 파이프라인. 카메라마다 다른 입력 변환(IDT)이 모든 소스를 장면 기준 ACES2065-1로 모은다. 작업은 AP1 원색의 ACEScg(선형, CG·합성) 또는 ACEScct(로그, 그레이딩)에서 하고, 출력 변환이 디스플레이별로 톤 매핑한다. ACES 2.0은 출력 변환을 새로 설계했지만 “입력 변환 → 장면 기준 작업 공간 → 출력 변환”의 큰 틀은 같다.
공간R (x, y)G (x, y)B (x, y)백색 (x, y)인코딩
ACES2065-1 (AP0, SMPTE ST 2065-1)0.7347, 0.26530.0000, 1.00000.0001, −0.07700.32168, 0.33767선형, 16비트 half
ACEScg (AP1)0.713, 0.2930.165, 0.8300.128, 0.0440.32168, 0.33767선형
ACEScct (AP1)ACEScg와 같은 원색0.32168, 0.33767로그(어두운 부분 직선 토)
Rec.709 / sRGB0.640, 0.3300.300, 0.6000.150, 0.0600.3127, 0.3290BT.1886 / sRGB 곡선
Rec.20200.708, 0.2920.170, 0.7970.131, 0.0460.3127, 0.3290BT.1886 / PQ / HLG

표 16-4. ACES 색공간의 원색. AP0는 스펙트럼 궤적 전체를 감싸도록 잡은 삼각형이라 초록 원색이 y = 1, 파랑 원색이 y < 0인 허수 원색이다. 그래서 AP0에서 직접 합성·조명 연산을 하면 원색 사이 혼합이 지각적으로 어색해진다. AP1은 Rec.2020을 거의 감싸면서 모든 원색이 궤적 근처의 실재 색에 가깝게 잡혀 렌더링 작업 공간에 적합하다. 백색 (0.32168, 0.33767)은 CCT 약 6000 K로 흔히 “D60 근사”라 부르지만 CIE 주광 궤적 위의 점은 아니다.

$$\begin{bmatrix}R\\G\\B\end{bmatrix}_\text{ACEScg}=\begin{bmatrix}0.6131&0.3395&0.0474\\0.0702&0.9164&0.0134\\0.0206&0.1096&0.8698\end{bmatrix}\begin{bmatrix}R\\G\\B\end{bmatrix}_\text{lin sRGB},\qquad \begin{bmatrix}R\\G\\B\end{bmatrix}_\text{AP0}=\begin{bmatrix}0.6955&0.1407&0.1639\\0.0448&0.8597&0.0955\\-0.0055&0.0040&1.0015\end{bmatrix}\begin{bmatrix}R\\G\\B\end{bmatrix}_\text{AP1}$$
왼쪽은 D65 → ACES 백색 Bradford 순응을 포함한 행렬, 오른쪽은 백색이 같아 순응이 없는 AP1 → AP0 행렬이다(이 장의 페이지 스크립트로 원색 xy에서 직접 계산). 각 행의 합이 1이므로 무채색은 무채색으로 간다. 선형 sRGB 초록 (0, 1, 0)은 ACEScg에서 (0.3395, 0.9164, 0.1096)이다.

OpenColorIO 설정

OpenColorIO(OCIO)는 ASWF(Academy Software Foundation)가 관리하는 색 관리 라이브러리로, Nuke, Maya, Blender, Houdini 등이 공통으로 쓴다. ICC가 “장치마다 프로파일 하나”라면 OCIO는 “스튜디오마다 설정 파일 하나”다. YAML 설정에 색공간 목록과 각 색공간 → 기준 공간 변환, 역할(role), 디스플레이·뷰를 정의하고, 모든 앱이 같은 파일을 읽어 같은 변환을 쓴다.

# 개념 예시 (실제 ACES 설정을 크게 축약)
ocio_profile_version: 2
roles:
  scene_linear: ACEScg          # 합성·조명 연산 공간
  color_timing: ACEScct         # 그레이딩 공간
  compositing_log: ACEScct
colorspaces:
  - !<ColorSpace>
    name: ACEScg
    to_scene_reference: !<BuiltinTransform> {style: ACEScg_to_ACES2065-1}
displays:
  sRGB - Display:
    - !<View> {name: ACES SDR, view_transform: …, display_colorspace: …}

“역할”은 앱이 “선형 작업 공간이 뭐지?”라고 물을 때의 답이다. 덕분에 텍스처 페인팅 앱과 렌더러와 합성기가 서로의 내부 사정을 몰라도 같은 공간에서 일한다. 뷰(view)는 장면 기준 데이터를 특정 디스플레이에 보여 주는 출력 변환이다. 원본 데이터는 바꾸지 않고 보는 방식만 바꾼다.

흔한 실수: sRGB 텍스처를 선형으로 읽기

sRGB로 인코딩된 8비트 텍스처를 OETF를 풀지 않고 ACEScg로 쓰면 중간 회색 128이 0.50으로 들어가 실제 0.216보다 2.3배 밝아진다. 반대로 노멀 맵·러프니스 같은 비색 데이터에 sRGB 디코딩을 걸면 물리량이 왜곡된다. OCIO 설정에서 “raw”(변환 없음) 색공간을 별도로 두는 이유다. 감마 인코딩된 값으로 블러·합성을 하면 경계에 어두운 테두리가 생기는 문제는 6장에서 보았다.

정밀도: 양자화 누적과 3D LUT 보간

색 관리 변환은 수학적으로는 가역이어도 실제로는 두 가지 오차가 생긴다. (1) 각 단계 결과를 8비트·16비트 정수로 저장할 때의 양자화, (2) LUT 격자점 사이를 보간할 때의 보간 오차다.

8비트 왕복 변환

8비트 sRGB 이미지를 8비트 ProPhoto 작업 공간으로 변환했다가 다시 sRGB로 돌아오면 어떻게 될까. ProPhoto는 가멋이 매우 넓어 sRGB 색들이 코드 공간의 일부에만 몰린다. sRGB 빨강 램프 256단계를 ProPhoto에 담으면 빨강이 R′ = 0~192 범위에 들어가 코드 간격이 성기다. 다시 돌아오면 서로 다른 입력이 같은 출력으로 합쳐져 계조가 사라지고(콤 히스토그램), 이것은 되돌릴 수 없다.

SIMULATOR

작업 공간 왕복 변환의 양자화 오차

작업 공간
작업 공간 비트 깊이
8비트 평균8비트 최대10비트 평균16비트 평균
평균 ΔE00—
최대 ΔE00—
빨강 램프 남은 계조—
회색 램프 남은 계조—
sRGB 8비트 입력(729색 격자 + 256단계 램프) → 작업 공간(선택 비트) → sRGB 8비트를 n번 반복한다. 아래 띠는 빨강 램프의 원본과 결과, 그리고 결과에서 사라진 코드(빨간 눈금)다. 해볼 것: ① ProPhoto 8비트 1회 왕복만으로 빨강 램프 256단계가 약 200단계로 줄어드는 것을 보라. ② 왕복을 20회로 늘려도 평균 ΔE00은 거의 그대로다. 반올림 오차는 무한히 누적되지 않고 몇 번 만에 고정점에 수렴한다. 하지만 사라진 계조는 돌아오지 않는다. ③ 작업 공간을 16비트로 바꾸면 손실이 사라진다. 넓은 작업 공간은 반드시 16비트와 짝지어야 한다는 규칙의 근거다.

3D LUT의 격자와 보간

LUT 프로파일의 CLUT, 그리고 영상 업계의 .cube 3D LUT는 입력 큐브를 \(N\times N\times N\) 격자로 나눠 격자점에서만 정확한 출력을 저장한다. 격자점 사이는 보간한다. 두 방법이 널리 쓰인다.

삼선형: 꼭짓점 8개 c000c100c110c111c001 가중치 = 세 축 비율의 곱 사면체: 6개 중 하나의 꼭짓점 4개 c000c100c110c111 굵은 대각선(무채색 축)을 6개 사면체가 공유
그림 16-7. 격자 셀 하나에서의 보간. 삼선형은 꼭짓점 8개를 모두 쓴다. 사면체 보간은 \(f_x, f_y, f_z\)의 크기 순서로 6개 사면체 중 하나를 고르고(그림은 \(f_x\ge f_y\ge f_z\)인 경우) 꼭짓점 4개만 쓴다. c000–c111 대각선이 모든 사면체의 공통 모서리라서, R=G=B 입력은 대각선 위 두 점만으로 보간된다.
$$\text{삼선형: } \mathbf{c}=\sum_{i,j,k\in\{0,1\}} w_i(f_x)\,w_j(f_y)\,w_k(f_z)\,\mathbf{c}_{ijk},\quad w_0(f)=1-f,\ w_1(f)=f$$ $$\text{사면체}(f_x\ge f_y\ge f_z):\ \mathbf{c}=(1-f_x)\,\mathbf{c}_{000}+(f_x-f_y)\,\mathbf{c}_{100}+(f_y-f_z)\,\mathbf{c}_{110}+f_z\,\mathbf{c}_{111}$$
\(f\)는 셀 안의 상대 위치(0~1). 사면체 보간은 곱셈이 적고(4점), 무채색 축을 정확히 대각선 노드로 보간하므로 회색에 색이 끼는 현상이 적다. 대부분의 CMM과 GPU 색 변환이 사면체를 기본으로 쓴다.
SIMULATOR

3D LUT 격자 크기·보간법 vs ΔE00

LUT에 구울 변환
보간
삼선형 평균사면체 평균최대(점선)
평균 ΔE00—
95% 백분위—
최대 ΔE00—
회색 축 평균—
LUT 크기 (16비트)—
무작위 sRGB 3,000색에 대해 정확한 변환과 LUT 보간 결과의 ΔE00을 계산한다(출력은 PCS Lab으로 저장). 그래프는 N = 3, 5, 9, 17, 33, 65의 평균(실선)과 최대(점선), 점은 현재 설정. 해볼 것: ① sRGB → Lab에서 N을 17에서 33으로 늘리면 평균 오차가 약 1/4로 준다(보간 오차 ∝ 격자 간격²). ② 사면체로 바꾸면 회색 축 오차가 삼선형의 약 1/7로 준다. ③ “선형광 값으로 격자 배치”를 켜면 같은 N에서 오차가 열 배 이상 커진다. 그림자 쪽 격자가 성기기 때문이며, LUT 입력을 감마/로그로 셰이핑하는 이유다(ICC의 A 곡선, .cube의 shaper LUT). ④ 인쇄 클리핑처럼 꺾임이 있는 변환은 격자를 키워도 최대 오차가 잘 줄지 않는다.
sRGB → PCS Lab, 감마 인코딩 격자삼선형 평균 / 최대사면체 평균 / 최대회색 축 (삼선형 / 사면체)
9³0.24 / 2.50.15 / 2.50.53 / 0.10
17³0.059 / 0.560.037 / 0.480.14 / 0.019
33³0.016 / 0.310.010 / 0.280.036 / 0.005
33³, 선형광 격자0.15 / 4.50.16 / 4.30.49 / 0.23

표 16-5. 시뮬레이터와 같은 계산으로 얻은 3D LUT 보간 오차(ΔE00, 무작위 3,000색). 17³ LUT는 16비트로 29 KB, 33³은 216 KB다. 감마 인코딩 격자라면 17³만으로도 평균 ΔE00 0.04로 인지 한계(약 1) 아래이고, 최대 오차는 sRGB 원색 근처의 급한 곡률에서 나온다. 같은 33³라도 선형광 격자는 최대 4.5로, 격자 배치가 크기보다 중요할 수 있다.

공학자 관점: 정밀도 체크리스트
  • 넓은 작업 공간(ProPhoto, ACEScg, Rec.2020)은 16비트 정수 또는 16/32비트 부동소수와 함께 쓴다. 선형광 데이터는 반드시 부동소수(half 이상)로 저장한다.
  • 행렬/TRC끼리의 변환은 LUT로 굽지 말고 해석적으로 계산하라. CMM이 LUT를 만든다면 격자 크기와 보간법(사면체)을 확인하라.
  • 3D LUT 입력은 지각적으로 균등한 인코딩(감마, 로그, PQ)으로 셰이핑한다. 장면 기준 선형 값을 그대로 LUT 좌표로 쓰면 그림자 오차가 커지고 1을 넘는 값은 잘린다.
  • 왕복 검증: 변환 → 역변환 결과의 ΔE00 분포(평균, 95%, 최대)를 회귀 테스트로 관리한다. 디스플레이 교정용 3D LUT(13장)도 같은 방식으로 검증한다.

핵심 정리

  1. RGB·CMYK 값은 장치 의존 명령이다. 같은 (1, 0, 0)이 sRGB에서는 L*a*b* (54.3, 80.8, 69.9), Rec.2020에서는 (59.8, 116.9, 106.8)이다.
  2. ICC 색 관리는 모든 장치를 PCS(D50, CIE 1931 2°, XYZ 또는 Lab)에 연결해 N×M 변환 문제를 N+M개의 프로파일로 바꾼다. 실행은 CMM이 한다.
  3. 프로파일은 128바이트 헤더 + 태그 테이블 + 태그 데이터다. 디스플레이는 행렬/TRC(rXYZ…, rTRC…), 프린터는 인텐트별 A2B/B2A CLUT를 쓴다.
  4. D65 디스플레이는 chad(선형 Bradford)로 D50에 적응된다. sRGB의 rXYZ = (0.4361, 0.2225, 0.0139)는 Mchad·MsRGB의 첫 열이다.
  5. 지각적은 전체 압축으로 관계를, 상대 측색은 가멋 안 색을 매체 백색 기준으로, 채도는 선명함을, 절대 측색은 종이 색까지 보존한다. BPC(ISO 18619)는 흑점을 맞춰 그림자 계조를 지킨다.
  6. 소프트 프루핑은 출력 B2A → A2B 왕복을 화면에 표시한다. 절대 측색으로 되돌리면 종이 백색 시뮬레이션이다.
  7. 태그 없는 이미지는 sRGB로 간주된다. 프로파일 “지정”은 해석만, “변환”은 숫자를 바꾼다. P3 파일의 태그를 잃으면 채도가 약 20% 떨어진다.
  8. 영상은 장면 기준(ACES2065-1/AP0 보관, ACEScg/AP1 작업)과 디스플레이 기준(출력 변환 이후)을 나누고, OCIO 설정 하나로 모든 앱의 변환을 통일한다.
  9. 넓은 작업 공간 8비트 왕복은 계조를 영구히 잃는다. 3D LUT는 감마 인코딩 격자 + 사면체 보간에서 17³로 평균 ΔE00 0.04, 33³로 0.01 수준이다.

확인 퀴즈

1. 입력 장치 6종과 출력 장치 9종이 있다. PCS를 쓰는 ICC 구조에서 필요한 장치 프로파일은 몇 개인가?

장치마다 “장치 ↔ PCS” 프로파일 하나면 되므로 6 + 9 = 15개다. 직접 연결이라면 6 × 9 = 54개의 변환이 필요하다.

2. ICC PCS의 기준 백색과 관측자는?

PCS는 D50 백색(헤더 값 0.9642, 1, 0.8249)과 CIE 1931 2° 관측자를 쓴다. 그래픽 아트 관찰 조건(ISO 3664)과 인쇄 측색(ISO 13655)이 D50이기 때문이다.

3. sRGB 프로파일의 rXYZ가 sRGB 행렬의 첫 열 (0.4124, 0.2126, 0.0193)이 아니라 (0.4361, 0.2225, 0.0139)인 이유는?

PCS 백색이 D50이므로 디스플레이 백색 D65가 D50에 대응하도록 Bradford 행렬을 원색 행렬에 곱한다. Mchad·MsRGB의 열이 rXYZ, gXYZ, bXYZ이고 그 합은 D50 백색이다.

4. 가멋 안의 색은 매체 백색 기준 측색값 그대로 두고, 가멋 밖 색만 경계로 자르는 인텐트는?

상대 측색은 소스 백색을 매체 백색에 맞춘 뒤 가멋 안 색은 그대로, 밖은 클리핑한다. 절대 측색도 클리핑하지만 백색점 스케일링을 하지 않아 종이 색까지 재현하려 한다.

5. 신문 인쇄 결과를 고급 코팅지 교정 프린터로 미리 확인하려 한다. 종이의 누런 색까지 흉내 내려면 교정 프린터 출력에 어떤 인텐트를 써야 하는가?

절대 측색은 PCS 값을 매체 백색 비율로 스케일해 원래의 절대값을 재현한다. 신문지의 회황색 백색이 코팅지 위에 잉크로 찍힌다. 이것이 교정(proofing)의 표준 방법이다.

6. 블랙 포인트 보상(BPC)을 켜지 않은 상대 측색 변환에서 모니터 이미지를 비코팅지(흑점 L* ≈ 24)로 출력하면 생기는 주된 문제는?

출력 흑점보다 어두운 모든 색이 L* 클리핑으로 같은 검정이 된다. BPC는 \(\mathbf{X}'=a\mathbf{X}+(1-a)\mathbf{X}_{D50}\) 스케일로 소스 흑점을 출력 흑점에 맞춰 그림자 계조를 살린다.

7. Display P3로 촬영한 사진에서 최적화 도구가 ICC 프로파일을 지웠다. 브라우저에서 어떻게 보이는가?

태그 없는 이미지는 sRGB로 간주된다. 같은 숫자가 더 좁은 원색으로 해석되므로 채도가 떨어진다. 시뮬레이터 계산으로 빨강은 ΔE00 7.1, 채도 −22%다.

8. ACEScg에 대한 설명으로 옳은 것은?

ACEScg는 AP1 원색(0.713, 0.293 / 0.165, 0.830 / 0.128, 0.044)의 장면 기준 선형 공간이다. 보관·교환용은 AP0의 ACES2065-1, 그레이딩용 로그 인코딩은 ACEScct다.

9. 같은 33³ 3D LUT인데 격자를 선형광 값에 균등하게 배치하면 감마 인코딩 배치보다 오차가 훨씬 크다. 이유는?

선형광으로 균등하면 L*가 낮은 영역(선형값 0~0.05)에 격자점이 한두 개뿐이다. 반면 그 영역의 Lab 곡률은 가장 크다. 그래서 LUT 앞에 감마·로그 셰이퍼를 두어 격자를 지각적으로 고르게 배치한다.

10. 사면체 보간이 삼선형 보간보다 무채색(회색) 축에서 유리한 이유는?

셀을 c000–c111 대각선을 공유하는 6개 사면체로 나누므로, 회색 입력은 대각선 끝의 두 회색 노드만 쓴다. 삼선형은 유채색 꼭짓점까지 섞어 회색에 미세한 색이 낀다. 17³에서 회색 축 오차는 0.14 대 0.019다.