Informacje o wydajności rzeczywistości mieszanej

Ten artykuł stanowi wprowadzenie do zrozumienia znaczenia wydajności aplikacji Mixed Reality. Środowisko użytkownika może być znacznie obniżone, jeśli aplikacja nie działa z optymalną szybkością klatek. Hologramy będą wyglądać niestabilnie, a śledzenie głowy środowiska będzie niedokładne, co prowadzi do złego środowiska użytkownika. Wydajność musi być uważana za pierwszą klasę do opracowywania rzeczywistości mieszanej, a nie zadania polskiego.

Poniżej wymieniono wydajne wartości szybkości klatek dla każdej platformy docelowej.

Platforma Docelowa szybkość klatek
HoloLens 60 KLATEK NA SEKUNDĘ
komputery Windows Mixed Reality Ultra 90 FPS
komputery Windows Mixed Reality 60 KLATEK NA SEKUNDĘ

Poniższa struktura przedstawia najlepsze rozwiązania dotyczące osiągania docelowych szybkości klatek. Aby uzyskać wskazówki dotyczące mierzenia i poprawiania szybkości klatek w środowisku aparatu Unity, zalecamy przeczytanie zaleceń dotyczących wydajności aparatu Unity

Opis wąskich gardeł wydajności

Jeśli aplikacja ma niewystarczającą szybkość klatek, pierwszym krokiem jest analizowanie i zrozumienie, gdzie aplikacja intensywnie korzysta z obliczeń. Istnieją dwa podstawowe procesory odpowiedzialne za pracę w celu renderowania sceny: procesor CPU i procesor GPU, z których każda obsługuje różne aspekty aplikacji Mixed Reality. Trzy kluczowe miejsca, w których mogą wystąpić wąskie gardła, to:

  1. Wątek aplikacji — procesor CPU — odpowiedzialny za logikę aplikacji, w tym przetwarzanie danych wejściowych, animacji, fizyki i innej logiki aplikacji.
  2. Wątek renderowania — procesor CPU do procesora GPU — odpowiada za przesyłanie wywołań rysowania do procesora GPU. Gdy aplikacja chce renderować obiekt, taki jak moduł lub model, ten wątek wysyła żądanie do procesora GPU w celu wykonania operacji.
  3. Procesor GPU — najczęściej obsługuje potok grafiki aplikacji w celu przekształcania danych 3D (modeli, tekstur itd.) na piksele. Ostatecznie tworzy obraz 2D do przesłania do ekranu urządzenia.

Okres istnienia ramki

Ogólnie rzecz biorąc, aplikacje holoLens będą powiązane z procesorem GPU, ale nie zawsze. Skorzystaj z poniższych narzędzi i technik, aby zrozumieć, gdzie dana aplikacja jest wąskim gardłem.

Jak analizować aplikację

Istnieje wiele narzędzi, które umożliwiają zrozumienie profilu wydajności i potencjalnych wąskich gardeł w aplikacji rzeczywistości mieszanej.

Poniżej przedstawiono kilka typowych narzędzi ułatwiających zbieranie szczegółowych informacji o profilowaniu dla aplikacji:

Jak profilować w dowolnym środowisku

Jednym ze sposobów określenia, czy aplikacja jest powiązana z procesorem GPU lub procesorem CPU, jest obniżenie rozdzielczości danych wyjściowych elementu docelowego renderowania. Zmniejszając liczbę pikseli do obliczenia, zmniejszysz obciążenie procesora GPU. Urządzenie będzie renderowane na mniejszą teksturę, a następnie próbkę w górę, aby wyświetlić końcowy obraz.

Po obniżeniu rozdzielczości renderowania, jeśli:

  1. Zwiększa się szybkość klatek aplikacji, a następnie prawdopodobnie jest powiązana z procesorem GPU
  2. Szybkość klatek aplikacji bez zmian, a następnie prawdopodobnie jest powiązana z procesorem CPU

Uwaga

Aparat Unity umożliwia łatwe modyfikowanie rozdzielczości docelowej renderowania aplikacji w czasie wykonywania za pomocą właściwości XRSettings.renderViewportScale . Końcowy obraz przedstawiony na urządzeniu ma stałą rozdzielczość. Platforma będzie próbkować dane wyjściowe niższej rozdzielczości, aby utworzyć obraz o wyższej rozdzielczości do renderowania na ekranach.

UnityEngine.XR.XRSettings.renderScale = 0.7f;

Jak ulepszyć aplikację

Zalecenia dotyczące wydajności procesora CPU

Na ogół większość pracy w aplikacji rzeczywistości mieszanej na procesorze polega na wykonaniu "symulacji" sceny i przetwarzaniu logiki aplikacji. Następujące obszary są przeznaczone do optymalizacji:

  • Animacje
  • Fizyki
  • Alokacje pamięci
  • Złożone algorytmy (tj. odwrotność kinematyki, znajdowanie ścieżki)

Zalecenia dotyczące wydajności procesora GPU

Informacje o przepustowości a współczynniku wypełnienia

