XR의 높은 렌더링 요구사양으로 인해 새로운 XR 전용 렌더링 모드와 다수의 퍼포먼스 최적화가 언리얼 엔진(UE)에 도입되었습니다. 여기서는 관련 기능에 대해 알아보고 UE XR 프로젝트에서 각 기능을 사용하는 방법을 살펴보겠습니다.
가변 속도 셰이딩 및 고정 포비티드 렌더링
가변 비율 셰이딩(Variable Rate Shading, VRS)은 신형 GPU에 지원되는 기능으로, 렌더 타깃(또는 타깃)에서 픽셀의 셰이딩 레이트를 조정하기 위한 여러 메서드를 제공합니다. 모든 구성에서 디폴트 셰이딩 레이트는 1:1입니다. 즉, 픽셀 셰이더 호출 1개가 화면의 타깃 픽셀 1개에 적용됩니다. VRS를 사용하면 1x2, 2x1, 2x2, 2x4, 4x2, 4x4 등 다른 셰이딩 레이트를 지정할 수 있습니다. 예를 들어 2x2 셰이딩 레이트의 경우 단일 픽셀 셰이더 호출로 2x2 픽셀 그룹(픽셀 4개)이 표시되며, 4x4의 경우 단일 픽셀 셰이더 호출로 4x4 그룹(픽셀 16개)이 표시됩니다.
셰이딩 레이트는 머티리얼별로 적용되거나 셰이딩 레이트 이미지 어태치먼트(티어 2 VRS)를 통해 적용될 수 있습니다.
고정 포비티드 렌더링(Fixed Foveated Rendering)은 VR 헤드셋에서 이미지 기반 VRS를 활용하여 타깃의 셰이딩 레이트를 조정하고 뷰 경계에 근접할수록 셰이딩 레이트를 줄이는 기술입니다. 광학 디스토션으로 인해 GPU는 이미지 모서리에 근접할수록 더 많은 양의 픽셀 디테일을 제거하게 됩니다. 따라서 이미지 중앙으로부터 멀어질수록 셰이딩 레이트를 줄이는 VRS 이미지를 적용하여 눈에 띄는 이미지 퀄리티 저하가 거의 없이 퍼포먼스를 향상할 수 있습니다.
고정 포비에이션은 다음과 같이 컴퓨트 셰이더를 통해 생성된 어태치먼트를 사용합니다.
양쪽의 중앙(검은색) 영역은 각 스테레오 뷰의 중앙에 해당하며, 어두운 영역일수록 셰이딩 레이트가 높습니다. 검은색은 풀 레이트(1x1, 픽셀당 1회의 픽셀 셰이더 호출), 진한 빨간색은 x와 y 양쪽에서 하프 레이트(2x2, 픽셀 4개당 1회의 픽셀 셰이더 호출), 연한 빨간색은 쿼터 레이트(4x4, 픽셀 16개당 1회의 픽셀 셰이더 호출)를 나타냅니다.
VRS 어태치먼트가 베이스 패스와 투명 패스에 적용된 초기 결과는 상당한 가능성을 보입니다. 현재 이 기능은 아직 개념 증명 단계에 있으며 베이스 패스와 투명 패스 외에 다른 곳에도 적용될 수 있습니다.
프로젝트 세팅
VRS 세팅에 액세스하려면 메인 메뉴에서 편집(Edit) > 프로젝트 세팅(Project Settings)으로 이동합니다. 그런 다음 프로젝트 세팅 창에서 엔진(Engine) > 렌더링(Rendering) > VR로 이동합니다.
콘솔 변수
사용 가능한 콘솔 변수는 다음과 같습니다.
| 변수 | 설명 |
|---|---|
r.vrs.Enable | 엔진 전체에서 VRS를 활성화 또는 비활성화합니다(머티리얼 기반 VRS 및 활성 이미지 기반 VRS). |
r.VRS.EnableImage | 이미지 기반 VRS만 활성화 또는 비활성화합니다. 머티리얼 기반 VRS는 활성화되어 있고 지원되는 경우 계속 작동합니다. |
vr.VRS.HMDFixedFoveationLevel | HMD 고정 포비티드 렌더링 퀄리티 및 퍼포먼스 세팅입니다. |
vr.VRS.HMDFixedFoveationDynamic | 고정 포비션 레벨이 GPU 활용을 기반으로 조정되어야 하는지 여부를 활성화 또는 비활성화합니다. |
알려진 제한 사항
DirectX 12 및 VRS 티어 2가 지원되는 Windows 디바이스, Vulkan 및 VH_KHR_fragment_shading_rate 익스텐션이 지원되는 Windows 디바이스, Oculus Quest에서만 사용 가능합니다.
NVIDIA DLSS와 호환되지 않습니다.
아이 트래킹된 포비티드 렌더링은 현재 지원되지 않습니다.
인스턴스드 스테레오
인스턴스드 스테레오 렌더링은 언리얼 엔진에서 XR이 퍼포먼스에 미치는 악영향을 줄입니다. 프로젝트 세팅(Project Settings) > 엔진(Engine) > 렌더링(Rendering) > 인스턴스드 스테레오(Instanced Stereo)로 이동하여 이 기능을 활성화한 다음 인스턴스드 스테레오(Instanced Stereo) 옵션을 체크합니다.
인스턴스드 스테레오(Instanced Stereo) 렌더링을 활성화한 후에는 엔진을 재시작하고 셰이더를 다시 컴파일해야 합니다. 베이스 패스(pass), 얼리-z 패스(pass)는 이 기능이 직렬 및 병렬 렌더링 패스(path) 둘 다 켜진 스태틱 메시, 스켈레탈 메시, 스프라이트 파티클, 메시 파티클과 함께 작동합니다. 인스턴스드 스테레오는 현재 PC(DirectX)와 PS4에서 작동하며 다른 플랫폼은 4.11 초기 릴리즈 이후 지원될 예정입니다. 다음은 VR에서 표준 스테레오 렌더링과 인스턴스드 스테레오 렌더링을 비교하는 비디오입니다.
모바일 멀티뷰 지원
지원되는 특정 모바일 디바이스에서는 이제 VR 멀티 뷰(VR Multiview)를 사용할 수 있습니다. 모바일 멀티 뷰(Mobile Multiview)는 데스크톱 PC에서 사용할 수 있는 인스턴스드 스테레오 렌더링과 비슷하며, 모바일 디바이스의 CPU에서 스테레오 렌더링에 최적화된 패스를 제공하는 방식으로 작동합니다. 이 기능을 활성화하는 방법은 다음과 같습니다.
메인 툴바에서 편집(Edit) > 프로젝트 세팅(Projects Settings)으로 이동하여 에디터의 프로젝트 세팅을 엽니다.
그런 다음 엔진(Engine) > 렌더링(Rendering) > VR로 이동하여 모바일 멀티 뷰(Mobile Multi-View) 옵션을 찾습니다.
모바일 멀티 뷰 옵션을 활성화하고 언리얼 엔진을 재시작하여 변경 사항을 적용합니다.
모바일 멀티뷰는 최신 Mali 기반 GPU에서만 작동합니다.
이 프로젝트를 패키지로 만들어도 호환되는 GPU가 없다면 이 기능은 런타임 때 비활성화됩니다.
포워드 렌더링
By default, Unreal Engine uses a Deferred Renderer as it provides the most versatility and grants access to more rendering features. However, there are some trade-offs in using the Deferred Renderer that might not be right for all VR experiences. Forward Rendering provides a faster baseline, with faster rendering passes, which may lead to better performance on VR platforms. Not only is Forward Rendering faster, it also provides better anti-aliasing options than the Deferred Renderer, which may lead to better visuals.
이 기능에 대한 자세한 내용은 포워드 셰이딩 렌더러 문서를 참고하세요.
퍼포먼스 프로파일링
VR에 사용하기에는 너무 비싼 에셋을 트래킹하려면 프로젝트 진행 기간에 CPU와 GPU에서 프로젝트가 무슨 작업을 하는지 최대한 많이 프로파일링해야 합니다.
GPU 프로파일링(GPU Profiling) - GPU 프로파일러를 활성화하려면 프로젝트가 실행 중일 때 Ctrl + Shift + ,(쉼표 키)를 누르기만 하면 됩니다. 이렇게 키를 누르면 아래 이미지와 비슷한 새 창이 표시됩니다.
CPU 프로파일러(CPU Profiler) - CPU에서 프로젝트가 무슨 작업을 하는지 프로파일링하는 것은 GPU 프로파일링보다 조금 복잡합니다. 이 방법에 대한 자세한 내용은 퍼포먼스 프로파일러 문서를 참고하세요.
포스트 프로세스 세팅
VR의 높은 렌더링 요구사양으로 인해 기본적으로 활성화된 고급 포스트 프로세싱 기능 다수를 비활성화하지 않으면 프로젝트에 퍼포먼스 문제가 발생할 수 있습니다. 프로젝트에서 고급 기능을 비활성화하는 방법은 다음과 같습니다.
1. 포스트 프로세스(Post Process, PP) 볼륨이 없으면 레벨에 추가합니다. 1. PP 볼륨을 선택하고 포스트 프로세스 볼륨(Post Process Volume) 섹션에서 무한 규모(언바운드)(Infinite Extent (Unbound)) 옵션을 활성화하면 PP 볼륨의 세팅이 전체 레벨에 적용됩니다.
![Enable unbound option for the post process volume(enable-unbound-post-process-volume.png)
1. 포스트 프로세스 볼륨의 세팅(Settings)을 펼친 다음 각 섹션을 살펴보며 해당 프로퍼티를 활성화하여 모든 활성 PP 세팅을 비활성화합니다. 프로퍼티를 클릭한 다음 디폴트 값(보통 1.0)을 0으로 설정하여 기능을 비활성화하면 됩니다.
이 작업을 수행할 때 각 섹션에서 모든 프로퍼티를 0으로 설정할 필요는 없습니다. 그보다는 렌즈 플레어, 스크린 스페이스 리플렉션, 템포럴 AA, SSAO, 블룸 등 퍼포먼스에 심각한 영향을 미칠 수도 있는 기능부터 비활성화하는 것이 좋습니다.