본문 바로가기
vfxai 잡학지식 vfxai 잡학지식

합성 결과에 음수 픽셀이 생길 때: 원인과 Clamp를 걸어도 되는 자리

vfx 잡학지식 읽는 시간 약 8분 조회 1

합성 결과를 보다가 R, G, B 중 하나가 -0.2로 내려간 걸 발견하면 먼저 Clamp를 걸고 싶습니다. 하지만 그 음수 픽셀이 입력부터 있던 값인지, 색역 변환이나 필터 계산이 만든 중간값인지에 따라 답이 달라집니다. 어느 경우에 값을 남기고, 어디에서 잘라야 할까요?

먼저 한 픽셀의 RGB가 어느 노드 뒤에서 처음 음수가 됐는지 찾으세요. 그다음 원인이 색역 변환인지, 샤픈·필터인지, 빼기 연산인지 나누면 Clamp 위치가 달라집니다.

음수 픽셀은 float 이미지에서 나올 수 있습니다

0은 검정, 1은 기준 흰색이라고 배웠더라도, float 합성에서는 모든 RGB 값이 0과 1 사이에만 있어야 하는 것은 아닙니다. 1보다 큰 값은 더 밝은 데이터를 나타낼 수 있고, 음수도 색을 다른 RGB 좌표계로 표현하거나 두 값을 뺄 때 생길 수 있습니다. 음수라는 이유만으로 데이터 손상이라고 단정할 수 없습니다.

32bit Float 이미지는 0~1 바깥의 밝기와 음수 데이터를 담을 수 있습니다. float 값의 범위와 합성 중간 파일을 더 확인하려면 32bit Float 이미지에서 1을 넘거나 0 아래인 값이 왜 남는지를 먼저 볼 수 있습니다.

1. 색역 변환은 음수 채널을 만들 수 있습니다

RGB 숫자는 색을 정해 둔 프라이머리의 조합으로 나타낸 값입니다. 그래서 같은 색을 다른 프라이머리 좌표계로 바꾸면 채널 값이 달라집니다. 이때 바뀐 색역 안에 표현할 수 없는 색은 한두 채널이 0 아래로 내려갈 수 있습니다. ACEScg와 sRGB의 차이도 단순히 선형·감마만의 차이는 아니므로, ACEScg와 sRGB의 색역·작업 공간 차이를 구분해야 합니다.

ACES 공식 AP0→AP1 변환 행렬에 AP0의 녹색 (0, 1, 0)을 넣으면 ACEScg/AP1에서 (-0.2365, 1.1762, -0.0060)이 됩니다. 입력은 모두 0 이상이지만 변환 뒤 빨강과 파랑 채널은 음수입니다. 이는 이 색을 AP1 좌표계에 표현한 결과이지, 파일이 깨졌다는 증거는 아닙니다.

변환 단계RGB 값
ACES2065-1 / AP0 입력(0.000, 1.000, 0.000)
ACEScg / AP1 출력(-0.237, 1.176, -0.006)
0~1 Clamp 뒤(0.000, 1.000, 0.000)

마지막 행은 원래 변환 결과의 두 음수 채널과 1을 넘은 녹색 값이 모두 잘린 결과입니다. 뒤에서 다른 합성이나 색변환을 더 해야 한다면 이런 값을 먼저 0~1로 자르지 마세요. ACEScg 사양도 음수 값을 가능하면 합성 중 보존하고, 어려운 경우에만 0으로 대체할 수 있다고 설명합니다.

음수 픽셀 예시: AP0 녹색의 ACEScg 변환과 0~1 Clamp 전후 비교
AP0의 (0,1,0)은 AP1에서 (-0.237,1.176,-0.006)이 되며, 0~1 Clamp 뒤 (0,1,0)으로 바뀝니다.

2. 샤픈과 필터 링잉은 경계에서 범위를 넘깁니다

샤픈은 주변 픽셀과의 차이를 더해 경계를 강조합니다. 설명을 위해 0에서 1로 바뀌는 경계에 3탭 평균 블러를 먼저 적용하고, 언샤프 마스크 강도를 1로 놓겠습니다. 계산식은 입력값에 입력과 블러의 차이를 한 번 더하는 형태입니다.

출력 = 입력 + (입력 - 블러)

입력이 [0, 0, 0, 0, 1, 1, 1, 1, 1]이면 경계 양쪽의 블러 값은 각각 1/3과 2/3입니다. 어두운 쪽은 0 + (0 – 1/3) = -1/3이 되고, 밝은 쪽은 1 + (1 – 2/3) = 4/3이 됩니다. 한 번의 샤픈으로 0 아래와 1 위가 함께 생깁니다.

