본문 바로가기
Unity

[유니티] sRGB, Linear, Gamma

by 소리쿤 2022. 7. 20.

https://rito15.github.io/posts/unity-srgb-linear-gamma-color-space/

 

유니티 - sRGB, Linear, Gamma 컬러 스페이스

모니터의 색상 변환 모니터는 디스크에 저장된 이미지를 화면에 출력할 때 Pow(color, 2.2) 연산을 적용해서 더 어둡게 출력한다.

rito15.github.io

https://everyday-devup.tistory.com/60

 

[Unity] Gamma ( 감마 보정, 감마 색 공간 ) vs Linear ( 선형 색 공간 )

● Gamma ( 감마 보정, 감마 색 공간 ) : 선형적인 이미지의 색을 사람의 눈에 자연스럽게 모니터에 보일 수 있도록 이미지를 특정하게 수정하는 방법 ※ 베버의 법칙 : 인간의 시각은 밝기에 대해

everyday-devup.tistory.com


  • 모니터는 디스크에 저장된 이미지를 화면에 출력할 때 Pow(color, 2.2) 연산을 적용해서 더 어둡게 출력한다.

이유)

  • 베버의 법칙(Weber’s law)
  • 사람의 눈이 밝기 변화를 선형적으로 느끼지 못하기 때문에, 어두운 부분은 좀만 밝은 곳과 대비되어도 화질이 떨어져 보임.
  • 그 정도는 밝아질 수록 점점 덜해지기 때문에, 2.2 정도 제곱하여 보정

이러한 모니터의 색상 변환 때문에,

이미지를 저장할 때 미리 pow(color, 1/2.2) 수식을 적용하여 보정하여 저장하는 것을 '감마 보정' 이라고 함

 

그리고 이 '감마 보정'을 적용한 이미지의 '색 공간'을 sRGB라고 함

현재 색 공간 국제 표준으로 사용되고 있다고 한다.

 

유니티 내에서 색 공간 파이프라이닝 방법을 설정할 수 있는데,

 

Gamma, Linear 두 가지가 있다.

 

간단하게 정리하면,

 

1. Gamma는 sRGB 공간에 있는 색을 그대로 가져다가, 그대로 셰이더에 던져넣는 방식

(sRGB된 텍스처인지 실제로 체크하진 않음)

2. Linear는 sRGB 공간에 있는 색을 원래대로 되돌리고, 셰이더에 던진 후 총 결과를 다시 sRGB로 돌려 놓는 방식

(체크함)

 

결과적으로 모니터에 가기 전에 감마 보정이 되어있는 상태인 것은 같은데,

셰이더에 들어갈 때 다르다.

 

Linear같은 경우 셰이더에 들어가기 전에 텍스쳐(이미지)를 원본 상태로 돌려놓고, 끝나면 같이 sRGB로 바꾸기 때문에

텍스쳐를 사용하지 않는 셰이더 연산(라이팅 등)이 사용하는 연산들과 항상 같은 결과를 낳는다.

 

하지만 Gamma의 경우는 그렇지 않다.

텍스쳐를 사용하지 않는 셰이더 연산은 Linear처럼 연산된 후 sRGB를 거치기 때문에 좀 어두워지고,

사용하는 경우만 정상 상태가 된다.

 

아무튼 결론은

Gamma

 

장점)

1. 라이팅 시 대비가 강하기 때문에 있어보임

2. sRGB를 원본으로 돌리는 연산이 없음

 

단점)

1. 텍스처 연산과 비연산의 불일치

2. 대비가 강해서 연속 음영에서 화질이 낮아보임

 

Linear

장점)

1. 텍스처 연산과 비연산의 일치

2. 원본과 가까워 품질이 우수함

 

단점)

1. sRGB를 원본으로 돌리는 연산이 있음 (큰 차이는 없다고 함)

2. 텍스처의 토글을 관리해줘야 함, 있으면 감마 보정을 뺴고, 없으면 안 빼기 때문에...

자칫 오히려 의도가 다른 결과가 나올 수 있음