Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

높은 다이내믹 레인지 조명

소개

일반적으로 아티스트는 모든 3D 모델링을 수행한 다음 모든 텍스처링을 수행하고 3D 모델링 소프트웨어에서 멋진 모델을 보고 "멋져 보이고 통합할 준비가 되었습니다!"라고 말합니다. 그런 다음 게임에 들어가 조명을 설정하고 게임을 실행합니다.

그렇다면 이 모든 "HDR" 사업은 어떤 시점에서 시작됩니까? 답을 이해하려면 디스플레이가 어떻게 작동하는지 살펴봐야 합니다.

디스플레이는 최대 강도부터 최소 강도까지 선형 조명 비율을 출력합니다. 최신 게임 엔진은 해당 장면의 선형 조명 값에 대해 복잡한 수학을 수행합니다. 그렇다면 문제는 무엇입니까?

디스플레이 유형에 따라 디스플레이의 강도 범위가 제한됩니다. 그러나 게임 엔진은 강도 값의 무제한 범위로 렌더링합니다. "최대 강도"는 sRGB 디스플레이에 의미가 있지만 게임 엔진에는 아무런 영향을 미치지 않습니다. 렌더링 프레임당 생성되는 강도 값의 범위는 잠재적으로 무한히 넓습니다.

이는 씬 참조 광 비율이라고도 알려진 씬 광도의 일부 변환을 선택한 디스플레이의 특정 출력 범위에 맞게 변환하고 매핑해야 함을 의미합니다. 이는 가상 카메라를 통해 게임 엔진 씬을 가상으로 촬영하는 것을 고려하면 가장 쉽게 이해할 수 있습니다. 여기서 가상 카메라는 특정 카메라 렌더링 변환을 씬 데이터에 적용하고 출력은 특정 디스플레이 유형에 표시할 준비가 됩니다.

참고

Godot supports high dynamic range output. You can read more about this on the HDR output page.

For advanced users, it possible to get a non-tonemapped image of the viewport with full HDR data, which can then be saved to an OpenEXR file.

컴퓨터 디스플레이

거의 모든 디스플레이에는 전송된 코드 값에 대한 비선형 인코딩이 필요합니다. 디스플레이는 고유한 전달 특성을 사용하여 코드 값을 출력의 선형 광 비율로 "디코딩"하고 각 빨간색, 녹색 및 파란색 방출 지점에서 고유한 색상의 빛의 비율을 투사합니다.

대부분의 컴퓨터 디스플레이의 경우 디스플레이 사양은 1996 sRGB 사양이라고도 알려진 IEC 61966-2-1에 따라 설명됩니다. 이 사양은 LED 픽셀의 조명 색상은 물론 입력(OETF) 및 출력(EOTF)의 전송 특성을 포함하여 sRGB 디스플레이의 작동 방식을 간략하게 설명합니다.

Not all displays use the same OETF and EOTF as a computer display. For example, television broadcast displays use the BT.1886 EOTF. However, Godot only supports sRGB and HDR displays.

sRGB 표준은 일반적인 데스크탑 컴퓨팅 CRT 디스플레이의 전류 출력과 조명 출력 간의 비선형 관계를 기반으로 합니다.

../../_images/hdr_gamma.png

씬 참조 모델의 수학에서는 씬에 다른 값을 곱하여 강도와 다양한 조명 범위에 대한 노출을 조정해야 합니다. 디스플레이의 전달 기능은 디스플레이의 단순 전달 기능을 사용하여 게임 엔진의 씬 출력의 더 넓은 동적 범위를 적절하게 렌더링할 수 없습니다. 인코딩에 대한 보다 복잡한 접근 방식이 필요합니다.

씬 선형 및 자산 파이프라인

씬 선형 sRGB에서 작업하는 것은 단일 스위치를 누르는 것보다 더 복잡합니다. 먼저, 가져온 이미지 자산을 가져올 때 선형 조명 비율로 변환해야 합니다. 선형화된 경우에도 이러한 자산은 생성된 방법에 따라 텍스처로 사용하기에 완벽하게 적합하지 않을 수 있습니다.

이렇게 하고 싶어하는 몇 가지 이유가 있습니다:

이미지 가져오기 시 선형 비율을 표시하는 sRGB 전송 기능

이는 sRGB 자산을 사용하는 가장 쉬운 방법이지만 가장 이상적인 방법은 아닙니다. 이에 대한 한 가지 문제는 품질 저하입니다. 선형 조명 비율을 표현하기 위해 채널당 8비트를 사용하는 것만으로는 값을 올바르게 양자화하는 데 충분하지 않습니다. 이러한 텍스처는 나중에 압축될 수도 있으며, 이로 인해 문제가 악화될 수 있습니다.

선형 변환을 표시하는 하드웨어 sRGB 전송 기능

GPU는 부동 소수점을 사용하여 텍셀을 읽은 후 변환을 수행합니다. 이는 PC와 콘솔에서 잘 작동하지만 대부분의 모바일 장치는 이를 지원하지 않거나 압축 텍스처 형식(예: iOS)에서는 지원하지 않습니다.

씬 선형 대 디스플레이 참조 비선형

모든 렌더링이 완료된 후 씬 선형 렌더링은 sRGB 디스플레이와 같은 적합한 출력으로 변환해야 합니다. 이렇게 하려면 현재 :ref:`Environment <class_Environment>`에서 sRGB 변환을 활성화합니다(자세한 내용은 아래 참조).

sRGB -> 디스플레이 선형디스플레이 선형 -> sRGB 변환은 항상 둘 다 활성화되어야 한다는 점을 명심하세요. 그 중 하나를 활성화하지 못하면 아방가르드 실험 인디 게임에만 적합한 끔찍한 시각적 결과가 발생합니다.

HDR의 매개변수

HDR 설정은 Environment 리소스에서 찾을 수 있습니다. 대부분의 경우 이는 WorldEnvironment 노드 내부에서 발견되거나 카메라 노드에 설정됩니다. 자세한 내용은 :ref:`doc_environment_and_post_processing`를 참조하세요.