HDR이란 명암의 범위를 넓혀 빛을 더욱 섬세하게 묘사할 수 있도록 도와주는 후처리 기법이다.

HDR을 적용하지 않은 일반적인 렌더링 방식은 SDR(Standard Dynamic Range)이라고 한다.

 

먼저, SDR과 HDR의 차이를 알아보자.

 

 

좌측의 사진이 SDR 범위에서 렌더링한 결과이고, 우측의 사진이 HDR범위에서 렌더링한 사진이다.

SDR은 전체적으로 어두운 느낌이 강하고, 명암이 분명하지 않아 경계면이 다소 흐릿하게 보여진다.

반면 HDR은 전체적으로 색감이 밝고 선명해진 느낌이 강하게 든다.

 

즉, HDR이란 이렇게 명암을 더욱 강조하여 이미지를 선명하게 만들어 주는 기법인 것이다.

 

 

그렇다면, SDR이랑 HDR이 정확히 뭘까?

 

일반적인 색상은 0~255사이의 RGB값으로 표현이 된다. 그리고, 쉐이더에서는 그 값을 정규화하여 0~1사이의 값으로 표현이 되고 있다. 그 이유는 색상 채널당 8비트를 할당하기 때문이다. 

 

모든 색상, 빛의 계산은 0~1 사이에서 이루어 진다는 것이다. 이게 SDR이다.

Standard Dynamic Range라고 해서, 일반적으로 사용하는 색상의 범위를 SDR이라고 하는 것이다.

 

하지만, 이런 경우 표현할 수 없는 것들이 존재한다. 예를 들어, 빛을 더하고 계산했는데 1.3이 나온다면?

이 값은 그냥 1로 깎여버린다. 

 

빛을 계산을 해보니, 빛의 범위가 0.1~ 2.1까지 나왔다고 하더라도, 0.1 ~ 1.0까지밖에 사용을 못하게 되고, 1.0을 초과하는 픽셀은 모두 동일한 흰색으로 표현이 되기 때문에 이미지가 아주 이상하게 출력될 것이다.

 

이러한 문제를 해결하기 위해 나타난 것이 HDR이다.

렌더타겟에서 HDR은 사용하는 채널의 범위를 8비트가 아닌 16비트나 32비트로 높혀서 사용한다.

그렇게 되면 빛을 계산한 결과가 1.0을 초과하더라도 잘리지 않는다.

 

HDR이란, 채널당 사용하는 색상의 범위를 넓혀서  SDR로는 표현할 수 없었던 빛을 표현하는 기법인 것이다.

 

하지만, 색상의 범위만 넓힌다고 해서 모든게 해결되지는 않는다.

왜냐하면? 쉐이더에서 어떤 색상이 나오든 결국 모니터는 그 것을 표현할 수 없다.

모니터는 0~1까지의 색상까지밖에 표현하지 못한다.

 

그렇기 때문에, HDR범위에서 0~1을 넘는 범위에서 표현된 색상을 0~1범위로 축소하는 과정이 필요한데, 이 것이 톤매핑이다.

 

 

톤매핑


 

이 그림을 보자.

빛을 계산했더니, 위와 같이 3개의 색상이 나왔다고 가정해보자.

하지만, SDR범위에서라면 1을 초과하는 값은 모두 깎여나가기 때문에 보라색 점은 1.0의 값으로 깎인 채로 렌더링 될 것이고, 파란색과 주황색은 기존의 색상대로 렌더링될 것이다.

주황색 점과 보라색 점은 분명 밝기에 차이가 있음에도 불구하고 동일한 밝기로 출력되는 것이다.

 

하지만, HDR 톤매핑을 활용하면 색을 0~1범위로 압축하여 3개의 점을 모두 구분할 수 밝기로 렌더링 해주는 것이다.

 

톤매핑을 사용해서 압축하게 되면, 0~1을 초과하는 범위를 0~1로 집어 넣었기 빛의 분포가 더욱 촘촘해지게 된다.

또한, 1.0을 초과하는 색상 사이에서도 명암을 구분할 수 있게 된다.

 

톤매핑이 실제로 위 사진처럼 단순하게 압축해주는 것은 아니다. 사용하는 공식에 따라 다르게 압축된다.

 

본인이 위의 게임에 사용한 공식은

ACES Flimic Curve를 사용하였다.

 

공식은 아래와 같이 간단하다.

HDR범위에서 그래픽 연산을 모두 마친 후, 아래의 공식을 이용해 압축해주면 된다.

float3 ACESFilm(float3 _RGB)
{
    float a = 2.51f;
    float b = 0.03f;
    float c = 2.43f;
    float d = 0.59f;
    float e = 0.14f;
    return saturate((_RGB * (a * _RGB + b))/(_RGB * (c * _RGB + d) + e));
}

 

톤매핑 공식은 여러가지가 있고, 어떤 것을 사용하느냐에 따라 느낌이 달라지기 때문에 여러 공식을 적용해보며 비교하는 것이 좋을 것이다.

+ Recent posts