Podczas renderowania ramki na procesorze GPU aplikacja jest powiązana z przepustowością pamięci lub szybkością wypełnienia.

  • Przepustowość pamięci to szybkość odczytów i zapisów, które procesor GPU może wykonywać z pamięci
    • Aby zidentyfikować ograniczenia przepustowości, zmniejsz jakość tekstury i sprawdź, czy szybkość klatek została ulepszona.
    • Aby zidentyfikować ograniczenia szybkości wypełnienia, obniż rozdzielczość ekranu i sprawdź, czy poprawia się szybkość klatek.

Uwaga

Jeśli pracujesz z aparatem Unity, zapoznaj się z naszymi zaleceniami dotyczącymi wydajności procesora GPU specyficznymi dla aparatu Unity. - W a unity użyj właściwości XRSettings.renderViewportScale

Przepustowość pamięci zwykle obejmuje optymalizacje w celu:

  1. Niższe rozdzielczości tekstur
  2. Używaj mniejszej liczby tekstur (normalnych, specular itd.)

Szybkość wypełnienia koncentruje się na zmniejszeniu liczby operacji, które należy obliczyć dla końcowego renderowanego piksela, w tym:

  1. Liczba obiektów do renderowania/przetwarzania
  2. Liczba operacji na cieniowania
  3. Liczba etapów procesora GPU do końcowego wyniku (cieniowania geometrii, efektów przetwarzania końcowego itd.)
  4. Liczba pikseli do renderowania (rozdzielczość wyświetlania)

Zmniejsz liczbę wielokątów

Wyższa liczba wielokątów powoduje zwiększenie liczby operacji procesora GPU, dlatego zmniejszenie liczby wielokątów w scenie skraca czas renderowania. Istnieją inne czynniki, które sprawiają, że cieniowanie geometrii jest kosztowne, ale liczba wielokątów jest najprostszą metryką określającą, ile pracy zajmie renderowanie sceny.

Limit przerysowania

Duże przerysowanie występuje, gdy wiele obiektów jest renderowanych, ale nie jest wyświetlanych na ekranie, ponieważ są one ukryte przez obiekt occluding. Wyobraź sobie, że patrzysz na ścianę, która ma za sobą obiekty. Cała geometria będzie przetwarzana do renderowania, ale tylko nieprzezroczysta ściana musi być renderowana, co powoduje niepotrzebne operacje.

Programy do cieniowania

Cieniowania to małe programy uruchamiane na procesorze GPU i wykonujące dwa ważne kroki renderowania:

  1. Określanie, które wierzchołki powinny być rysowane i gdzie znajdują się w przestrzeni ekranu (cieniowanie wierzchołków)
    • Cieniowania wierzchołków jest wykonywany na wierzchołek dla każdej siatki.
  2. Określanie koloru każdego piksela (cieniowanie pikseli)
    • Cieniowanie pikseli jest wykonywane na piksel i renderowane przez geometrię do docelowej tekstury renderowania.

Zazwyczaj cieniowanie wykonuje wiele przekształceń i obliczeń oświetlenia. Chociaż złożone modele oświetlenia, cienie i inne operacje mogą generować fantastyczne wyniki, są również dostarczane z ceną. Zmniejszenie liczby operacji obliczanych w cieniowaniu może znacznie zmniejszyć pracę wymaganą dla procesora GPU na ramkę.

Zalecenia dotyczące kodowania cieniowania
  • Używaj filtrowania dwuliniowego, jeśli jest to możliwe
  • Zmiana układu wyrażeń w celu użycia funkcji wewnętrznych MAD w celu pomnożenia i dodawania w tym samym czasie
  • Oblicz wstępnie jak najwięcej na procesorze i przekaż stałe do materiału
  • Faworyzowanie przenoszenia operacji z cieniowania pikseli do cieniowania wierzchołków
    • Ogólnie rzecz biorąc, liczba wierzchołków jest znacznie mniejsza niż liczba pikseli (720p to 921 600 pikseli, 1080p to 2073 600 pikseli itd.)

Usuwanie etapów procesora GPU

Efekty przetwarzania końcowego mogą być kosztowne i zwiększyć szybkość wypełniania aplikacji, w tym techniki anty aliasowania, takie jak MSAA. Na urządzeniu HoloLens zalecamy unikanie tych technik i dodatkowych etapów cieniowania, takich jak geometria, kadłub i cieniowanie obliczeniowe.

Zalecenia dotyczące pamięci

Nadmierne przydzielanie pamięci i operacje cofania przydziału mogą spowodować niespójną wydajność, zamarznięte ramki i inne szkodliwe zachowanie. Szczególnie ważne jest zrozumienie zagadnień dotyczących pamięci podczas opracowywania w środowisku Unity, ponieważ zarządzanie pamięcią jest kontrolowane przez moduł odśmiecający pamięć.

Buforowanie obiektów

Buforowanie obiektów to popularna technika zmniejszania kosztów ciągłych alokacji i cofania przydziałów obiektów. Odbywa się to przez przydzielanie dużej puli identycznych obiektów i ponowne użycie nieaktywnych, dostępnych wystąpień z tej puli zamiast stale duplikować i niszczyć obiekty w czasie. Pule obiektów doskonale nadają się do ponownego użycia składników, które mają zmienny okres istnienia w aplikacji.

Zobacz też