위 글이 정석이라고 봐도 좋을 아티클이다.
요약하면 다음과 같다.
현재 많이 쓰이는 8비트로 색을 표시하는 방법으로는 우리 눈이 민감한 어두운 영역과 우리 눈이 둔감한 밝은 영역을 동일하게 표현하게 된다.
아까우므로 어두운 영역에 더 많은 색 영역을 표시하기 위해서 이미지파일은 1/gamma 를 제곱해서 색을 표현한다.
실제로 화면에 표시할 땐 이 보정치가 선형 공간으로 돌아와야 하므로 디스플레이는 gamma 를 제곱한 결과를 화면에 표시를 한다.
디스플레이의 gamma 는 사용자가 설정할 수 있으며 파일에 대해선 2.2 가 가장 많이 쓰인다.
gamma 보정이 들어간 이미지 파일에서는 쉐이더에서 계산한 결과가 왜곡된다.
위쪽으로 볼록한 형태의 그래프가 되기 때문에 어두운부분은 더 어두워지고 밝은 부분은 더 밝아지는 왜곡이 일어나는게 보통의 현상으로, 위 아티클의 예에서도 잘 드러난다.
이를 막기위해 주의해야할 부분은 소스를 들고올 때 선형공간으로 변환하는 것과 결과물을 내보낼 때 감마 보정을 해서 넣는 것이다.
첫번째 방법으로, 쉐이터 코드를 추가해서 이를 해결할 수 있다.
감마 보정된 공간에서 선형 공간으로 갈 땐 알파값을 제외한 색상값에 2.2를 제곱해주고, 화면에 띄우기 위한 결과값을 내보낼 때 1/2.2 를 제곱해준다. 이 경우 개인 디스플레이 환경에 영향을 많이 받는다.
다른 방법으로는, Direct X 에서는 DXGI_FORMAT_R8G8B8A8_UNORM_SRGB 로 백버퍼와 텍스쳐를 만들면 보통의 환경에선 자동으로 보정을 해준다. 개인 환경에 맞춰서 해주는지는 찾아봐야함.
댓글 없음:
댓글 쓰기