HDRI 1
HDRI 1 (High Dynamic Range Image)
넓은 명암 범위를 가진 이미지 라는 뜻
- 일반적인 사진, 텍스쳐는 LDR (Low Dynamic Range)라 하여
픽셀의 밝기가 0~255(8bit) 범위에서 제한됨
- 그러나 태양빛과 그림자 등의 밝기 차이는 그것보다 더욱 차이남
- 그러나 태양빛과 그림자 등의 밝기 차이는 그것보다 더욱 차이남
-
- 그렇기에 넓은 밝기 범위를 가진
이미지 포맷이 필요 - HDRI의 등장
- 픽셀의 값이 정규화된 float 형태로 저장됨
(0.0 ~ 10000.0)
- 그렇기에 넓은 밝기 범위를 가진
- HDRI는 주로 라이팅과 환경 반사 용도로 사용
(SkyBox/Sphere , IBL(Image Based Lighting), Reflection Probe 등)
예제 - HDRI 사용 준비
포맷팅 변경
-
기존 텍스쳐를 읽을때 DXGI_FORMAT_R8G8B8A8_UNORM 같은 32bit 포맷팅을 사용
(각 표현의 한계는 8비트)
(또한 UNORM으로 0~1로 정규화한 값을 사용) -
HDRI를 기반으로 렌더링할때는
DXGI_FORMAT_R16G16B16A16_FLOAT 를 사용
(각 표현의 한계를 16비트로 늘려 기본보다 2^8 = 256배 늘어난 표현 가능)
(또한 정규화하지 않았기에 더 세부적인 표현 가능)
vcpkg로 추가 설치
설치된 vcpkg 경로에
vcpkg install directxtex[openexr]:x64-windows // exr 확장자를 열기 위함 (HDRI에 자주 사용,텍스처 데이터 처리 전용 라이브러리 - MS 제공)
vcpkg install fp16:x64-windows // Half-Precision Floating Point (16비트 부동소수점) 연산 라이브러리
각각의 vcpkg를 설치
-
GPU에서 16비트 짜리 float가 좀 더 최적화가 잘된다는 말이 존재
(AI, 네트워크 프로그래밍에서도 고려) -
다만 메모리 구조도가 다르기에(+ C++에서 기본 지원 x)
fp16 같은 별도의 라이브러리를 사용
(uint16_t 같은 16비트 단위의 포인터로 캐스팅하는 방식)
댓글남기기