부드러운 그라데이션이 깨지는 이유: Bit Depth와 Dithering
노을 하늘이나 스튜디오 배경처럼 부드럽게 이어져야 할 그라데이션에 비트 뎁스가 부족하면 계단 같은 얼룩, 즉 밴딩 현상이 생기고 이때 디더링이 해결사 역할을 합니다. 오늘은 이 두 개념을 실무 관점에서 차근차근 풀어보겠습니다.
그라데이션이 계단처럼 깨지는 수학적 이유
먼저 밴딩이 왜 생기는지부터 짚고 가겠습니다. 8비트 이미지는 채널당 밝기 값을 0~255, 딱 256단계로만 표현할 수 있어요. 마치 계단을 256칸으로만 만들어놓고 그 위로 아주 완만한 경사로를 얹으려는 것과 비슷합니다. 경사가 완만할수록 한 계단(같은 픽셀값)이 옆으로 넓게 퍼지게 되죠.
예를 들어 하늘이 화면 가로 2000픽셀에 걸쳐 밝기 값이 50에서 100까지만 변한다고 해봅시다. 실제로 쓸 수 있는 단계는 50단계뿐인데 이걸 2000픽셀에 나눠 칠해야 하니, 평균적으로 40픽셀마다 같은 값이 반복됩니다. 이 “같은 값이 넓게 이어지는 구간”의 경계가 사람 눈에 뚜렷한 선으로 인식되는 것이 바로 밴딩입니다. 수학적으로는 원래 연속적인(아날로그적인) 밝기 함수를 정수 단위로 반올림(양자화, quantization)하면서 생기는 어쩔 수 없는 오차인 셈이에요.
화면 크기와 시청 거리에 따라 밴딩이 더 잘 보이는 이유
같은 소스라도 어떤 모니터에서는 밴딩이 안 보이는데 큰 화면이나 프로젝터로 보면 갑자기 계단이 선명하게 드러나는 경험, 다들 있으실 겁니다. 이유는 단순해요. 화면이 커지면 같은 색 단계가 차지하는 물리적인 면적(밀리미터 단위)도 함께 커지기 때문에, 계단 하나하나의 경계선이 눈의 해상 능력 안으로 들어오게 됩니다.
반대로 스마트폰처럼 작은 화면에서 멀리 보면 픽셀 밀도가 높아 같은 밴딩도 뭉개져 보이지 않을 수 있어요. 그래서 극장 스크린이나 대형 사이니지용 작업은 모니터 프리뷰만 믿지 말고, 실제 상영 조건과 최대한 비슷한 환경에서 밴딩을 점검하는 습관이 중요합니다. HDR 콘텐츠는 밝기 범위 자체가 넓어지기 때문에 같은 8비트라도 밴딩이 훨씬 잘 드러난다는 점도 함께 기억해두시면 좋습니다.
비트 뎁스를 올리면 왜 해결되는가 (10비트, 16비트의 힘)
답은 간단합니다. 계단 수를 늘리면 되거든요. 8비트가 256단계라면 10비트는 1,024단계, 16비트(정수)는 65,536단계, 그리고 컴포지팅에서 흔히 쓰는 32비트 부동소수점(float)은 사실상 단계 제한이 없다고 봐도 될 만큼 촘촘합니다.
같은 하늘 그라데이션이라도 1,024단계로 나누면 계단 하나의 폭이 8비트보다 4배 얇아지고, 그만큼 눈에 걸리는 경계선도 옅어집니다. 그래서 렌더링과 컴포지팅 파이프라인에서는 최종 딜리버리 전까지는 최대한 높은 비트 뎁스(예: EXR 16비트 half float, 32비트 float)로 작업하다가 마지막 단계에서만 8비트로 내리는 것이 정석입니다.
| 비트 뎁스 | 채널당 표현 단계 | 대표 포맷/용도 |
|---|---|---|
| 8bit | 256단계 | JPEG, 웹 이미지, 최종 딜리버리용 |
| 10bit | 1,024단계 | 방송/HDR 마스터, 일부 코덱 |
| 12bit | 4,096단계 | 디지털 시네마 카메라 원본 |
| 16bit (정수) | 65,536단계 | TIFF, 중간 합성 결과물 |
| 16bit half float / 32bit float | 사실상 무제한(연속에 가까움) | EXR, 렌더 패스, 컴포지팅 작업본 |
디더링의 원리: 미세한 노이즈로 눈을 속이는 기술
비트 뎁스를 계속 높게 유지할 수 없는 순간, 즉 최종적으로 8비트로 내보내야 하는 순간이 옵니다. 이때 등장하는 것이 디더링(dithering)입니다. 원리는 의외로 소박해요. 계단 경계에 아주 미세한 노이즈를 일부러 뿌려서, 원래는 딱 잘라 나뉘던 값의 경계를 흐트러뜨리는 겁니다.
예를 들어 51과 52 사이의 실제값이 51.5였다고 하면, 디더링이 없으면 그냥 반올림해서 넓은 영역이 51로 뭉쳐버립니다. 하지만 디더를 걸면 픽셀마다 아주 조금씩 다른 미세한 값을 더하거나 빼서 어떤 픽셀은 51로, 어떤 픽셀은 52로 떨어지게 만들어요. 결과적으로 51과 52가 자잘하게 섞여서 찍히는데, 우리 눈은 이 미세한 노이즈 패턴을 거리를 두고 보면 평균 51.5에 가까운 부드러운 회색으로 인식합니다. 즉 해상도의 한계를 착시로 메우는 기법인 셈이죠.
디더링의 종류: 랜덤 노이즈부터 에러 디퓨전까지
디더링에도 몇 가지 방식이 있고, 각각 특성이 다릅니다.
- 랜덤 노이즈(Random/White Noise Dithering): 픽셀마다 순수하게 무작위인 미세 값을 더하는 가장 단순한 방식입니다. 구현이 쉽지만 노이즈 자체가 약간 지저분해 보일 수 있어요.
- 오더드 디더(Ordered Dithering, 베이어 패턴): 미리 정해진 규칙적인 격자 패턴(베이어 매트릭스)을 이용해 값을 배분하는 방식입니다. 계산이 빠르고 패턴이 일정해서 실시간 렌더링이나 게임 엔진에서 즐겨 쓰이지만, 자세히 보면 격자 무늬가 살짝 보일 수 있습니다.
- 에러 디퓨전(Error Diffusion, 대표적으로 플로이드-스타인버그 Floyd-Steinberg): 한 픽셀을 반올림할 때 생긴 오차(반올림하며 버려진 값)를 옆 픽셀들로 나눠서 넘겨주는 방식입니다. 오차가 누적되지 않고 이웃으로 퍼지기 때문에 시각적으로 가장 자연스럽고 균일한 결과를 만들어서, 정지 이미지 품질을 중요하게 보는 작업에서 선호됩니다.
| 디더링 방식 | 원리 요약 | 장점 | 단점 |
|---|---|---|---|
| 랜덤 노이즈 | 픽셀마다 무작위 값 추가 | 구현 간단, 패턴 없음 | 다소 지저분한 노이즈감 |
| 오더드(베이어) | 고정 격자 패턴으로 값 분배 | 연산 빠름, 실시간 적합 | 격자 패턴이 보일 수 있음 |
| 에러 디퓨전(플로이드-스타인버그) | 반올림 오차를 인접 픽셀로 전파 | 가장 자연스럽고 균일 | 연산량 다소 높음, 방향성 패턴 가능 |
실무 적용: 렌더러·컴포지팅 툴의 디더 옵션과 적용 순서
실무에서 중요한 건 디더를 “언제” 적용하느냐입니다. 원칙은 하나예요. 작업은 최대한 높은 비트 뎁스로 하다가, 8비트(또는 그 이하)로 최종 변환하는 바로 그 순간에만 디더를 켠다는 것입니다.
일반적인 순서는 이렇습니다.
- 렌더링, 컬러그레이딩, 컴포지팅은 16비트 float 또는 32비트 float(EXR 등)로 진행
- 모든 색보정, 합성, LUT 적용을 끝낸 뒤
- 최종 딜리버리 포맷(예: 8비트 ProRes, H.264, JPEG)으로 컨버전하는 단계에서 디더 적용
- 인코더나 컴포지팅 툴의 출력 설정에서 dithering을 활성화
Nuke, After Effects, Resolve, Flame 같은 툴들은 대부분 write 노드나 딥 컬러 출력 옵션에 디더 체크박스나 “Add Grain/Dither” 항목을 두고 있습니다. 중간 작업 단계에서 미리 디더를 걸어버리면, 그 위에 또 색보정이나 합성을 얹을 때 디더 노이즈가 왜곡되거나 오히려 새로운 밴딩을 만들 수 있으니 순서를 지키는 게 중요합니다.
영상에서는 노이즈와 그레인이 자연스러운 디더 역할을 한다
정지 이미지와 달리 영상, 특히 필름 그레인이 살아있는 소스나 카메라 센서 노이즈가 섞인 원본은 사실 그 자체로 일종의 디더링 효과를 이미 갖고 있습니다. 프레임마다 그레인 패턴이 미세하게 달라지면서 같은 위치의 픽셀값이 계속 흔들리기 때문에, 시간축으로 평균을 내는 우리 눈에는 매끄러운 그라데이션처럼 인식되는 것이죠.
그래서 디지털로 완전히 깨끗하게 렌더링된 CG 배경이나 그래픽 소스일수록 밴딩이 더 도드라지고, 반대로 그레인을 약간 얹어주는 것만으로도 밴딩이 시각적으로 완화되는 경우가 많습니다. 실제로 컴포지터들이 CG 하늘이나 매트 페인팅에 미세한 그레인을 얹는 이유 중 하나가 바로 이 자연스러운 디더 효과 때문입니다.
과한 디더의 부작용과 균형 잡기
디더가 좋다고 무조건 세게 걸면 안 됩니다. 디더 강도가 지나치면 이미지 전체가 지글거리는 노이즈로 뒤덮여서 오히려 화질이 떨어져 보이고, 압축 코덱(H.264 등)에서는 이 미세 노이즈가 압축 효율을 크게 떨어뜨려 파일 용량이 커지거나 블록 노이즈가 늘어나는 부작용도 있습니다. 또한 이미 노이즈가 많은 소스에 디더까지 중복으로 걸면 불필요하게 노이즈가 배가되기도 해요.
그러니 디더는 “밴딩이 보이는 최소한의 강도”로만 적용하는 것이 원칙이고, 최종 출력물을 실제 상영 환경(큰 화면, 어두운 극장 등)에서 반드시 눈으로 확인하는 과정이 필요합니다.
실무 워크플로 한눈에 정리
마지막으로 현장에서 바로 써먹을 수 있도록 체크리스트 형태로 정리해봅니다.
- 렌더 패스와 중간 합성 결과물은 항상 16bit half float 이상(EXR 권장)으로 보관
- 컬러그레이딩, LUT 적용, 합성은 전부 고비트 뎁스 상태에서 마무리
- 최종 8비트 딜리버리 직전, 인코더/렌더러의 디더 옵션을 확인하고 활성화
- 가능하면 에러 디퓨전(플로이드-스타인버그) 방식을 우선 검토, 실시간성이 중요하면 오더드 디더 고려
- 큰 화면·프로젝터 등 실제 상영 환경에서 밴딩 유무를 반드시 재점검
- CG 소스에는 자연스러운 그레인을 소량 얹어 디더 효과를 겸하는 것도 좋은 방법
- 디더는 과유불급, 필요한 최소 강도만 적용
자주 묻는 질문(FAQ)
Q1. 8비트로만 작업해도 밴딩이 안 생기게 할 수 있나요? 완전히 없애기는 어렵지만 최소화는 가능합니다. 그라데이션이 급격하지 않은 장면이라면 8비트로도 크게 문제되지 않을 수 있고, 최종 출력 단계에서 디더링을 적절히 적용하면 시각적으로 밴딩이 거의 안 보이는 수준까지 완화할 수 있습니다. 다만 색보정 폭이 크거나 HDR 소스라면 애초에 10비트 이상으로 작업하는 것이 안전합니다.
Q2. 오더드 디더와 에러 디퓨전 중 뭘 써야 하나요? 정지 이미지나 최종 프리렌더 딜리버리처럼 품질이 최우선이라면 플로이드-스타인버그 같은 에러 디퓨전이 더 자연스러운 결과를 줍니다. 반면 게임 엔진이나 실시간 렌더링처럼 연산 속도가 중요한 환경에서는 오더드(베이어) 디더가 더 실용적인 선택입니다.
Q3. 그레인을 얹으면 디더링을 따로 안 해도 되나요? 그레인이 충분히 강하고 프레임마다 랜덤하게 변한다면 어느 정도 디더 역할을 대신해줄 수 있습니다. 하지만 그레인의 목적은 어디까지나 룩(look)을 위한 것이라 밴딩 방지를 완전히 보장하지는 않으므로, 밴딩이 우려되는 장면에서는 최종 출력 단계의 디더 옵션도 함께 확인하는 것이 안전합니다.
vfx 잡학지식



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