ACEScg에서 Saturation·Luma 키가 이상하게 걸릴 때: 색공간별 휘도 계수
ACEScg 휘도 계수를 Rec.709 숫자로 계산하면, 같은 선형 RGB도 직접 만든 saturation 처리의 회색 기준과 Luma Key 문턱에서 다른 값으로 읽힙니다. 왜 R이 강한 색과 G·B가 강한 색의 오차 방향은 서로 반대일까요? 색공간이 계수를 바꾸는 이유, 계산 예시, Nuke에서 확인할 지점을 순서대로 보겠습니다.
먼저 RGB 숫자를 어느 색공간의 값으로 다루는지 확인해야 합니다. ACEScg와 sRGB가 작업용·출력용으로 다른 이유와 Rec.709와 sRGB의 공통점·차이를 먼저 읽으면 좌표와 표시 곡선을 구분하기 쉽습니다.
1. ACEScg 휘도 계수는 왜 색공간마다 다를까요?
R·G·B는 색 자체가 아니라 정해진 프라이머리의 양입니다. 빨강·초록·파랑 프라이머리가 바뀌면 같은 숫자 조합도 다른 색을 뜻하고, 그 조합에서 상대 휘도 Y를 계산하는 가중치도 바뀝니다.
ACEScg는 AP1 프라이머리와 D60 화이트포인트를 쓰는 선형 작업 공간입니다. Rec.709는 다른 프라이머리와 D65를 사용합니다. 그러므로 Rec.709 계수는 모든 RGB 공간에 통하는 공통 상수가 아닙니다.
용어도 구분해야 합니다. 선형 Rec.709 RGB의 상대 휘도는 Y709 = 0.2126R + 0.7152G + 0.0722B입니다. 반면 BT.709-6의 방송용 Y′ 식은 감마 보정된 E′R·E′G·E′B에 같은 계수를 곱합니다. 비선형 신호에 계산한 값은 Y′이고 선형값에 계산한 값은 Y입니다. ACEScg의 선형값에는 AP1 휘도 계수를 써야 합니다. sRGB 인코딩값과 선형값의 구분은 sRGB와 Linear 글에서 이어서 볼 수 있습니다.
2. 계수가 바뀌면 색에 따라 오차 방향도 바뀝니다
선형 ACEScg RGB 샘플 두 개에 Rec.709 계수와 AP1 휘도 계수를 각각 대입했습니다. 아래의 Rec.709 열은 차이를 비교하려고 Rec.709 가중치를 AP1 숫자에 그대로 적용한 값입니다.
| 선형 AP1 샘플 | Rec.709 가중치 적용 Y | AP1 가중치 적용 Y |
|---|---|---|
| R 우세 (0.90, 0.20, 0.05) | 0.33799 | 0.38251 |
| G·B 우세 (0.10, 0.65, 0.70) | 0.53668 | 0.50296 |
R 우세 샘플은 AP1 계산값이 0.04452 높습니다. G·B 우세 샘플은 반대로 AP1 값이 0.03372 낮습니다. Rec.709 계수가 늘 한쪽으로 밝거나 어둡게 만드는 것은 아닙니다. R·G·B 비율에 따라 결과가 달라집니다.

첫 샘플에 단일 키 문턱 0.36을 놓으면 Rec.709 계산값은 문턱 아래, AP1 계산값은 위에 놓입니다. 실제 Keyer의 A·B·C·D 범위는 가장자리의 부드러움까지 정하므로, 이 예시는 경계가 움직이는 이유만 보여줍니다. 기존 문턱값을 그대로 옮기면 매트가 달라질 수 있습니다.
3. Nuke 문서에 계수 선택 메뉴가 있는지 확인합니다
Foundry의 Saturation 노드에는 luminance math 메뉴가 있고, 선택지는 Rec 709, Ccir 601, Average, Maximum입니다. Foundry의 NDK 예제 코드도 메뉴 이름과 네 선택지를 보여 주며, 이 중 AP1 선택지는 없습니다. Nuke 17.1 문서의 Keyer operation에는 luminance key가 있지만 휘도 계산 방식 선택 메뉴는 나열되어 있지 않습니다. ColorCorrect에도 그런 메뉴는 없으며, mix luminance는 보정 뒤 입력 휘도를 얼마나 보존할지 조절하는 별도 기능입니다.
이 메뉴에는 AP1 선택지가 없습니다. Keyer의 luminance key는 휘도 계산 방식을 고르는 메뉴가 문서에 없고, Foundry 문서도 내부 계수를 명시하지 않습니다. 따라서 내장 Saturation·Keyer를 AP1 기준 처리라고 간주하지 말고, 아래와 같이 AP1 Y를 직접 계산해 사용하세요. 문제가 재현되면 Viewer의 표시 변환이 아니라 해당 노드 입력의 실제 색공간과 채널값을 확인해야 합니다.
AP1 휘도 매트를 명시적으로 만들려면 원본 RGB와 분리된 가지에서 Expression으로 계산할 수 있습니다. Expression의 red 채널에 아래 식을 넣고, 뒤의 Keyer operation을 red keyer로 설정하면 계산한 Y를 키 입력으로 씁니다. 색을 합성할 원본 RGB 가지는 따로 보존하세요. 입력이 premultiplied라면 이 계산 가지에서 먼저 unpremult해 투명 가장자리의 RGB가 알파에 눌리지 않게 합니다. Foundry 문서도 Saturation 처리에서 premultiplied 입력은 rgba.alpha로 unpremult한 뒤 다루는 방법을 안내합니다.
0.2722287168*r + 0.6740817658*g + 0.0536895174*b
이제 답을 한 문장으로 닫겠습니다. 선형 ACEScg의 상대 휘도 계수는 AP1→XYZ 변환 행렬의 Y행입니다.
ACEScg의 공식 AP1 프라이머리와 D60 화이트포인트로 만든 행렬은 다음과 같습니다. 가운데 행이 XYZ의 Y이므로, 이 행의 세 값을 R·G·B에 곱하면 됩니다.
AP1 → XYZ [ 0.6624541811 0.1340042065 0.1561876870 ] [ 0.2722287168 0.6740817658 0.0536895174 ] ← Y행 [ -0.0055746495 0.0040607335 1.0103391003 ]
YAP1 = 0.2722287168R + 0.6740817658G + 0.0536895174B
이 계산은 입력이 선형 ACEScg(AP1)일 때 맞습니다. ACEScct·ACEScc, 표시 변환이 적용된 뷰어 이미지, sRGB 인코딩값에는 그대로 적용하지 마세요. 색공간이나 전달 곡선이 바뀌면 먼저 변환한 뒤 해당 공간의 계산을 써야 합니다.
선형 AP1을 기준으로 포화도를 직접 구성한다면, 각 출력 채널은 YAP1 + (입력 채널 − YAP1) × Saturation으로 보간할 수 있습니다. Saturation이 0이면 R·G·B가 모두 AP1의 Y가 되고, 1이면 입력 색을 유지합니다.
결국 하나입니다. ACEScg 휘도 계수는 AP1→XYZ 행렬의 Y행입니다.
vfx 잡학지식



댓글 0
첫 댓글을 남겨보세요.