최대 1 분 소요

HDRI 1 (High Dynamic Range Image)

Image

넓은 명암 범위를 가진 이미지 라는 뜻

  • 일반적인 사진, 텍스쳐는 LDR (Low Dynamic Range)라 하여
    픽셀의 밝기가 0~255(8bit) 범위에서 제한됨
    • 그러나 태양빛과 그림자 등의 밝기 차이는 그것보다 더욱 차이남
  • 그렇기에 넓은 밝기 범위를 가진 이미지 포맷이 필요
    HDRI의 등장
    • 픽셀의 값이 정규화된 float 형태로 저장됨
      (0.0 ~ 10000.0)
  • HDRI는 주로 라이팅과 환경 반사 용도로 사용
    (SkyBox/Sphere , IBL(Image Based Lighting), Reflection Probe 등)

예제 - HDRI 사용 준비

Image

포맷팅 변경

  • 기존 텍스쳐를 읽을때 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비트 단위의 포인터로 캐스팅하는 방식)

댓글남기기