따라서 음수와 과한 하이라이트가 경계에만 붙어 있다면 Clamp를 먼저 걸기보다 샤픈 강도와 필터 선택을 확인하세요. 커널과 강도에 따라 경계 밖으로 밀리는 값의 크기도 달라집니다.

3. Grade·Minus·디스필은 뺄셈으로 음수를 만들 수 있습니다

Grade의 Offset이나 Minus 연산에서 검정에 가까운 값을 더 빼면 RGB가 0 아래로 내려갑니다. 예를 들어 (0.10, 0.10, 0.10)에 -0.25를 더하면 (-0.15, -0.15, -0.15)입니다. Foundry 문서에서 Nuke Grade의 black clamp 기본값은 켜짐입니다. 이 상태에서는 0보다 작은 출력이 0으로 잘리므로, Grade 뒤에서 음수를 보존하려면 해당 노브를 꺼야 합니다.

Nuke Merge의 minus는 B를 A에서 빼는 연산입니다. A=(0.10, 0.35, 0.20), B=(0.25, 0.25, 0.25)이면 결과는 (-0.15, 0.10, -0.05)입니다. 두 입력 중 어느 쪽이 더 큰지에 따라 채널마다 부호가 갈립니다. Merge 연산은 premultiplied 입력을 기대하는 경우가 많으므로, RGB 부호만 보지 말고 알파와 프리멀티플라이 상태도 함께 확인하세요. 알파와 프리멀티플라이 상태를 점검하는 방법을 참고할 수 있습니다.

디스필도 색을 빼는 과정에서 한 채널을 음수로 보낼 수 있습니다. 예를 들어 녹색 채널 0.55에서 추정한 spill 0.62를 빼면 G는 -0.07입니다. 이는 원리를 설명하기 위한 단순 산술 예시이며, Keylight의 실제 내부 계산이나 노드 출력을 재현하지 않습니다. Keylight에는 잔여 spill을 줄이는 Despill Bias가 있습니다. 디스필 뒤에 음수가 생기면 spill 제거 강도와 가장자리 색을 확인해야 합니다.

Clamp는 필요한 경계에서만 겁니다

Nuke의 Clamp는 선택한 채널을 기본적으로 0부터 1까지 제한합니다. 화면에서만 값이 그렇게 보이도록 하는 것과 이미지 데이터를 실제로 자르는 것은 다릅니다. Viewer에서 음수가 보인다는 이유로 파이프라인 중간에 Clamp를 넣으면, 다음 색변환이나 합성에 필요했던 값까지 바뀔 수 있습니다.

  • 색역 변환 직후: 입력·출력 색공간과 변환을 확인합니다. 작업 공간에서 후속 합성에 쓸 값이면 보존하고, 음수 때문에 특정 연산이 깨지는 것이 확인되면 그 연산의 요구를 따로 해결합니다.
  • 샤픈·필터 직후: 같은 픽셀을 노드 전후로 비교합니다. 경계에만 음수와 1 초과가 생겼다면 필터와 강도를 먼저 조정합니다.
  • Grade·Minus·디스필 뒤: 음수를 의도한 중간값으로 둘지, 보정이 지나친 것인지 판단합니다. Nuke Grade라면 black clamp 상태도 확인합니다.
  • 후속 노드 또는 최종 출력 직전: 입력 범위가 실제로 0 이상이나 0~1로 제한되는지 확인한 뒤, 필요한 채널에만 Clamp를 둡니다. RGB만 처리한다면 채널을 지정하고 alpha·depth·motion vector 같은 데이터 채널을 관성적으로 함께 자르지 않습니다.

이미지가 premultiplied 상태라면 Nuke Clamp의 (un)premult by에서 rgba.alpha를 선택할 수 있습니다. Foundry 문서에 따르면 이 설정은 Clamp 전에 unpremult하고 뒤에서 다시 premult하는 처리와 같습니다. 알파 경계의 색이 달라지는지 같은 픽셀을 전후로 비교하세요.

ACES 작업에서 음수 색을 AP1 안으로 다뤄야 한다면 Reference Gamut Compression도 선택지입니다. 이는 음수를 단순히 0으로 자르는 Clamp와 같은 연산이 아니므로, 색역 변환에서 생긴 값인지 먼저 확인하고 파이프라인에서 어느 시점에 적용할지 정해야 합니다.

한 줄로 정리하면

음수는 원인을 찾고, Clamp는 다음 단계가 요구하는 범위가 확인된 자리에서만 적용합니다.

vfx 잡학지식

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.