sRGB와 Linear, 왜 같은 이미지가 다르게 보일까?

    sRGB 썸네일

    3D나 합성 작업을 하다 보면 누구나 한 번은 이런 순간을 만납니다. 마야에서 렌더한 이미지를 포토샵에서 열었더니 더 밝습니다. 누크에 불러왔더니 유난히 어둡고 대비가 강합니다. AI로 만든 이미지를 CG 배경에 올렸더니 혼자 붕 떠 보입니다.

    파일은 하나도 건드리지 않았는데 색이 달라집니다. 원인의 대부분은 딱 하나, sRGB와 Linear의 차이입니다. 이 개념만 제대로 잡으면 앞으로 만날 색 문제의 절반은 스스로 진단할 수 있게 됩니다.

    결론부터 세 줄로

    첫째, Linear는 빛의 양을 있는 그대로 적어둔 숫자입니다. 계산에 쓰는 값입니다.

    둘째, sRGB는 사람 눈과 모니터에 맞춰 살짝 구부려 저장한 숫자입니다. 보여주기 위한 값입니다.

    셋째, 색이 달라지는 건 파일이 변해서가 아니라 프로그램이 그 숫자를 어느 쪽으로 해석했느냐가 달라서입니다.

    사람 눈은 밝기를 정직하게 느끼지 못한다

    빛의 양이 두 배가 되면 우리 눈에도 두 배로 밝아 보일까요. 그렇지 않습니다.

    사람의 눈은 어두운 영역의 차이에는 아주 예민하고, 밝은 영역의 차이에는 둔감합니다. 캄캄한 방에서 촛불 하나를 켜면 세상이 달라 보이지만, 대낮에 형광등 하나를 더 켜면 거의 티가 나지 않는 것과 같습니다.

    그래서 8비트, 즉 0부터 255까지라는 좁은 그릇에 밝기를 담을 때 문제가 생깁니다. 눈이 둔감한 밝은 쪽에 숫자를 많이 배정하면 낭비입니다. 눈이 예민한 어두운 쪽에 숫자를 몰아주는 편이 훨씬 이득입니다.

    이 몰아주기를 하는 방식이 감마(Gamma)이고, 그 대표 규격이 sRGB입니다.

    sRGB, 사람 눈에 맞춰 구부린 저장 방식

    우리가 흔히 쓰는 JPG, PNG, 스마트폰 사진, 웹 이미지는 대부분 sRGB로 저장되어 있습니다.

    sRGB는 어두운 부분을 인위적으로 끌어올려 저장합니다. 숫자로 보면 훨씬 명확해집니다.

    실제 빛의 양 (Linear)sRGB로 저장된 값0~255 기준
    0.00.00
    0.2140.5128
    0.50.735188
    1.01.0255

    여기서 가장 중요한 줄은 두 번째입니다. 화면에서 중간 회색으로 보이는 128은 실제 빛으로 치면 50퍼센트가 아니라 약 21퍼센트에 불과합니다. 이 사실 하나가 앞으로 나올 모든 문제의 뿌리입니다.

    Linear, 빛을 계산하기 위한 방식

    렌더러는 빛을 물리적으로 계산합니다. 조명을 두 배로 키우면 픽셀 값도 정확히 두 배가 되어야 합니다. 그래야 반사, 굴절, 그림자, 블러가 현실과 같은 방식으로 계산됩니다.

    이렇게 빛의 양과 숫자가 정비례하는 상태를 Linear, 우리말로 선형이라고 부릅니다.

    간단한 예로 확인해 보겠습니다. 밝기 50퍼센트짜리 조명 두 개를 켜면 100퍼센트가 되어야 정상입니다. Linear에서 계산하면 0.5 더하기 0.5는 1.0이 되어 정확합니다. 반면 sRGB 값을 그대로 더하면 겉보기에는 1.0이 된 것 같지만, 실제 빛으로 환산하면 0.214 더하기 0.214, 즉 0.428밖에 되지 않습니다. 절반도 채우지 못하는 셈입니다.

    블러, 리사이즈, 알파 합성, 모션블러도 전부 같은 원리로 어긋납니다. 그래서 CG와 VFX는 계산은 반드시 Linear에서 하고, 보여줄 때만 sRGB로 변환하는 순서를 지킵니다. 이것이 흔히 말하는 Linear Workflow입니다.

    같은 이미지가 다르게 보이는 진짜 이유

    이미지 파일 안에는 그냥 숫자만 들어 있습니다. 그 숫자가 sRGB인지 Linear인지 파일 스스로 말해주지 않는 경우가 많습니다. 결국 읽는 프로그램이 나름대로 가정하게 되고, 거기서 어긋남이 생깁니다.

    이미지가 이상하게 밝고 뿌옇게 보인다면, Linear 데이터를 sRGB인 줄 알고 그대로 화면에 뿌린 상황입니다. 어두운 부분이 통째로 들려 올라가서 안개가 낀 것처럼 보입니다.

    반대로 이미지가 유난히 어둡고 대비가 강하다면, sRGB 이미지를 Linear로 착각하고 감마를 한 번 더 벗겨낸 상황입니다. 그림자 디테일이 새까맣게 뭉개집니다.

    즉 색이 변한 것이 아니라 해석이 어긋난 것입니다. 파일 자체에는 아무 문제가 없습니다.

    실무에서 이 문제가 터지는 세 가지 지점

    텍스처를 불러올 때

    컬러 텍스처인 디퓨즈나 알베도는 sRGB로 읽어야 합니다. 반면 노멀맵, 러프니스, 메탈릭, 마스크는 Raw, 즉 Linear로 읽어야 합니다.

    컬러가 아닌 맵은 보여주기 위한 그림이 아니라 숫자 데이터이기 때문입니다. 여기에 감마를 씌우면 표면 재질 계산이 통째로 틀어집니다.

    렌더 결과를 저장할 때

    EXR은 Linear 값을 그대로 담는 그릇이라 후반 작업에 적합합니다. PNG와 JPG는 sRGB로 변환해서 담는 그릇이라 최종 확인용에 적합합니다.

    EXR을 일반 뷰어로 열었을 때 어둡거나 이상하게 보이는 것은 정상입니다. 파일이 망가진 것이 아닙니다.

    AI 이미지나 실사 소스를 합성할 때

    AI가 만든 이미지와 인터넷에서 받은 사진은 거의 모두 sRGB입니다. 이것을 Linear 상태의 CG 렌더 위에 변환 없이 얹으면 밝기 곡선이 서로 달라 그림자와 하이라이트가 미묘하게 맞지 않습니다. 왜인지 모르게 붕 떠 보이는 합성의 정체가 바로 이것입니다.

    색이 이상할 때 확인하는 체크리스트

    1. 이 이미지의 원래 색공간은 sRGB인가, Linear인가.
    2. 지금 이 프로그램은 그것을 무엇으로 가정하고 읽었는가.
    3. 화면에 보여주는 단계에서 변환이 한 번만 적용되었는가. 두 번 적용되는 실수가 가장 흔합니다.
    4. 컬러가 아닌 맵에 실수로 sRGB를 걸어두지는 않았는가.
    5. 저장 포맷이 작업 목적에 맞는가. 중간 작업은 EXR, 최종 결과는 PNG입니다.

    이 다섯 가지만 순서대로 확인해도 색 문제 대부분은 원인이 잡힙니다.

    자주 묻는 질문

    감마 2.2와 sRGB는 같은 것인가요

    거의 비슷하지만 완전히 같지는 않습니다. sRGB는 아주 어두운 구간에서만 직선 구간을 따로 사용하기 때문에 검은색 근처에서 미세한 차이가 생깁니다. 일상적인 작업에서는 비슷하게 취급해도 되지만, 어두운 영역을 크게 끌어올리는 작업에서는 차이가 드러납니다.

    그냥 눈으로 보기 좋게 맞추면 안 되나요

    결과 이미지를 하나만 만들 때는 가능합니다. 하지만 여러 소스를 합치거나 조명을 다시 계산해야 하는 순간부터는 반드시 어긋납니다. 감으로 맞춘 색은 재현이 되지 않기 때문입니다.

    포토샵에서 작업해도 되나요

    가능합니다. 다만 32비트 모드가 아니면 대부분 sRGB 기준으로 계산되기 때문에, 빛을 다루는 합성은 EXR과 Linear를 지원하는 도구가 훨씬 안전합니다.

    정리하며

    Linear는 계산을 위한 값이고 sRGB는 표시를 위한 값입니다. 색이 달라지는 것은 파일 때문이 아니라 해석이 어긋났기 때문입니다. 순서는 언제나 하나입니다. Linear로 계산하고 마지막에 sRGB로 보여준다는 것입니다.

    이 개념이 잡히면 다음 단계가 훨씬 쉬워집니다. 이어지는 글에서는 감마 2.2가 정확히 어떤 방식으로 이미지를 바꾸는지, 그리고 Linear Workflow를 실제 작업에 어떻게 적용하는지를 예제와 함께 다루겠습니다.

    지금 색이 어긋난 이미지 때문에 고생하고 있다면 위 체크리스트를 첫 번째 항목부터 하나씩 확인해 보시기 바랍니다. 대부분 세 번째 항목에서 원인이 잡힙니다.

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다