Poprawianie liczby klatek na sekundę, zmniejszanie obciążenia GPU i skracanie czasu oczekiwania na renderowanie za pomocą ustawień rozszerzeń Android 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świetlanego obrazu.

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 obrzeżach 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 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 zmniejsza opóźnienie ruchu do fotonu (MTP).
  • Zwiększa komfort użytkownika i ogranicza chorobę lokomocyjną.
  • 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);
    }
}