EveryDay.DevUp

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

Unity

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

EveryDay.DevUp 2020. 5. 26. 23:11

[ ProjectSettings->Player->Other Settings-> Rendering-> Color Space ]

● Gamma ( 감마 보정, 감마 색 공간 )

: 선형적인 이미지의 색을 사람의 눈에 자연스럽게 모니터에 보일 수 있도록 이미지를 특정하게 수정하는 방법

※ 베버의 법칙

: 인간의 시각은 밝기에 대해 비선형적으로 반응하기 때문에 어두운 부분의 경우 밝기가 변할 때 부드럽게 느껴지지 않고 단절 되어 보이는 현상이 발생

: 왼쪽이 선형적인 그레디언트. 오른쪽이 인간의 시각으로 보았을 때의 그레디언트로, 왼쪽이 정상적으로 균일하게 색이 분할된 그레디언트이지만, 인간은 오른쪽의 그레디언드가 자연 스럽다고 생각함

▶ 감마 보정 방법

[ 선형적인 그레디언트 ]
[ Gamma 보정으로 색이 어둡게 보일 수 있도록 바꿈 - 이를 통해 인간의 눈이 색을 균일하게 인식할 수 있게 됨 ]
[ Gamma 보정으로 원래 색보다 어둡게 처리되기 때문에, 이미지 자체를 밝게 저장, SRGB ]
[ 밝게 저장한 출력 이미지를 감마 보정하여 선형적으로 변경하면 어두운 부분의 밀도가 높아지게 됨 ]
[ 감마 보정의 과정 ]

● Linear ( 선형 색 공간 )

: 감마 보정을 하지 않은 원본 이미지 ( 하지만 이미지는 저장 시 밝게 처리 됨, Unity에 이미지 임포트 시 sRPG를 체크함으로 써 선형 이미지를 사용할 수 있음 )

: 선형적인 처리가 감마 보정을 한 것보다 색을 정확하게 나타낼 수 있음

: 선형 색 공간을 사용하기 위한 제한 사항이 있기 때문에 감마 색 공간을 사용했었지만, 단말기 하드웨어 스펙의 상승으로 제한이 많이 없어짐

Android OpenGL 3.0 그래픽스 API , OS 4.3 이상

IOS Metal 그래픽스 API 필수


● Unity에서 Linear ( 선형 색 공간 ) 적용

[ Texture에 sRGB 체크가 되어있으면 밝게 저장된 이미지 ]
[ sRGB 체크를 해제한 경우 ]
[ sRGB를 체크한 경우 ]

: Unity에서는 밝게 저장된 이미지를 sRGB가 체크되어 있으면 정상적으로 모니터에 출력될 수 있도록 어둡게 처리함

( 감마일 경우에는 sRGB를 해제하거나 체크를 하여도 이미지에 변화가 없음, 리니어 일때만 위와 같은 변화가 생김 )

[ 두개의 이미지를 ADD 하는 경우 ]

: 감마 색 공간에서는 밝게 보정된 이미지 2개가 합쳐지면서 너무 밝게 이미지가 ADD 되는 경우가 발생

: 리니어 색공간에서는 어둡게 처리된 이미지 2개가 합쳐진 후 다시 밝게 이미지가 처리되었다가, 모니터에 출력될 때는 다시 어둡게 처리가 됨

● Unity에서 Linear ( 선형 색 공간 ) 사용 시 이슈 

▶ 이미지 텍스쳐는 sRGB, 데이터 텍스쳐는 sRGB를 체크 해제한 후 사용해야만 정상적인 동작이 가능함

: 데이터 텍스쳐에 sRGB 체크가 되어 있는 경우, 이미지를 다시 선형 영역으로 계산하는 문제가 발생하기 때문

ex) 0.5 회색 텍스쳐를 uv 좌표로 삼은 경우, 해당 이미지의 sRGB가 체크되면 Unity 내부적으로 텍스쳐를 어둡게 처리하면서 0.5->0.218로 변경 됨. 의도했던 값은 0.5이지만 실제 사용은 0.218을 하게 됨

▶ 라이트 맵을 감마 공간에서 베이크 한 뒤, 감마에서 리니어로 색 공간을 변경한 경우 라이트 맵을 다시 베이크 해야 함

: 라이트 맵은 항상 감마 공간에 저장되는데, 리니어 색 공간인 상태에서는 자동으로 라이트맵을 리니어 색 공간으로 변경하지만 감마 색 공간에서 베이크 했다면 리니어 색 공간으로 자동 변환되지 않기 때문

▶ 라이트 계산은 항상 리니어 색 공간에서 이루어 짐을 고려해야 함

: 감마 색 공간인 경우 밝은 이미지 x 리니어 색 공간의 라이트가 계산 되어 이미지의 품질이 떨어짐 

: 리니어 색 공간인 경우 밝은 이미지를 어둡게 처리한 후 리니어 색 공간의 라이트 계산을 함으로써 이미지의 품질이 좋음

참고 자료 : https://docs.unity3d.com/kr/2018.4/Manual/LinearRendering-LinearOrGammaWorkflow.html

 

리니어 워크플로 또는 감마 워크플로 - Unity 매뉴얼

Unity 에디터는 리니어 워크플로와 감마 워크플로를 모두 제공합니다. 리니어 워크플로에는 감마 색 공간에서 작성한 텍스처가 리니어 색 공간에서 올바르고 정확하게 렌더링 될 수 있는 색 공간

docs.unity3d.com

참고 자료 : https://www.youtube.com/watch?v=Xwlm5V-bnBc