유니티 VR Application SpaceWarp을 이용하여 최적화하자! # AppSW

Application SpaceWarp란?

Application SpaceWarp는 애플리케이션이 실제 디스플레이 갱신 속도의 절반으로 렌더링하도록 허용합니다.

 

예를 들어, 기존 72 FPS으로 돌아가던 애플리케이션의 FPS를 36으로 렌더링한다는 뜻입니다.

애플리케이션은 "standard eye buffer" 외에도 "motion vector buffer"와 "depth buffer"렌더링해야 하며, Application SpaceWarp 시스템을 사용하여 새로운 프레임과 동기화하여 여전히 72 FPS를 디스플레이에 출력하도록 합니다.

 

32FPS와 72FPS차이가 궁금하시면 토글 펼치기~

더보기
  1. 36fps로 렌더링
    • 장면을 렌더링하고 초당 36회 디스플레이를 업데이트합니다.
    • 각 프레임을 렌더링하는 데 약 27.8ms(1000ms/36fps)가 걸립니다.
  2. 72fps로 렌더링
    • 장면을 렌더링하고  초당 72번 디스플레이를 업데이트해야 합니다.
    • 각 프레임은 약 13.9ms(1000ms/72fps) 내에 렌더링되어야 합니다.

      36fps가 72fps에 비해 컴퓨팅 예산을 2배 더 사용할 수 있다는 뜻입니다.

출처 - https://developer.oculus.com/blog/introducing-application-spacewarp/

 

 


AppSW는 자체 오버헤드를 가지고 있습니다. 모션 벡터 생성과 프레임 합성 모두 일정 시간이 소요되며, 모션 벡터 생성은 애플리케이션 프로세스의 GPU 비용에 더해지고, 프레임 합성은 컴포지터의 총 GPU 비용에 더해집니다.

 

다행히도, AppSW을 사용할 때 생기는 오버헤드는 작은 부분만을 차지하며 최대 70%의 추가적인 컴퓨팅 예산을 사용할 수 있습니다.

 

AppSW 작동 방식

새로운 프레임을 이전 프레임에서 합성하기 위해서는, 우리는 HMD 디스플레이의 미래 시간에 모든 주어진 픽셀이 어디에 있을지 알아야 합니다. 이를 수행하는 한 가지 방법은 모션 벡터 데이터와 깊이 데이터를 활용한 프레임 외삽과 프레임 재투영입니다.

 

모션 벡터는 각 픽셀의 이동 속도를 설명하므로, 우리는 이를 사용하여 픽셀이 가까운 미래에 어디에 있을지 예측할 수 있습니다. 깊이 버퍼는 픽셀이 렌더링 카메라에 얼마나 멀리 있는지 알려줄 수 있으며, 이는 HMD 지연을 줄이기 위해 깊이 기반 재투영을 수행하는 데 사용됩니다.

 

모션 벡터를 생성하는 방법은 많지만, 대부분은 두 가지 큰 카테고리에 속합니다.

  • 과거 프레임을 분석하여 모션 추정 수행
  • 애플리케이션에 의한 분석적 렌더링

AppSW는 2번째 접근법을 사용하며 1번째 접근법보다 훨씬 높은 해상도를 가질 수 있습니다. 


레이턴시 도전 과제

 

XR 애플리케이션이 더 낮은 프레임 속도로 렌더링할 때, 프레임 파이프라인이 더 길어지고 포즈 예측이 덜 정확해지기 때문에 레이턴시(대기 시간)는 편안한 경험을 주기 위해 해결해야 할 가장 큰 도전 과제 중 하나입니다.

 

AppSW를 사용할 때 대기 시간을 줄이기 위해, 다음 기술들로 전체 파이프라인 최적화를 제공하였다고 합니다.

  • Phase Sync: 애플리케이션 프레임을 조정하고 애플리케이션의 작업량에 따라 적절한 시간에 시작하게 합니다. HMD와 컨트롤러 센서 읽기는 가능한 한 늦게 수행되어 HMD와 컨트롤러의 대기 시간을 줄입니다. 
  • Late Latching  : 센서 읽기 시간을 CPU 렌더 프레임의 끝까지 더욱 지연시켜 대기 시간을 한 프레임 절약합니다.
  • Positional TimeWarp (PTW): Asynchronous TimeWarp는 모든 Quest 애플리케이션에서 활성화되며, 디스플레이 직전에 HMD 회전 오류를 수정할 수 있습니다. PTW는 깊이 버퍼 데이터를 사용하여 HMD 변환 대기 시간을 수정할 수 있으며, AppSW 애플리케이션에서 자동으로 활성화됩니다. HMD 대기 시간 관점에서 보면, PTW를 사용할 때 AppSW 앱은 AppSW 없는 전체 FPS 애플리케이션보다 더 나은 대기 시간을 가질 수 있다고 말할 수 있습니다. (흠..무슨말인지 잘 모르겠다..)

타임라인 관점에서 보면, 다음 다이어그램은 각 기술이 프레임 파이프라인에서 어디에 위치하는지 보여줍니다.

출처 - https://developer.oculus.com/blog/introducing-application-spacewarp/

 

 

 

Bringing Phase Sync to Mobile VR

Phase Sync is a frame timing management technology that we first introduced in the Oculus PC SDK, which can help minimize pose latency by dynamically adjusting frame timing. We are excited to announce that Phase Sync is now available on the Oculus Mobile S

developer.oculus.com

 

 

UE4 Late Latching for Oculus Quest: Design, Benefits and How to Get Started

As we recently launched an update that will enable late latching for UE4 development, hear from our software engineering team as they provide an overview of the benefits and how to get started.

developer.oculus.com

 

 

Application SpaceWarp Developer Guide: Unity | Oculus Developers

 

developer.oculus.com

 

Late Latching와 Phase Sync에 대해서는 다음 시간에 알아보겠습니다!

 


AppSW.... 설명만 들었을 땐 무조건 사용해야 할 정도로 좋은 기술인데 왜 기본설정으로 되어 있지 않을까?

AppSW는 정말 최적화에 좋은 도구인 것은 맞지만, 모든 어플리케이션에 적합하지 않기 때문입니다.

AppSW는 애플리케이션의 작업량이 크게 변동하거나 급증하는 경우, non-phase sync 모드보다 더 많은 오래된 프레임이 생성될 수 있다고 합니다. 또한, 프레임 속도가 충분하지 않은 경우에도 오래된 프레임이 생성된다고 합니다. (오래된 프레임이라는 것은 잔상같은 느을 말하는 것일까요?)

 

AppSW는 Vulkan + MultiView를 사용하는 앱에서만 지원되며, OpenXR에서만 지원이 된다고 합니다.

물론 상황에 맞게 일부 장면에서는 활성화하고, 다른 장면에서는 비활성화 할 수 있기 때문에 적절하게 사용하면 될 것 같습니다. 이 말은 즉, 개발자가 더 철저히 프로젝트를 설계해야한다는 의미를 뜻하는 것 같습니다.