Appearance
HDR 렌더링(9)~HDR 텍스처
[칼럼 핵심 요약]
HDR 텍스처도 DirectX 9세대/SM3.0 대응 이후의 GPU라면 보통 부동소수점(Floating-Point) 텍스처를 활용하면 문제는 없다. DirectX 10세대/SM4.0 대응 GPU가 아니면 FP32-128 비트 텍스처에의 필터링은 할 수 없지만, 일반적인 3D 그래픽스의 렌더링으로 지금까지의 HDR 텍스처를 필요로 하는 국면은 적을 것이다.🌐 원문 링크: HDRレンダリング(9)~HDRテクスチャ (Mynavi News)
📅 원문 발행일: 2009-02-07 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)
NOTE
💡 현대 그래픽스 관점에서의 발전사 (Modern Retrospective)
- HDR 디스플레이 하드웨어 보급: 본문 연재 당시(2008~2009년)에는 SDR 모니터 출력을 위해 FP16 버퍼를 톤 매핑하는 것이 목적이었으나, 현재는 1000nit 이상의 OLED/Mini-LED HDR 디스플레이가 대중화되어 ACES(Academy Color Encoding System) 기반의 광색역 HDR10 출력이 표준화되었습니다.
- 노출 적응 및 물리 기반 카메라: 현대 게임 엔진은 실제 카메라의 셔터 스피드, 조리개(f-stop), ISO 감도를 그대로 모사하는 물리 기반 노출(Physical Camera Exposure) 모델을 사용합니다.
📖 본문 해설
[원문 리드문] > HDR 텍스처도 DirectX 9세대/SM3.0 대응 이후의 GPU라면 보통 부동소수점(Floating-Point) 텍스처를 활용하면 문제는 없다. DirectX 10세대/SM4.0 대응 GPU가 아니면 FP32-128 비트 텍스처에의 필터링은 할 수 없지만, 일반적인 3D 그래픽스의 렌더링으로 지금까지의 HDR 텍스처를 필요로 하는 국면은 적을 것이다.
지금도 의사 HDR 텍스처와 병용하는 것이 주류
HDR 텍스처도 DirectX 9세대/SM3.0 대응 이후의 GPU라면 보통 부동소수점(Floating-Point) 텍스처를 활용하면 문제는 없다. FP16-64비트 텍스처라면 텍스처 필터링도 바이리니어에서 이방성까지 모든 것을 적용할 수 있다. DirectX 10세대/SM4.0 대응 GPU가 아니면 FP32-128 비트 텍스처에의 필터링은 할 수 없지만, 일반적인 3D 그래픽스의 렌더링으로 지금까지의 HDR 텍스처를 필요로 하는 국면은 적을 것이다.
그러나 FP16-64비트 텍스처의 범용성 그 자체는 높지만 큰 문제도 있다. 그것은 비디오 메모리의 점유량과 읽고 때의 대역 소비가 크다고 하는 것이다(렌더 타겟의 때와 같은 문제).
αRGB 각 8비트의 int8-32비트의 종래의 LDR 텍스처이면, DXTC(DirectX Texture Compression)라고 불리는 텍스처 압축 방법을 이용할 수 있다. DXTC로 압축된 텍스처는 압축된 상태인 채 GPU 코어가 직접 액세스할 수 있기 때문에 활용하면 상당히 비디오 메모리에 기여할 수 있습니다. 그러나, 부동소수점(Floating-Point)의 HDR 텍스처가 되면, 최신의 DirectX 10세대/SM4.0 대응 GPU이어도, 그 압축 메소드는 서포트되고 있지 않다.
3D 게임 그래픽에서 모든 텍스처를 HDR 텍스처로 충당하기 위해서는 비디오 메모리 예산, 대역 예산이 너무 엄격하기 때문에 DirectX 9세대/DirectX 10세대에서도 LDR 텍스처를 의사 HDR 텍스처로 활용하는 경우가 많은 것 같다.
의사 HDR 텍스처는 포맷으로서는 LDR 텍스처이므로 DXTC를 효과적으로 압축할 수 있다.
포인트가 되는 것은, 어떻게 LDR 텍스처에 HDR 정보를 격납하는지인데, 이것에 대해서는 다양한 테크닉이 고안되고 있다.
여기에서는 「로스트 플래닛」(캡콤, 2007)에서 채용된 방법을 소개하자.
이 방법으로 사용하는 것은 α값과 RGB 모두가 1/4의 압축되는 DXT5 모드의 DXTC이다.
HDR에서 LDR로의 변환 (인코딩)은 먼저 {R, G, B, 1.0} 중 최대 값 M을 선택하고 그 역수 1 / M을 α에 저장한다. 계속해서 {R, G, B}의 모두를 M으로 나눈 것을 RGB에 격납한다.
되돌리는 디코드 처리는 {R, G, B} = {R, G, B} ÷ α만으로 구해진다.
이것으로, 분해능은 저하해 버리지만, HDR의 다이나믹 레인지는 유지되어 그 나름대로 RGB의 칼라도 유지됩니다.
HDR 텍스처라도, 고휘도인 HDR값의 텍셀보다는, RGB가 0.0~1.0의 LDR치의 텍셀이 많을 것이다. 이 방법은, 그 계산 알고리즘의 특성상, 그 대부분을 차지할 LDR값의 텍셀의 유지 품질이 높아지는 것이 특징이다.
또한 인코딩하면 HDR 값으로 돌아가므로 FP16-64 비트 HDR 텍스처와의 혼용도 쉽다고 할 수 있다. 게다가, 이 방법은, 고압축률인 DXT1로 압축한 LDR 텍스처를 동일 쉐이더로 취급할 수 있다는 장점도 있다.
DXT1은 α=0 또는 α=1 중 하나에서만 이용할 수 있지만, α=1로서 LDR 텍스처를 DXT1로 압축해 두면, 방금전의 DXT5의 의사 HDR 텍스쳐를 {R,G,B}={R,G,B}÷α로 디코딩 처리해도 {R,G,B}={R,G,B}÷1 (계속)
HDR 텍스처를 의사 HDR 텍스처로 LDR 텍스처로 변환. 나름의 품질로 좋다고 하는 HDR 텍스처는, 이것으로 이용하면 DXT 압축이 효과가 있다
(트라이Z 니시카와 젠지)