알파 있는 CG에 색보정했더니 가장자리가 어두워질 때: Unpremult가 필요한 경우와 아닌 경우
프리멀트 색보정은 모든 노드 앞에 Unpremult를 붙이는 작업이 아닙니다. 반투명한 머리카락과 모션 블러 가장자리가 보정 뒤 어두워졌다면, 어떤 색 변환을 했는지부터 나눠 봐야 합니다. 같은 픽셀이라도 단순히 밝기를 곱한 것은 괜찮고, 검정점을 들어 올리거나 곡선을 바꾸면 가장자리 색이 달라질 수 있습니다.
어떤 보정은 프리멀트 상태에서 해도 되고, 어떤 보정은 풀어야 할까요? 이 글에서는 먼저 알파가 RGB에 어떻게 들어 있는지 확인하고, 단순한 곱셈과 오프셋·곡선의 결과를 같은 픽셀로 비교한 뒤, Nuke에서 안전하게 연결하는 순서를 정리합니다.
먼저 기억할 것은 화면에 보이는 검은 가장자리와 RGB 데이터의 어두워짐이 같은 문제는 아니라는 점입니다. 입력이 straight인지 premultiplied인지 잘못 해석한 문제라면 알파와 프리멀티플라이 기본 점검부터 확인하세요. 여기서는 그 다음 단계인 ‘어떤 연산을 어느 상태에서 적용할까?’에 집중합니다.
프리멀트 색보정에서 먼저 볼 것은 알파와 RGB의 연결입니다
알파 0.25인 가장자리 픽셀을 생각해 보세요. 원래 표면의 빨강 값이 0.8이면, 프리멀트 RGB에는 이미 알파가 곱해져 0.2가 저장됩니다. 즉, straight 상태의 RGB가 C일 때 premultiplied RGB는 c = αC입니다.
이 곱셈은 투명도를 색 기여도에 반영합니다. 그래서 프리멀트 이미지는 배경 위에 바로 합성하기 편합니다. 전경의 premult RGB를 c, 알파를 α, 불투명 배경의 RGB를 B라고 하면 over 결과는 c + (1−α)B입니다. Nuke의 Merge는 대부분의 합성 연산에서 premultiplied 입력을 기대하지만, matte 연산에는 unpremultiplied 입력을 사용한다고 Foundry가 안내합니다.
이 수식은 RGB와 알파가 함께 연결된 선형 합성 도메인의 예입니다. 색공간 변환이나 디스플레이 변환처럼 비선형 단계는 premult 관계를 바꿀 수 있으니, 해당 노드가 alpha로 나눈 뒤 변환하고 다시 곱하는지 확인하세요. Viewer에서 RGB 채널만 볼 때 가장자리가 어두운 것은 정상일 수 있으므로, 프린지는 실제 배경 위 합성 결과로 판단합니다.
하지만 색 보정은 이 연결을 흐트러뜨릴 수 있습니다. 알파가 0.25라 RGB도 원래 색의 4분의 1인 상태인데, 보정 노드는 그 RGB 숫자를 ‘이미 투명도만큼 줄어든 색’이라고 알지 못할 수 있습니다. 보정이 이 비율을 보존하는지 따져야 하는 이유입니다.
곱셈은 그대로 통과하지만 오프셋과 곡선은 경계를 바꿉니다
먼저 RGB에 2를 곱해 보겠습니다. premult 값 0.2는 0.4가 됩니다. 반대로 원래 색을 복원해 0.8에 2를 곱한 뒤 알파 0.25를 다시 곱해도 0.4입니다. 가장자리와 알파의 비율이 유지됩니다.
이번에는 premult RGB에 0.1을 더한다고 해 보겠습니다. 0.2는 0.3이 되지만, 원래 색에 0.1을 더한 뒤 다시 premult하면 (0.8+0.1)×0.25 = 0.225입니다. 두 결과가 다릅니다. 알파가 0인 곳에도 0.1이 남으므로, 투명 영역의 RGB까지 색을 띠게 할 수 있습니다.
비선형 곡선도 같은 문제가 생깁니다. 아래 그림은 특정 Nuke Gamma 값이 아니라, 계산이 보이는 간단한 곡선 f(x)=x² 예시입니다. 빨간 채널 C=0.8, α=0.25라면 프리멀트 값은 0.2입니다. 이 값에 곡선을 바로 적용하면 0.04지만, 색을 먼저 복원해 0.8²을 계산하고 알파를 다시 곱하면 0.16이 됩니다.

