배경은 지웠는데 검은 테두리는 남았다 — 알파와 프리멀티플라이 점검하기
검은 테두리가 보이면 알파를 깎지 마세요. RGB가 알파에 곱해진 상태인지부터 확인하는 30초 점검법.
배경은 투명해졌는데 피사체 가장자리에 가느다란 검은 선이 붙어 있습니다. 머리카락이나 모션 블러처럼 반투명한 부분은 더 심합니다. 검은 배경에서는 멀쩡하고 밝은 배경에 올리자마자 테두리가 나타나죠. 마스크를 안쪽으로 줄이면 선은 약해지지만 윤곽도 함께 깎여 나갑니다. 흔히 검색하는 ‘누끼 검은 테두리’나 ‘합성 검은 테두리’가 바로 이 화면입니다.
알파를 더 깎을수록 검은 선이 얇아지는 이유부터 의심해야 합니다
가장 먼저 하는 시도는 Erode로 알파를 줄이거나, Roto를 안쪽으로 당기거나, EdgeBlur로 경계를 흐리는 것입니다. 당장은 검은 선이 사라진 것처럼 보입니다. 하지만 이것은 검은색을 고친 게 아니라 검은색이 묻은 픽셀 자체를 버린 겁니다. 얇은 머리카락, 천의 보풀, 모션 블러, 피사계 심도 경계도 같이 없어집니다.
Grade에서 검정을 밝게 올리는 방법도 잘 안 먹힙니다. 테두리만 밝아지는 것이 아니라 피사체의 진짜 검정까지 뜨고, 반투명 경계에는 여전히 어두운 띠가 남습니다. 밝은 배경색을 가장자리에 칠하는 방식은 그 배경 한 장에서는 맞아 보여도 다른 배경으로 교체하면 다시 틀어집니다. 이 문제의 핵심은 가장자리 색 하나가 아니라 RGB와 알파를 어떤 상태로 계산했느냐예요.
Straight는 가장자리의 원래 색을 보존하고, premultiplied는 그 색에 알파를 미리 곱해 저장합니다.
검은 테두리는 배경의 잔재가 아니라 계산 순서의 흔적일 수 있습니다
픽셀의 알파가 0.25라고 해보겠습니다. Straight 상태라면 파란 물체의 RGB는 원래 파란색을 유지하고 알파만 0.25입니다. Premultiplied 상태에서는 RGB에도 0.25가 곱해져 더 어두운 파랑으로 저장됩니다. Nuke의 Merge 노드에서 over 합성을 할 때는 이처럼 알파가 미리 곱해진 RGB를 기대합니다.
문제는 이 어두워진 RGB를 원래 색인 것처럼 보정할 때 생깁니다. Premultiplied 이미지에 곧바로 Grade, ColorCorrect, HueCorrect 같은 색 연산을 걸면 반투명 경계는 이미 알파에 눌린 값을 기준으로 계산됩니다. 그 뒤 다시 Premult를 하거나 straight 이미지인데 premultiplied라고 가정해 Merge하면 가장자리에 알파가 두 번 적용된 것처럼 어두운 띠가 생길 수 있습니다. 이것이 프리멀티플라이 순서를 먼저 점검해야 하는 이유입니다.
반대로 straight RGB를 Premult 없이 Merge에 넣어도 틀립니다. 알파가 작은 픽셀에 온전한 RGB가 남아 있으므로 밝거나 색이 번진 테두리가 나타날 수 있습니다. 즉 검은 테두리는 언제나 “Premult가 부족해서” 생기는 것도, 언제나 “두 번 걸어서” 생기는 것도 아닙니다. 입력 상태와 처리 순서가 맞지 않는 것이 문제인 셈이죠.
Premultiplied 렌더의 색을 바꿀 때만 Unpremult로 풀고, 보정 뒤 Premult로 다시 묶습니다.
30초 동안 알파와 RGB를 따로 보면 어느 단계가 틀렸는지 드러납니다
먼저 Nuke Viewer의 채널 메뉴에서 alpha를 선택해 ‘알파 채널 확인’을 합니다. 경계가 부드러운 회색인데 검은 선은 RGB 화면에서만 보인다면, 마스크 모양보다 premultiplication을 의심할 근거가 큽니다. 반대로 alpha 자체에 검은 홈이나 지나치게 안쪽으로 들어간 경계가 보이면 Unpremult만으로는 해결되지 않습니다.
다음으로 피사체와 Merge 사이에 Unpremult와 Premult를 임시로 넣습니다. 흐름은 Read 또는 렌더 입력 → Unpremult → 기존 색 보정 노드 → Premult → Merge(over)입니다. 두 노드의 alpha 채널 설정은 실제 매트가 들어 있는 채널을 사용합니다. 이 상태에서 밝은 회색과 진한 색 배경을 번갈아 붙였을 때 검은 선이 동시에 사라지면 계산 순서가 원인이 맞습니다.
세 번째는 Viewer에서 RGB 값을 살피는 것입니다. 알파가 0에 가까운 바깥 픽셀은 검게 보이는 것이 정상일 수 있습니다. 중요한 판정은 checkerboard 위 모양이 아니라 Merge 후 결과예요. Unpremult 상태를 그대로 Viewer에서 보면 투명 영역의 숨은 RGB가 거칠거나 길게 뻗어 보여도 이상이 아닙니다. 그 상태로 Merge하지 않고 반드시 Premult 뒤 합성합니다.
알파 표시, 노드 삽입, 배경 교체의 세 단계만 거치면 마스크 문제와 계산 문제를 빠르게 나눌 수 있습니다.
고치는 순서는 렌더의 상태를 정한 다음 노드 흐름을 한 번만 맞추는 것입니다
첫째, 원본 렌더의 RGBA를 확인합니다. Maya, Blender, 3ds Max에서 투명 배경을 렌더했다면 RGB와 alpha가 함께 든 EXR을 받아 Nuke Read에서 확인합니다. Blender에서는 Render Properties의 Film 패널에 있는 Transparent를 켜 투명 배경을 만들 수 있습니다. 다만 DCC나 렌더러 이름만으로 straight와 premultiplied를 단정하지 마십시오. 같은 EXR이라도 출력 설정과 후처리 경로가 다를 수 있으므로 실제 픽셀과 합성 결과로 판정해야 합니다.
둘째, 입력이 premultiplied이고 색 보정이 필요하면 Read 뒤에 Unpremult를 놓습니다. 그 다음 Grade, ColorCorrect 등 RGB를 바꾸는 노드를 배치하고 마지막에 Nuke Premult 노드를 둡니다. 이후 Merge의 operation을 over로 두고 피사체를 A, 배경을 B에 연결합니다. 알파를 바꾸는 Roto나 Keyer가 중간에 있다면 최종 alpha가 정해진 뒤 Premult해야 합니다.
셋째, 색 보정 가지가 여러 개라면 각 가지에서 무심코 Premult를 반복하지 않았는지 확인합니다. Unpremult와 Premult는 보기 좋게 만드는 필터가 아닙니다. RGB를 알파로 나누고 다시 곱하는 상태 변환입니다. 이미 올바른 상태에 같은 변환을 한 번 더 적용하면 원래 문제를 재현할 수 있습니다.
텍스처의 경계색이 밉맵에서 섞이는 현상도 화면상 검은 띠와 닮았습니다. 특히 렌더 이전부터 표면 이음새가 거리별로 나타난다면 멀어질 때만 이음새가 보이는 패딩과 밉맵 문제의 진단이 더 가깝습니다. 반대로 경계는 맞는데 CG 전체가 실사 위에서 잘라 붙인 듯 뜬다면 가장자리 계산 뒤에 실사와 CG의 그레인 맞추기도 이어서 봐야 합니다.
노드 순서를 바로잡아도 남는 선은 같은 원인으로 밀어붙이면 안 됩니다
Unpremult → 보정 → Premult로 바꿨는데도 한쪽 방향에만 선이 남는다면 알파가 RGB 윤곽보다 안쪽에 있을 수 있습니다. 이 경우에는 매트 생성, 디포커스, 모션 블러, 리사이즈 과정 중 RGB와 alpha가 서로 다른 필터를 거쳤는지 추적해야 합니다. 알파가 실제로 잘린 상태라면 계산 순서가 잃어버린 윤곽을 되살리지는 못합니다.
또 하나는 렌더가 검은 배경의 색을 가장자리 RGB에 실제로 섞어 만든 경우입니다. 특히 반투명 재질이나 이미 배경과 합쳐진 소스는 단순한 나눗셈만으로 원래 전경색을 완전히 복원하기 어렵습니다. 이때는 원본을 투명 RGBA로 다시 출력하는 편이 우선입니다. Premultiplication 오류와 검은색 오염은 닮아 보이지만, 전자는 순서 문제이고 후자는 원본 픽셀에 다른 색이 들어간 문제입니다.
한 줄로 정리하면 알파를 깎기 전에 RGB가 알파에 곱해진 상태인지부터 확인해야 합니다
검은 테두리가 보이면 alpha를 줄이지 말고, premultiplied 입력은 Unpremult → 색 보정 → Premult → Merge 순서로 한 번만 처리하십시오.
vfx 잡학지식



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