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:
- Wątek aplikacji — procesor CPU — odpowiedzialny za logikę aplikacji, w tym przetwarzanie danych wejściowych, animacji, fizyki i innej logiki aplikacji.
- 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.
- 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.
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:
- Analizatory wydajności grafiki Intel
- Debugery grafiki programu Visual Studio
- Unity Profiler
- Debuger klatek aparatu Unity
- Nierealne szczegółowe informacje
- PIX
- Profilowanie procesora GPU w trybie nierealnym
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:
- Zwiększa się szybkość klatek aplikacji, a następnie prawdopodobnie jest powiązana z procesorem GPU
- 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:
- Niższe rozdzielczości tekstur
- 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:
- Liczba obiektów do renderowania/przetwarzania
- Liczba operacji na cieniowania
- Liczba etapów procesora GPU do końcowego wyniku (cieniowania geometrii, efektów przetwarzania końcowego itd.)
- 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:
- 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.
- 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ż
- Zalecenia dotyczące wydajności aparatu Unity
- Zalecane ustawienia dla aparatu Unity
- Zalecenia dotyczące wydajności dla rozwiązania Unreal
- Zalecenia materialne w programie Unreal
- Optymalizowanie modeli 3D
- Najlepsze rozwiązania dotyczące konwertowania i optymalizowania modeli 3D w czasie rzeczywistym
- Wytyczne dotyczące wydajności dla artystów i projektantów dla Unreal
- Najlepsze rozwiązania vr dla Unreal