그래서 프리멀트 RGB에 곡선을 바로 적용하면 색이 알파보다 더 빠르게 줄어 어두운 띠가 생길 수 있습니다. 반대로 오프셋을 더하면 밝거나 색이 묻은 띠가 나타날 수 있습니다. 밝고 어두운 방향은 보정 내용에 따라 달라지지만, 공통 원인은 RGB와 알파의 비율이 깨지는 것입니다.
Nuke에서는 입력 상태와 마지막 알파를 함께 확인하세요
- 입력이 premult인지 먼저 확인합니다. 파일 메타데이터나 렌더·익스포트 설정을 확인하세요. 어두운 배경은 단서일 뿐 확정 기준은 아닙니다. Foundry도 3D 렌더가 보통 premult라고 설명하면서, 어두운 배경은 rule of thumb이라고 한정합니다.
- 보정 노드의 alpha 처리 설정을 확인합니다. Foundry의 Grade와 ColorCorrect에는 alpha로 나눈 뒤 처리하고 다시 곱하는 (un)premult by 옵션이 문서화돼 있습니다. 이 옵션을 쓸지는 보정 연산이 어떤 형태인지 확인한 뒤 결정하세요.
- 입력이 이미 straight라면 다시 나누지 않습니다. straight RGB를 보정한 뒤 Nuke Merge에 연결할 때 Premult가 필요한지 확인합니다. 같은 파일을 premult로 잘못 읽거나 Unpremult를 한 번 더 넣으면 결과가 달라집니다.
- 알파는 색 보정 전후로 비교합니다. 색 보정이 알파까지 바꾸지 않았는지, 최종 Premult가 의도한 알파를 쓰는지 확인합니다.
Nuke Grade의 (un)premult by는 입력을 선택한 채널로 나눠 보정한 뒤 다시 곱하는 방식이라고 설명돼 있습니다. 그래서 한 번의 Grade만 필요하다면 Unpremult와 Premult 노드를 따로 두지 않고 이 옵션을 쓸 수 있습니다. 반대로 어떤 노드에 이 옵션이 없거나 여러 연산 사이의 상태를 눈으로 확인해야 한다면 노드를 분리하는 편이 추적하기 쉽습니다.
알파가 0에 가까운 픽셀은 결과를 과신하지 마세요
Unpremult는 RGB를 알파로 나눕니다. 따라서 알파가 아주 작은 픽셀에서는 작은 RGB 오차도 나눈 뒤 크게 보일 수 있고, 알파가 정확히 0이면 수학적으로 나눗셈을 정의할 수 없습니다. 앱과 노드의 처리 방식은 버전과 구현에 따라 다를 수 있습니다. 따라서 특정 임계값을 보편적인 기준으로 적용하지 않는 편이 안전합니다.
실무에서는 완전 투명 영역의 RGB를 과도하게 끌어 올리지 않도록 보호하고, 보정 뒤 낮은 알파 구간을 밝은 배경과 어두운 배경에서 함께 확인하세요. 렌더나 키어가 만든 반투명 가장자리라면 머리카락·모션 블러·피사계 심도 경계가 남아 있는지도 봅니다. 초록 테두리처럼 색 자체에 스크린 스필이 남은 문제라면 알파만 고치지 말고 매트와 디스필을 나눠 보는 방법을 확인하세요.
마지막 점검은 어두운 배경과 밝은 배경에서 합니다
Viewer의 체크보드만 보지 말고 검정·회색·밝은 배경 위에 각각 합성해 보세요. RGB와 alpha를 따로 보고, 경계 픽셀 하나를 골라 보정 전후 값을 비교하면 검은 프린지인지, 색상 오염인지, 알파 변경인지 분리하기 쉽습니다. Alpha는 그대로인데 가장자리 RGB가 예상과 다르게 변했다면, 보정이 프리멀트 비율을 보존하는지 먼저 확인하세요.
판단 기준은 노드 이름이 아니라 f(αC)=αf(C)입니다
정답은 연산식으로 가를 수 있습니다. 알파를 바꾸지 않는 RGB 보정이라면, 프리멀트 값에 적용한 결과 f(αC)가 색을 복원한 뒤 다시 premult한 값 αf(C)와 같을 때 그대로 처리해도 됩니다. 이 조건을 만족하는 대표 예는 원점을 지나는 선형 변환입니다.
| 보정 종류 | 프리멀트에서 처리 | 이유 또는 확인할 점 |
|---|---|---|
| RGB에 일정한 값 곱하기 | 가능 | RGB에 고정값을 곱하면 α와의 비율을 유지합니다. Nuke의 Multiply는 channels 기본값이 all이라 alpha도 곱하므로, alpha를 유지하려면 channels를 rgb로 제한하세요. |
| 채널별 고정 gain, 선형 노출 배율 | 조건을 만족하면 가능 | RGB에 고정 배수를 곱하고 알파를 건드리지 않는 동작이어야 합니다. |
| 오프셋, lift, 검정점 이동 | Unpremult 후 처리 | 고정값을 더하는 항은 알파와 함께 줄어들지 않습니다. |
| 감마, 커브, 비선형 톤 보정 | Unpremult 후 처리 | 일반적으로 f(αC)와 αf(C)가 다릅니다. |
| 색상 행렬·채도·색공간 변환 | 실제 계산식에 따라 결정 | 원점을 지나는 선형 RGB 행렬인지, 오프셋·비선형 변환·클램프가 섞이는지 확인하세요. |
여기서 ‘채널별 gain’은 이름만으로 판단하지 마세요. 예를 들어 Nuke의 Multiply는 지정한 채널 값에 인수를 곱하는 노드라 조건을 확인하기 쉽습니다. 반면 Grade의 blackpoint, whitepoint, lift, offset을 조정하거나 ColorCorrect의 gamma·contrast·offset을 쓰면 단순 곱셈이 아닐 수 있습니다. 노드에 (un)premult by 설정이 있다면 해당 노드의 문서와 실제 설정을 확인하세요.
이 규칙은 알파를 그대로 둘 때만 적용됩니다. 매트의 모양이나 가장자리 투명도를 바꾸는 작업은 색 보정과 별도입니다. 키잉·Roto·매트 연산으로 알파가 바뀌었다면 마지막 Premult에 어느 알파를 연결할지도 다시 확인해야 합니다.
결국 프리멀트에서 안전한 것은 알파 비율을 보존하는 연산이고, 나머지는 Unpremult 후 보정하고 다시 Premult하는 것입니다.
참고 문서
vfx 잡학지식

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