감마(Gamma) and 선형(Linear) Color Space 에 대해

디지털 이미지들은 Gamma Encoding이 되어서 저장되어 있다.

왜?
사람의 눈이 어두움에 훨씬 민감하다.
그래서 어두운 칼러에는 많은 비트 영역을 할 당하고, 빛의 변화가 있는 밝은 쪽은 조금 적은 비트를 할당하여 한정된 비트를 최대한 사용하여 사람 눈과 비슷하게 저장하는 Gamma Encoding을 한다.

이렇게 Gamma Encoding된 이미지들을 모니터에서 보여줄 때는 Video Card에서 Decoding해서 최종 보정된 이미지를 보여준다. Gamma가 적용된 이미지의 encoding/deconding 작업을 Gamma Correction이라고 부른다.
그리고 그 연산 시에 사용되는 Input 값의 지수값을 감마(Gamma)라고 부른다.

결국, 밝게 저장된 Gamma Encoding된 이미지를 모니터에서 Decoding해서 보여주게 되면 Gamma Correction이 발생하여 어두운 영역이 잘 살아 있는 우리 눈이 잘 보이는 것과 비슷한 이미지로 보여지게 되는 것이다.

반면 Linear Color Space는 Gamma Encoding을 사용하지 않는 Color Space다. 수학적으로 정확한 포멧이다.
따라서 Gamma Color Space와는 달리 쉐이더나 색 연산 시에 강점을 가진다.

유니티에서 제시한 장점은 두개이다.

쉐이더에서 빛의 Intensity를 강하게 올렸을 때, 하얗게 타버리는 정도가 감마 Space가 훨씬 더 빨리 발생한다. 아래 이미지 참고.
즉, Linear space가 강한 빛 아래서의 색 표현을 훨씬 풍부하게 할 수 있다.

둘째로, Linear space는 Color 데이터가 렌더 파이프라인을 탈 때 보정 연산이나 변환 연산들이 없다. 따라서 Gamma (midtone) 보상 연산을 거치는 Gamma Space보다 연산 오류나 정확도 면에서 더 나은 결과를 가져온다고 한다.

sRGB는 de-facto standard로 업계에 많이 쓰여지는 일종의 감마 색공간으로 감마값 2.2를 적용한 색공간이다. 따라서 encode/decode가 하드웨어서 공짜로 지원되는 색공간.
sRGB 형태로 저장된 이미지는 감마 0.45(1/2.2)가 적용된 채로 모니터에 보내지면, 자동으로 감마 2.2가 적용된 gamma correction 이 진행되어 되어 최종 화면에 보여준다.

(source link)

유니티(2018 버젼부터)는 Linear, Gamma 두 Color Space 모두 지원한다.
아트 작업은 sRBG 형태로 Gamma Space 에서 작업하고, 내부적으로 연산할 때만 Project Setting에서 linear space를 셋팅해 주면 작업적 면에서는 기존과 크게 달라지는 이슈는 없다. 

참고할 만한 reference:
https://www.cambridgeincolour.com/tutorials/gamma-correction.htm