WinCNT

Gamma Correction 본문

게임 프로그래밍(학습 내용 정리)/게임 수학

Gamma Correction

WinCNT_SSS 2022. 5. 10. 14:39

원리는 어렵지만 구현은 코드 2줄(...)이다

영화 산업에서는 이미 오래 전(!!)부터 Gamma Corretion은 사용되고 있었다

 

 

0 ~ 255의 중간은? 아쉽게도 127이 아니다!!

모든 광학 기기들(모니터, 스마트폰 등등)은 선형으로 보간하지 않는다

Gamma Cureve란 무엇인가?

모든 Display는 Gamma Decode를 하고 있다

따라서 Gamma Decode의 역함수인 "Gamma Encode"를 해줘야 한다

 

하드 디스크에 저장하는 이미지는 내부적으로

Gamma Encoding을 시킨 이미지가 저장된다!!

 

왜 Gamma Encode를 하는가?

Gamma 비선형 함수

애플 모니터의 경우에는 2.0을 사용한다

그래서 뭐가 문제인가?

연산을 다른 공간에서 하고 있으니 평범하게 조명 연산을 하면 제대로 나오지 않는다!!

따라서 조명 연산을 제대로 하기 위해서는 같은 공간에서 연산하도록 해야 한다

 

 

 

예시 코드

 

비교 샷

 

 

 

Gamma Correction은 어디에 적용하나?

아트가 수동으로 작성하는 리소스(Diffuse)는 보통 Gamma Correction을 적용하고

알고리즘에 의해 작성되는 리소스(Normal Map)에는 일반적으로 적용하지 않는다

(Mask는 수동, Occlusion는 자동이지만 적용 여부는 선택할 수 있음)

 

sRGB

데이터를 Gamma Correction을 적용하지 않고 선형으로 적용한 특별한 텍스처

이러한 텍스처는 오히려 Gamma Correction를 적용하면 반대로 깨진다

 

SSS

'게임 프로그래밍(학습 내용 정리) > 게임 수학' 카테고리의 다른 글

VRAM과 PCI express  (0) 2022.06.07
Tonemaping  (0) 2022.05.10
Matcap Texture  (0) 2022.04.05
법선 매핑(Normal Mapping)  (0) 2022.03.22
셰이더  (0) 2022.03.08