[Unity] URP 셰이더 Gamma Correction

2023. 7. 11. 19:48Unity

728x90
반응형
 

[Unity] URP 셰이더 Gamma와 sRGB

sRGB 사진 텍스쳐는 sRGB를 켜고 Normal Map이나 Ambient Occlusion 텍스쳐 등 셰이더 계산에 사용되는 데이터 텍스쳐는 sRGB를 끈다. 감마 보정 채널당 8비트의 색 표현도 결국 밴딩 현상이 일어나지만 아주

lightbakery.tistory.com


 

 

이전 글에서도 Gamma에 대한 설명을 적었지만 더 쉽고 추가적 해석이 있어서 적어본다.

 

 

위의 사진을 보면 [Vector 3], [Color] 두 노드 각각 중간 값인 0.5의 회색을 나타낸다. 이 둘을 [Add] 노드로 더해보면 "0.5 + 0.5 = 1"의 값이 나오므로 흰색이 나올 것임을 예상할 수 있다. 하지만 아래쪽 [Color] 노드로 더한 값은 흰색이 나오지 않고 밝은 회색으로 나타났다.

 

 

[Preview] 노드로 살펴보면 각각의 회색이 밝기가 다른 것을 확연히 볼 수 있다.

 

 


 

 

위와 같은 결과가 나오는 이유는 사진이나 텍스트처럼 "컬러"라고 판단되는 이미지를 저장할 때 sRGB 공간이라는 밝은 영역으로 내부적으로 저장되는데 셰이더로 불러오는 과정에서 감마가 연산되어 원래 색이 화면에 나타나게 된다. 위에서 [Color]로 연산된 값은 sRGB로 밝게 처리하는 과정 없이 Gamma 공간에 있으므로 더 어두운 값이 나오게 된다.

 

 

여기서 [Color] 노드를 제대로 Linear 공간으로 만드려면 [Colorspace Conversion] 노드를 사용하면 된다.

"Linear" to "RGB"로 sRGB 변환하는 것처럼 색상을 밝게 올려버린다.

 

 


참고자료

 

대마왕의 유니티 URP 셰이더 그래프 스타트업

셰이더의 기본 개념에서부터 셰이더 그래프(노드)의 기본 활용법까지 소개하여, 다양하고 재미있는 셰이더를 만드는 방법을 알려준다. 또한, 자신이 원하는 효과를 만들기 위해 노드를 어떤 방

www.aladin.co.kr

728x90
반응형