HDR은 어떻게 작동합니까?


17

HDR이 무엇이며 어떻게 작동하는지 이해하려고합니다.

기본 개념을 이해하고 D3D / hlsl로 구현되는 방법에 대해 약간의 아이디어가 있습니다.

그러나 여전히 안개가 심합니다.

지구의 질감과 별의 역할을 할 정점의 작은 점 목록으로 구를 렌더링한다고 가정하면 어떻게 HDR로 렌더링합니까?

내가 혼동하는 몇 가지 사항은 다음과 같습니다.

  • 값이 [0, 255]로 제한되고 셰이더에서 [0, 1]로 고정되므로 텍스처에 기본 이미지 형식 만 사용할 수 없습니다. 백 버퍼도 마찬가지입니다. 포맷은 부동 소수점 형식이어야합니다.

  • 다른 단계는 무엇입니까? 반드시 부동 소수점 형식을 사용하여 렌더링 대상에 렌더링 한 다음 포스트 프로세스로 블룸을 적용하는 것 이상의 것이 있어야합니다. (어쨌든 출력은 8bpp입니다.)

기본적으로 HDR의 단계는 무엇입니까? 어떻게 작동합니까? 나는 이것 이외의 과정을 설명하는 좋은 논문 / 기사를 찾지 못하는 것 같지만 기본 사항을 약간 넘어서서 혼란 스럽습니다.

답변:


19

HDR 기술을 사용하면 기존 조명 / 텍스처보다 화면에서 볼 수있는 것보다 더 넓은 범위의 디테일을 시뮬레이션 할 수 있습니다. 다른 양의 빛에 노출되었을 때 눈의 동작과 비교할 수 있습니다. 빛이 너무 많으면 눈에 빛이 덜 들어가서 여전히 가시 범위에있게됩니다. 빛이 충분하지 않으면 조리개가 더 열리므로 자세한 내용을 볼 수 있습니다.

bit-tech.net HDR 비교

이 이미지의 오른쪽은 HDR을 사용하고 있습니다. 색상 범위를 더 많이 사용하고 어두운 부분은 더 어둡고 밝은 부분은 더 밝습니다. 이에 비해 이미지의 왼쪽은 약간 평평하게 보입니다.

기본 단계는 다음과 같습니다.

  1. 모델의 다른 부동 소수점 텍스처 및 / 또는 1.0f보다 큰 조명을 사용하여 장면을 부동 소수점 텍스처 (A16B16G16R16F와 같은 형식)로 렌더링합니다.

  2. 이 텍스처를 표시하려면 가시 색상 범위를 화면에 표시 할 수있는 것으로 변환해야합니다.이 프로세스를 톤 매핑 이라고 하며 다양한 톤 매핑 방정식을 사용하여 다른 효과를 얻을 수 있습니다. 모니터가 부동 소수점 텍스처에 저장할 수있는 전체 색상 또는 발광 범위를 표시 할 수 없기 때문에 필수입니다 (가능한 경우 멋지지만 실명 위험이 있습니다 ...).

  3. 블룸 및 기타 애프터 이펙트가 추가되어 렌더링되는 대상의 발광 차이를 더욱 과장합니다. 블룸은 부동 소수점 버퍼에서 계산되고 톤 매핑 이미지와 결합됩니다.

희망이 도움이


나는 이것이 (매우) 오래된 질문이라는 것을 알고 있지만, 훌륭하지만 간단한 톤 매핑 알고리즘을 참조 할 수 있습니까?
JSQuareD

6

기술적으로 HDR은 단순히 그래픽에 더 넓은 범위의 값을 사용하는 것을 의미합니다. 일반적으로 빨강, 녹색 및 파랑 채널에 대해 256 개의 이산 값으로 제한됩니다. 즉, 2 개의 항목이있는 경우 하나는 다른 것보다 두 배 더 밝고 세 번째는 첫 번째보다 10,000 배 더 밝습니다. 같은 장면에서 3 개를 모두 정확하게 표현할 수 있습니다. 대신 밝은 물체를 첫 번째보다 256 배만 밝게하거나 둔한 물체를 완전히 검은 색으로 만들고 (그 사이의 대비를 잃음) 밝은 물체는 무한히 밝아집니다 그들 둘 다보다.

