Gamma Correction
- 일반적으로 Texture 데이터는 GammaEncode 되어서 저장되어 있으므로 Gamma Correction을 통해 Light 연산을 할 때에는
Linear Space로 변환을 하여 연산을 해주어야 GammaDecode 상태로 색상이 출력 될 수 있다.
Gamma Encode 하는 이유
- 인간의 눈은 어두운 곳의 변화에 민감하고, 밝은 곳의 변화에는 둔감한 특징이 있다. 따라서 어두운 곳의 해상도를 높이고자 비선형
함수를 사용하여 데이터를 저장한다.
Gamma Correction 방법
- 결과적으로 Gamma Encode된 Texture 데이터를 Linear Space로 변환. (pow(x, 2.2f))
- Linear Space에서 조명 연산과 Texture 혼합 연산.
- 최종 연산 결과를 다시 Gamma Encode 한다. (pow(x, 1/2.2f))
- 이후 모니터에 출력될 때 자동으로 Gamma Decode 된다.
Gamma Correction 주의점
- 모든 Texture가 모두 Gamma Correction이 필요한것은 아니다.
- Normal Map의 경우 선형 공간에서 출력해야 한다.
Gamma Correction 적용하지 않은 화면 출력.
Gamma Correction 적용된 화면 출력.
'DirectX 11' 카테고리의 다른 글
[DirectX 11] Skinning Mesh (0) | 2021.12.18 |
---|---|
[DirectX 11] Normal Mapping (0) | 2021.12.18 |
[DirectX 11] Deferred Rendering GBuffer (0) | 2021.12.14 |
[DirectX 11] Shadow Map (0) | 2021.12.14 |
[DirectX 11] Screen Space Ambient Occlusion (0) | 2021.12.14 |