개발이야기/Unreal Engine

감마 보정(Gamma Correction)과 sRGB에 대해서

Kim_Jack 2023. 5. 23. 09:57
반응형

감마 보정(Gamma Correction)과 sRGB에 대해

감마를 쉽게 이해하기 위해서 개념 하나를 알 필요가 있다.

 

베버의 법칙

인간은 자극이 없는 상황에서 추가된 새로운 자극에는 민감하게 반응하는 반면 (1)

기존에 자극이 있는 상태에서 추가된 새로운 자극에는 둔감하게 반응한다. (2)

1
2

 

감마(Gamma)

인간의 시각은 모든 밝기에 선형적으로 반응하는게 아니고 밝은 부분은 둔감하게,

어두운 영역은 민감하게 반응을 한다(베버의 법칙)

그래서 모니터는 이러한 인간의 감각에 맞추기로하여 ‘감마(Gamma)’라는 게 생김.

감마보정이 들어간 이미지는 밝기가 비선형적으로 나타난다.

앞서 말한 대로 인간은 어두운 영역은 민감하게 반응하기에 어두운 영역에서의 밝기는 부드럽게 밝아지지 않고 밴딩 현상이 도드라진다.

 

그래서 출력 커브를 아래로 늘어뜨림으로 밴딩 현상을 숨기는 것.

이게 감마보정(Gamma Correction)이다..

 

그럼 여기서 sRGB는 무엇인가?

sRGB는 감마보정이 내장된 색상공간을 의미함.

감마보정이 될 것을 감안하여 이미지가 밝게 저장된다.

그리고 이 이미지가 디스플레이에 그려질 때 감마보정을 통해서 정상적인 밝기로 그려지게 됨.

sRGB의 색상은 항상 감마곡선을 따라서 인코딩이 된다.

 

언리얼 엔진 텍스쳐 sRGB 옵션의 의미

언리얼 엔진의 텍스쳐 옵션중 sRGB는 감마보정 여부를 의미함.

sRGB를 체크하게 되면 감마보정이 들어가게 된다.

그러면 어떠한 경우에 sRGB를 체크하고 언체크를 해야 하는 것일까?

 

이미지(텍스쳐)의 RGB값을 혼합해 색을 표현해야 하는 텍스쳐인 경우에는 sRGB를 체크해야 한다.

위에 설명한 대로 감마보정을 통해 모니터에 정확한 색상을 표현해야 하기 때문이다.

Albedo , diffuse 같은 텍스쳐는 sRGB를 체크해야 함.

 

반면에 해당 RGB값들이 색 표현이 아닌 데이터로써 활용이 되는 경우에는 체크를 해지해야 한다.

Normal map, Ambient occlusion, roughness 같은 텍스쳐는 텍스쳐에 보이는 대로 색을 사용하는 게 아니고 각 채널에 저장된 데이터를 활용하는 것이기에 감마보정을 하지 않는 것.

 

 

해당 포스팅은 정종필님의 강의 영상을 참고하였습니다.

https://www.youtube.com/watch?v=Xwlm5V-bnBc 

 

반응형