Poprawianie liczby klatek na sekundę, zmniejszanie obciążenia GPU i skracanie czasu oczekiwania na renderowanie za pomocą ustawień rozszerzeń Android XR

Odpowiednie urządzenia XR
Te wskazówki pomogą Ci tworzyć treści na te urządzenia XR.
Gogle XR
Przewodowe okulary XR

Unity udostępnia niektóre funkcje związane z wydajnością, które są specyficzne dla Androida XR i wymagają pakietu Android XR Extensions. Włącz te funkcje, aby zwiększyć liczbę klatek na sekundę i zmniejszyć obciążenie procesora graficznego dzięki spacewarp i próbkowaniu Vulkan oraz skrócić czas oczekiwania na renderowanie śledzone za pomocą późnego zatrzaskiwania.

Wymagania wstępne

Zanim zaczniesz korzystać z tych wskazówek, sprawdź, czy spełniasz te wymagania wstępne:

Włączanie spacewarp

URP Application Spacewarp to optymalizacja OpenXR, która pomaga utrzymać wysoką liczbę klatek na sekundę dzięki syntezie co drugiej klatki. Technika ta wykorzystuje wektory ruchu i dane o głębi z poprzednich klatek, aby przewidzieć, gdzie powinny się przesuwać piksele, co zmniejsza moc obliczeniową i zużycie energii.

Zalety

  • Zmniejsza obciążenie renderowania przez GPU dzięki syntezie alternatywnych klatek.
  • Znacznie zmniejsza moc obliczeniową i zużycie energii.
  • Wykorzystuje ponowną projekcję, aby zmniejszyć opóźnienie między ruchami użytkownika a aktualizacjami wyświetlacza.

Włącz tę funkcję

  1. W menu głównym Unity kliknij Edit > Project Settings (Edytuj > Ustawienia projektu).
  2. Rozwiń sekcję Zarządzanie wtyczkami XR.
  3. Wybierz kartę odpowiadającą Twojemu obecnemu urządzeniu XR.
  4. Otwórz sekcję Grupy funkcji OpenXR.
  5. W sekcji Wszystkie funkcje włącz Przestrzenną deformację aplikacji.

    Ustawienia Unity dla spacewarp

Włącz próbkowanie Vulkan

Podpróbkowanie w Vulkanie umożliwia tworzenie i próbkowanie obrazów o różnej gęstości za pomocą map gęstości fragmentów. Ta funkcja Vulkan umożliwia renderowanie i przenoszenie do pamięci różnych obszarów ekranu w różnych rozdzielczościach, co jest szczególnie przydatne w przypadku renderowania foveated, w którym obszary peryferyjne mogą korzystać z niższej rozdzielczości.

Zalety

  • Zapewnia różną poprawę w połączeniu z renderowaniem foveated, w zależności od formatu.
  • Zmniejsza aliasing na obszarach peryferyjnych dzięki filtrowaniu dwuliniowemu.
  • Umożliwia wydajne renderowanie ze zmienną częstotliwością w różnych regionach ekranu.

Włącz tę funkcję

  1. W menu głównym Unity kliknij Edit > Project Settings (Edytuj > Ustawienia projektu).
  2. Rozwiń sekcję XR Plug-in Management (Zarządzanie wtyczkami XR), a potem kliknij OpenXR.
  3. Kliknij ikonę koła zębatego obok opcji Android XR (rozszerzenia): zarządzanie sesjami.
  4. Włącz Subsampling (Vulkan).

    Ustawienia Unity dotyczące próbkowania Vulkan

Włącz późne zatrzaskiwanie

Późne zatrzaskiwanie to technika, która minimalizuje opóźnienie między ruchem fizycznym użytkownika a wynikającą z niego zmianą wizualną na wyświetlaczu. Umożliwia to aktualizowanie pozycji głowy na późnym etapie procesu generowania klatek, co zwiększa komfort i odczuwalną liczbę klatek na sekundę w aplikacjach XR. Osiąga to dzięki zmniejszeniu opóźnienia wejściowego o czas zbliżony do czasu trwania całej klatki.

Zalety

  • Znacznie skraca czas oczekiwania na wyświetlenie obrazu (MTP).
  • Zwiększa komfort użytkownika i zmniejsza objawy choroby lokomocyjnej.
  • Zwiększa stabilność i precyzję.

Włącz tę funkcję

Aby włączyć późne zatrzaskiwanie, włącz tę funkcję w czasie działania aplikacji:

private XRDisplaySubsystem xrDisplay;

private XRDisplaySubsystem.LateLatchNode lateLatchNode = XRDisplaySubsystem.LateLatchNode.Head;

void Start()
{
    List<XRDisplaySubsystem> xrDisplaySubsystems = new();

    SubsystemManager.GetSubsystems(xrDisplaySubsystems);

    if (xrDisplaySubsystems.Count >= 1)
    {
        xrDisplay = xrDisplaySubsystems[0];
    }
}

void Update()
{
    if (xrDisplay != null)
    {
        transform.position += new Vector3(Mathf.Epsilon, 0, 0);

        Quaternion rot = transform.rotation;

        rot.x += Mathf.Epsilon;

        transform.rotation = rot;

        xrDisplay.MarkTransformLateLatched(transform, lateLatchNode);
    }
}