Graphics Programming

HDR 렌더링 본문

Season 1/OpenGL

HDR 렌더링

minseoklee 2017. 5. 4. 19:23

HDR은 forward/deferred rendering에 무관하게 기존 렌더링 파이프라인에 쉽게 끼워넣을 수 있는 테크닉이다. 일반적인 모니터는 RGB 채널 별로 256가지 강도만 표현할 수 있고 OpenGL의 기본 프레임버퍼(default framebuffer)도 마찬가지다. 기본 프레임버퍼에 출력할 때 프래그먼트 셰이더의 출력은 0.0에서 1.0 사이로 clamping된다.


따라서 여러 광원으로부터 빛을 받아 최종 셰이딩 값이 1.0을 넘어서는 부분은 모두 똑같이 하얀색으로 보인다. HDR은 최종 셰이딩한 색상을 기본 프레임버퍼에 기록하는 대신, 별도로 생성된 고해상도 부동소수점 프레임버퍼에 기록한다. 이 부동소수점 텍스처를 소스로 사용하여, 톤 매핑(tone mapping)한 결과를 기본 프레임버퍼에 기록한다.


톤 매핑에는 정해진 공식이 없으며 [0.0, ∞]을 [0.0, 1.0]으로 매핑하는 아무 함수나 쓸 수 있다. 모니터가 0.0 ~ 1.0 사이의 값만 표현할 수 있기 때문에 0.0 ~ 1.0 사이의 값은 최대한 똑같게 유지하면서 1.0을 넘어서는 값들은 밝으면서도 이웃 값들과 구분이 되게 하는 것이 핵심이다.



노출(exposure) = 1.0




노출 = 5.0



Comments