Version: Unity 6.0 (6000.0)
언어 : 한국어
포비티드 렌더링
Optimize for untethered XR devices in URP

VR 프레임 타이밍

VR 모드의 프레임 타이밍은 VSync가 활성화된 비VR 모드에서와 마찬가지로 작동합니다(이벤트 함수 실행 순서에 대한 기술 자료 참조). 유일한 차이점은 Unity가 기본 3D SDK의 VSync에 의존하지 않고 현재 렌더링하는__ VR__가상 현실입니다. 자세한 정보
See in Glossary
SDK에 의존한다는 점입니다. 디스플레이가 새로 고침할 수 있는 속도보다 빠르게 렌더링하는 것은 이점이 없습니다. 대신 Unity는 시간을 가장 효율적으로 활용하는 데 집중합니다.

멀티스레드 렌더링에서 Unity는 시뮬레이션 스레드와 CPU의 렌더링 스레드를 동기화합니다. 이렇게 하면 지연이 감소합니다. 시뮬레이션 스레드는 주로 시뮬레이션 실행에 필요한 스크립트, 사운드, AI, 기타 작업을 실행합니다. 렌더 스레드는 그래픽스 드라이버에 드로우 콜을 제출하는 데 중점을 두며, 그래픽스 드라이버는 드로우 콜을 확인하고 GPU로 전송합니다. 스레드 간에 최대한의 병렬 관계를 구현하기 위해 Unity는 해당 스레드가 들어올 때 그래픽스 커맨드를 실행하고 동시에 다음 프레임을 시뮬레이션합니다.

Unity는 GPU가 마지막 프레임을 완전히 렌더링하고 표시할 때까지 기다린 후 다음 프레임에 대한 렌더링 커맨드를 제출합니다.

지연 최소화

Unity가 뷰 변환 매트릭스에 기반하는 첫 번째 렌더링 커맨드를 제출하기 전에 VR SDK에서 뷰 매트릭스를 먼저 가져와야 합니다. 지연을 최소화하기 위해 VR SDK는 프레임당 두 번의 헤드 트랜스폼을 예상합니다.

  • 현재 프레임을 렌더링하는 하나의 예측입니다. 이 예측은 프레임이 화면에 도달할 때 헤드가 실제 공간에 있는 위치에 해당합니다.

  • 다음 프레임을 시뮬레이션하는 하나의 예측입니다.

Unity는 현재 프레임의 렌더링 예측을 카메라, 컨트롤러, 씬 렌더링에 대한 정보를 필요로 하는 모든 요소에 적용합니다. Unity는 다음 프레임을 렌더링할 수 없는 경우 다음 프레임에 대한 시뮬레이션 예측을 사용합니다.

하드웨어가 렌더링을 처리하는 방식에 대한 자세한 내용은 HMD에 대한 제조사 문서를 참조하십시오.

Unity에서 프레임이 누락되면 어떤 일이 발생하나요?

Unity가 다음 디스플레이 새로고침 시점까지 완전히 렌더링된 프레임을 제출하지 않으면 활성화된 VR SDK에 따라 몇 가지 상황이 발생할 수 있습니다. VR SDK는 다음을 수행할 수 있습니다.

  • 이전에 제출한 프레임을 표시합니다. 이렇게 하면 요동치는 것처럼 보일 수 있으며 경험의 질이 크게 떨어집니다.

  • 현재 헤드 포즈에 따라 이전에 제출한 프레임을 회전하여 재투영합니다. 이를 통해 정적 콘텐츠의 폴백으로 동작하는 근사치를 얻을 수 있지만, 애니메이션 또는 위치 이동이 포함된 콘텐츠가 제대로 표시되지 않습니다.

  • 위치 재투영의 일부 형태를 적용합니다. 이렇게 하면 일시적으로 누락된 디테일을 채울 수 있습니다.

재투영(때때로 ’시간 왜곡’이라고도 불림)에 관한 자세한 내용은 Timewarp의 XinReality wiki 항목을 참조하십시오.

이 모든 동작은 자동으로 진행됩니다. 이 시점에는 Unity가 이미 렌더링하고 있어야 할 다음 프레임을 성공적으로 마무리하기에는 너무 늦습니다. 대신에 VR SDK가 수신된 마지막 프레임을 가져온 후 가장 최근에 예상된 포즈로 재투영합니다. 그러면 Unity는 전체 프레임을 렌더링하여 원래대로 돌아올 기회가 올 때까지 기다립니다. 앱의 프레임이 계속 드롭되면 Unity는 프레임을 하나씩 건너뛰며 렌더링합니다.

하드웨어가 렌더링을 처리하는 방식에 대한 자세한 내용은 HMD에 대한 제조사 문서를 참조하십시오.

VR에서 GPU 바운드와 CPU 바운드 비교

각 디스플레이에는 Unity가 바운드되는 특정한 새로고침 속도가 있습니다. VRDevice.refreshRate를 사용하여 런타임 시점에 이를 확인할 수 있습니다. 1을 refreshRate로 나눈 값은 단일 프레임에 할당된 시간을 나타냅니다.

예를 들어 새로고침 속도가 90hz인 경우 이 값은 11.1밀리초가 될 수 있습니다.

  • 앱이 GPU 바운드이면 Unity 프로파일러는 한 프레임(시간 단위: 밀리초)을 초과하여 XR.WaitForGPU를 표시합니다.

  • 앱이 CPU 바운드이면 프레임은 지정된 프레임 시간보다 오래 걸리지만, Unity 프로파일러는 한 프레임보다 짧게 XR.WaitForGPU를 표시합니다.

포비티드 렌더링
Optimize for untethered XR devices in URP