빨강 / 녹색 / 파란색 값에 부동 소수점 값을 사용하면 쉽게 고칠 수 있지만 이제 채널당 고정 된 수의 개별 값만 처리하는 그래픽 장치에서이를 표시하는 방법에 문제가 있습니다 (예 : 256). . 따라서 문제의 두 번째 부분은 부동 소수점 값을 제한된 범위로 다시 매핑하는 방법입니다. 사소한 해결책은 모든 값을 이산 범위로 비례 적으로 스케일하는 것입니다. 그러나 이것은 매우 밝은 1 개의 픽셀이 화면의 나머지 부분을 검은 색으로 만들 수 있음을 의미합니다. 때로는 이것이 원하는 것입니다. 때로는 CiscoIPPhone의 톤 매핑을 참조하십시오 접근 방법에 대한 예를 보려면 링크를 클릭하십시오.

일반적으로 텍스처를 새로운 형식으로 저장해야하는 것은 아닙니다. 조명을 적용 할 때 더 큰 값을 수용 할 수 있어야합니다. 그러나 광원이 텍스처로 구워진 경우에는 물론입니다. 별이 빛나는 배경-더 높은 해상도 형식을 원할 수 있습니다. 또는 셰이더가 이러한 머티리얼을 렌더링 할 때 이러한 머티리얼의 값을 스케일 업하도록하십시오.


5

컴퓨터는 전통적으로 화면의 각 픽셀을 메모리에서 24 비트 (빨간색 8, 녹색 8, 파란색 8)로 24 비트로 표현했습니다. 이것은 더 많은 비트를 추가하면 인간이 알지 못할 정도로 충분한 비트이며 8 비트 바이트는 마이크로 프로세서에 매우 편리하므로 그게 붙어 있습니다.

8 비트는 이미지 를 표시 하기에 거의 충분한 정밀도이지만 이미지를 계산 하기에는 정확도가 충분하지 않습니다 . 이미지를 계산하는 동안 다양한 지점에서 최소 32 비트의 정밀도가 필요합니다.

이것이 8 비트 정밀 이미지로 렌더링 할 때에도 픽셀 쉐이더가 32 비트 정밀도로 색상을 계산하는 이유입니다. 그렇지 않으면, 예를 들어 값을 1000으로 나눈 다음 나중에 1000을 곱할 수 없었습니다. 8 비트 값을 1000으로 나누면 0이됩니다.

실시간 3D 그래픽에서 모든 가능한 그래픽을 마지막 순간까지> 8 비트 정밀도로 유지하는 경향이 있었으며, 이때 8 비트 이상의 빨강은 8 비트로 다운 샘플링되는 등 녹색 및 파랑 색으로 진행되었습니다.

HDR은 8 비트 정밀도보다 높은 이미지로 렌더링하는 행위를 말합니다. 현대 TV 비디오 게임에서는 16 비트 정밀도가 표준이며 이는 앞으로 몇 년 동안 비디오 게임에서 "충분히"있을 수 있습니다.


2

HDR의 핵심 요소 중 하나는 모니터 감마를 올바르게 적용하는 것입니다.

보고있는 모니터는 입력 픽셀의 함수로 빛을 생성합니다. 값이 255 인 픽셀은 값이 1 인 픽셀보다 약 255 배 더 많은 광을 생성 할 것으로 예상 할 수 있습니다. 2.3의 표준 모니터 감마에서는 255 ^ 2.3 배 밝거나 약 340000입니다!

컨텐츠를 제작하는 모든 사람 (카메라 매니 페처)은이를 알고 있거나 (디자이너 인 경우) 암시 적으로 보상합니다.

비트 맵을 렌더링하는 것만으로도 충분하지만 (대부분의 경우) 3D 장면에서 비트 맵을 텍스처로 사용하면 다른 이야기입니다. 조명과의 상호 작용을 올바르게 모델링하려면 렌더링 파이프 라인에서 선형 조명 계산을 사용해야합니다. 이것은 의미

  • 감마에 대한 텍스처 수정

  • 선형 조명으로 모든 것을 렌더링합니다 (높은 동적 범위의 빛으로 인해 많은 정밀도가 필요한 경우).

  • 이미지를 화면에 표시하기 전에 모니터의 역 감마 변환을 마지막으로 적용하십시오.

기존 아트 워크, 조명 등을 사용하여 기존 장면을 변경하는 경우 비선형 조명으로 렌더링 할 때 멋지게 보이도록 선택 되었기 때문에 많은 조명 강도와 텍스처를 수정해야합니다. 따라서 "켜기"만하면 모든 것이 더 좋아 보일 수있는 기능이 아닙니다.


2
감마는 확실히 중요하며 물리적 기반 렌더링을 올바르게 수행하는 데 중요하지만 HDR, IMO와 직접 관련이 없습니다.
Nathan Reed
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.