Choose your operating system:
Windows
macOS
Linux
언리얼 엔진 4 에서는 이제 더욱 높은 대비값과 폭넓은 색 공간(color gamut)을 활용할 수 있는 하이 다이내믹 레인지 (HDR) 디스플레이로 출력할 수 있습니다. 이 글의 목표는 디스플레이되는 이미지에 "현실 세계"에서 느낄 수 있는 보다 자연스러운 라이팅 조건과 같은 특성을 낼 수 있도록 하는 것입니다. 이는 Academy Color Encoding System (ACES) 표준으로 넘어가기 위한 과정 중의 하나로, 이를 통해 여러 포맷과 디스플레이에 걸쳐 일관된 색 보존이 가능하며, 소스 머티리얼을 별다른 수정 없이 다른 미디어에도 사용할 수 있도록 하는 미래 경쟁력 확보 차원의 방편이기도 합니다.
현재 구현을 통해서는, 렌더링된 씬의 전체 처리는 ACES Viewing Transform 이라 알려진 방식을 통해 처리합니다. 이 프로세스 작동방식은 씬 참조 이미지와 디스플레이 참조 이미지를 사용하는 것입니다.
-
Scene-referred (씬 참조) 이미지는 노출 범위 제한 없이 소스 머티리얼의 원본 리니어 라이트 값을 유지합니다.
-
Display-referred (디스플레이 참조) 이미지는 사용중인 디스플레이의 컬러 스페이스로 변형된 최종 이미지입니다.
이 파이프라인을 사용하면, 다른 디스플레이를 사용할 때마다 올바른 컬러 스페이스를 사용하도록 원본 소스 파일을 매번 수정할 필요가 없습니다. 대신 출력중인 디스플레이가 올바른 컬러 스페이스에 매핑되도록 해주면 됩니다.
ACES Viewing Transform 은 뷰 파이프라인에서 다음과 같은 방식으로 작동합니다:
-
Look Modification Transform (LMT) - 프로세스 이 부분은 창의적 "외형" (컬러 그레이딩 및 보정)을 적용시킨 ACES 컬러 인코딩된 이미지를 받은 뒤, ACES 로 렌더링된 이미지를 출력합니다. 여기에는 Reference Rendering Transform (RRT) 와 Output Device Transform (ODT) 가 조합됩니다.
-
Reference Rendering Transform (RRT) - 그리고서 이 부분은 씬 참조 컬러 값을 받아 디스플레이 참조 값으로 변환합니다. 이 과정에서 렌더링된 이미지가 특정 디스플레이에만 의존하도록 하는 대신, 아직 생성되지 않은 디스플레이를 포함해서 출력 대상 디스플레이에 맞도록 더 큰 색 공간과 다이내믹 레인지를 갖도록 합니다.
-
Output Device Transform (ODT) - 마지막으로 이 단계에서는 RRT 의 HDR 데이터 출력을 받은 뒤 다양한 디바이스와 거기서 디스플레이 가능한 컬러 스페이스에 일치시킵니다. 이 때문에, 각 타깃은 일치시킬 별도의 ODT 가 필요합니다 (예: Rec709, Rec2020, DCI-P3, 등).
ACES Viewing Transform 관련 부가 정보는 ACES GitHub 에서 PDF 문서를 다운로드해 보시거나, 이 글의 참고 자료 부분에 있는 링크를 따라가시기 바랍니다.
HDR 출력 활성화
HDR 출력은 런타임에 콘솔 변수 토글 또는 블루프린트의 GameUserSettings 노드를 통해 활성화시킬 수 있습니다.
GameUserSettings 컨트롤은 현재 출력 디바이스에 맞는 가장 가까운 값으로 자동 클램프시키고 모든 플래그도 적절히 설정해 줍니다. 다른 방법으로는, 다음 콘솔 변수를 통해 HDR 디바이스와 필요한 색 공간 출력에 맞는 옵션을 활성화시키고 변경해도 됩니다.
콘솔 변수 |
설명 |
||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
r.HDR.EnableHDROutput |
1 로 설정하면, 스왑 체인을 재생성하고 HDR 출력을 활성화시킵니다. |
||||||||||||||
r.HDR.Display.OutputDevice |
출력 디스플레이의 디바이스 포맷입니다.
|
||||||||||||||
r.HDR.Display.ColorGamut |
출력 디스플레이의 색 공간입니다.
|
GameUserSettings 에 대한 블루프린트 또는 C++ 호출을 구성한 이후에는, 쿠킹된 프로젝트 실행, 명령줄 인수
-game mode
사용, 독립형 게임 모드 사용, 새 창에서 독점 전체화면 에디터에서 플레이 (PIE)
등을 실행하면 됩니다 (
Alt
+
Enter
또는 콘솔 창에
fullscreen
명령 사용).
테두리 없는 창 또는 창 모드는 현재 HDR 출력에 작동하지 않습니다.
HDR 에서 로우 다이내믹 레인지 (LDR) UI 지원
이 기능은 실험단계 기능이며, 앞으로 변경될 수 있습니다.
HDR 출력이 활성화되면 유저 인터페이스(UI)가 올바르게 보이지 않을 수 있습니다. 그래서 LDR UI 합성을 위한 실험단계 기능 지원을 추가했습니다. LDR 모양에 가급적 비슷하게 일치하도록 시도하기는 하지만, 메인 씬의 활기로 인해 탈색되어 보이는 현상을 방지하기 위해서는 UI 를 약간 증폭시켜 주는 것이 좋습니다.
그 방법은 다음 콘솔 변수를 사용하면 됩니다:
콘솔 변수 |
설명 |
---|---|
r.HDR.UI.CompositeMode |
1 로 설정하면 HDR UI 합성을 활성화시켜, LDR 비주얼과 블렌딩 보존을 시도합니다. |
r.HDR.UI.Level |
합성된 UI 밝기를 조절합니다. 1.5 나 2 정도 값을 추천합니다. |
HDR 하드웨어 및 셋업 고려사항
여러가지 다양한 디스플레이 및 TV 유형에다 콘솔 및 PC 고려사항과 맞물려서 생각해 보면, HDR 출력의 정상 작동을 위해서는 세팅을 변경하거나 특정 하드웨어 부품을 사용해야 할 수도 있습니다. 다음은 셋업 프로세스를 거치는 도중 고려할 것들 몇 가지입니다.
-
빠른 전송 속도를 위해서는 시스템과 HDR 디스플레이가 고속 HDMI 2.0 케이블로 연결되어있는지 확인합니다 (HDMI 1.4 도 작동은 합니다만, 콘텐츠 표시에 문제가 있을 수 있습니다). 모든 HDMI 포트가 HDMI 2.0 및 HDR 을 받지 않을 수도 있습니다. 확실치 않으면 디스플레이 매뉴얼을 참고하세요.
-
TV 포트가 HDR 활성화된 것인지 확인하세요. 가끔 TV 나 디스플레이 세팅에 "HDMI Deep Color" 또는 "Enhanced Format" 이라고 표시되어 있을 수 있습니다. 확실치 않으면 디스플레이 매뉴얼을 참고하세요.
-
PS4 와 같은 몇몇 콘솔에서는 HDR 출력의 정상 작동을 위해서는 Enable HDCP 시스템 세팅을 꺼줘야 할 수도 있습니다.
-
일부 디스플레이의 경우, 올바른 출력을 위해서는 디스플레이 세팅을 조정해야 할 수 있습니다.
-
NVIDIA GPU 의 경우 NVIDIA Control Panel 을 사용하여 디스플레이 해상도 Output Color Format 이 RGB 를 사용하고, Output Color Depth 가 10-bit 또는 12-bit 를 사용하도록 조절하세요. 하드웨어에 따라 사용할 수 없는 옵션이 있을 수 있습니다. 확실치 않은 경우 디스플레이 매뉴얼을 참고하세요.
-
참고 및 한계
-
기본적으로 필름 매핑 커브는 LDR 컨트롤의 조악한 호환성으로 인해 HDR 출력 도중에는 비활성화됩니다.
-
현재 1000-nit 및 2000-nit 디스플레이 출력에 대한 패스만 구현되어 있습니다.
-
D3D11 제약으로 인해 HDR 출력은 전체화면 전용으로만 제한됩니다. Windows 10 의 D3D12 지원을 통해 이 부분은 HDR 출력에 개별 뷰포트가 가능하도록 확장될 수도 있습니다. Mac 에서는 현재 이미 이 구현이 지원되고 있습니다.