Wytyczne dotyczące wydajności usługi Mesh
Wydajność
Ten artykuł stanowi wprowadzenie do zrozumienia znaczenia wydajności podczas tworzenia zawartości w usłudze Mesh. Szybkość klatek to najłatwiejsza jednostka do racjonalizacji wydajności. Zwykle szybkość klatek jest mierzona w "klatkach na sekundę" (fps) lub ile razy aplikacja może renderować obraz na sekundę. Środowisko użytkownika może być znacznie obniżone, jeśli zawartość nie jest uruchamiana z optymalną szybkością klatek. Aby ułatwić śledzenie i osiąganie szybkości klatek na klatce ramowej, usługa Mesh udostępnia różne narzędzia i zalecenia.
W poniższej tabeli wymieniono docelową szybkość ramek na obsługiwaną platformę Mesh.
PC | Android (Quest) |
---|---|
Monitorowanie częstotliwości odświeżania (minimum 30fps) | 72fps |
Proste i złożone sceny
Podobnie jak we wszystkich projektach 3D, w usłudze Mesh występuje kompromis między wiernością wizualną a wydajnością. W zależności od maszyny z uruchomioną usługą Mesh użytkownik może mieć obniżoną wydajność, zwłaszcza jeśli scena jest złożona.
Pomyśl o wynikach, takich jak budżet finansowy. Jeśli masz 100 dolarów do wydania, nie możesz wydać 60 dolarów renderowania złożonego środowiska, 40 dolarów symulujących zaawansowaną fizykę i 20 dolarów dla skryptów wizualnych - skończysz wydatki na budżet. Jako deweloper musisz dokonać kompromisów między wiernością wizualizacji, złożonością interakcji, liczbą użytkowników i innymi systemami. Zespół usługi Mesh wygenerował listę progów wydajności, które nie są regułą, ale przewodnikiem dotyczącym programowania.
Metodologia profilowania
Tworzenie środowisk w usłudze Mesh zwykle obejmuje trzy kroki.
- Tworzenie zawartości w środowisku Unity
- Przekazywanie do usługi Microsoft Mesh
- Uruchamianie zawartości w aplikacji mesh
W ramach kroku 1 zalecamy użycie kombinacji zawartości Analizator wydajności (CPA) i profilera wydajności znalezionego w pakiecie zestawu narzędzi Mesh, który jest wymagany dla dowolnego projektu aparatu Unity używanego do generowania środowiska usługi Mesh. Podczas drugiego kroku narzędzie CPA jest uruchamiane automatycznie. Na koniec podczas kroku trzeciego ostatniego profilowanie powinno odbywać się za pośrednictwem wbudowanego profilera wydajności usługi Mesh.
Narzędzia do analizowania wydajności
Analizator wydajności zawartości (CPA)
Zalecamy użycie Analizator wydajności zawartości (CPA), aby zmaksymalizować wydajność środowiska usługi Mesh. Narzędzie CPA może statycznie analizować zawartość w czasie tworzenia. Za pomocą cpA można przeprowadzać inspekcję liczby trójkątów, partii, wykorzystania pamięci tekstury i nie tylko. Dzięki temu można przechwytywać problemy i możliwości optymalizacji zawartości przed przekazaniem zawartości do usługi Mesh.
Aby uruchomić narzędzie CPA, wybierz pozycję Mesh Toolkit>Content Analizator wydajności z elementów menu.
Problemy i sugestie są zgłaszane za pośrednictwem okna edytora w środowisku Unity.
Ważne
Część analizatorów CPA zostanie uruchomiona automatycznie podczas przekazywania zawartości do usługi Mesh. Ponieważ nie wszystkie testy mogą być uruchamiane automatycznie, dobrym rozwiązaniem jest ręczne uruchomienie cpa w ramach procesu programowania.
Profiler wydajności
Profiler wydajności udostępnia proste okno do wyświetlania szybkości klatek, złożoności sceny i użycia pamięci w projekcie Mesh na wszystkich platformach. Profiler wydajności jest dostępny w aplikacji Mesh i w zestawie narzędzi usługi Mesh.
Aby wyświetlić profilera wydajności w aplikacji Mesh, otwórz panel ustawień i wybierz pozycję Dla deweloperów>Profiler wydajności. Profiler wydajności zostanie wyświetlony w górnej części okna.
W przypadku korzystania z profilera wydajności poszukaj nieodebranych ramek, które są wyświetlane jako czerwone pola oznaczone znakiem "x". Pominięte ramki wskazują, że zawartość nie osiąga docelowej szybkości ramek usługi Mesh i może wymagać optymalizacji. Złożoność sceny i użycie pamięci są wyświetlane w nieodebranych wskaźnikach ramek. Te liczby mogą wskazywać, dlaczego zawartość nie spełnia docelowej szybkości klatek w usłudze Mesh.
Tekst w profilerze wydajności zmieni kolor na czerwony, gdy metryka nie spełnia zalecanego progu wydajności usługi Mesh. Więcej szczegółów dotyczących progów wydajności znajduje się w sekcji postępowania.
Ważne
W aplikacji Mesh nie można wyświetlić partii. Są one dostępne tylko w edytorze aparatu Unity.
Należy również zwrócić uwagę na dolny pasek pamięci, aby zapewnić, że użycie pamięci nie zmienia się szybko ani nie zbliża się do limitu pamięci aplikacji.
Aby wyświetlić profiler wydajności w edytorze aparatu Unity, upewnij się, że w scenie jest składnik Konfiguracja emulatora usługi Mesh. Upewnij się, że ustawienie Początkowa liczba ekranów ma wartość zero. Jeśli jest to jeden lub wyższy, podczas odtwarzania nie będzie można przełączać się w profilerze wydajności.
Kliknij przycisk Odtwarzania aparatu Unity, aby wprowadzić tryb odtwarzania, przełącz profiler wydajności za pomocą "v". Profiler wydajności pojawi się w górnej części okna gry.
Ważne
Podczas przeglądania profilera wydajności w edytorze aparatu Unity bardziej szczegółowe informacje, takie jak liczba partii i milisekundowy czas potrzebny na wykonanie niektórych podsystemów. Należy pamiętać, że te metryki są względnym przybliżeniem wydajności, a ostateczne profilowanie powinno nastąpić w aplikacji mesh.
Jeśli zastanawiasz się, jaki jest czas milisekund u dołu profilera wydajności, możesz znaleźć te informacje w sekcji Progi wydajności.
Inne narzędzia
Profiler CPA i Performance Profiler są niestandardowe dla usługi Mesh, ale istnieje również kilka doskonałych narzędzi do profilowania zawartości w środowisku Unity:
- Profiler aparatu Unity
- Debuger ramek aparatu Unity
- RenderDoc (WAŻNE: RenderDoc może wykonywać przechwytywanie tylko z poziomu edytora aparatu Unity). Kompilacje aplikacji usługi Mesh nie będą działać).
Progi wydajności
Optymalizacja pod kątem wydajności może być działaniem równoważenia w zależności od scenariusza, dla którego programujesz, oraz środowiska, które chcesz osiągnąć. Renderowanie sceny w usłudze Mesh jest bezpośrednią konsekwencją sposobu tworzenia zawartości środowiska. Poniżej przedstawiono sugestie renderowania dla naszych bieżących platform.
Progi renderowania komputerów
Polycount | Partie | Post-processing |
---|---|---|
<Ok. 500 tys. trójkątów | ~200 partii | Disabled |
Tekstury | Mapy światła | Rozdzielczość skybox |
< ~160 MB | < ~80 MB | 2048x4096 |
Progi renderowania systemu Android (Quest)
Polycount | Partie | Post-processing |
---|---|---|
<~80 tys. Trójkąty | ~50 partii | Disabled |
Tekstury | Mapy światła | Rozdzielczość skybox |
< ~16 MB | < ~20 MB | 1024x2048 |
Możesz zauważyć, że ograniczenia cieniowania nie są określone w powyższych tabelach. Ponieważ usługa Mesh używa uniwersalnego potoku renderowania (URP) aparatu Unity, sugerujemy użycie tańszych modułów cieniowania urP (takich jak potok renderowania uniwersalnego/oświetlony lub uniwersalny potok renderowania/proste lit). Rozumiemy również wartość cieniowania niestandardowego. Ogólnie rzecz biorąc, staramy się zachować niestandardowe cieniowania dla większości środowiska w ramach poniższych progów:
Matematyka wierzchołka | Matematyka fragmentów | Tekstura |
---|---|---|
< 30 operacji | < 120 operacji | < 2 odnośniki |
Ważne
Zliczanie operacji cieniowania jest w niedoskonałej metryce do obliczania wydajności cieniowania, deweloper cieniowania powinien również profilować ich cieniowanie uruchomione w usłudze Mesh, aby sprawdzić, czy działa wydajnie.
Jeśli zastanawiasz się, jak potok renderowania urP jest skonfigurowany dla aplikacji usługi Mesh, możesz sprawdzić określone programy renderowania platformy w katalogu \Library\PackageCache\com.microsoft.mesh.toolkit\mesh.toolkit.uploader\Assets\URP .
Progi skryptów
Usługa Mesh umożliwia tworzenie interaktywnej zawartości za pośrednictwem skryptów wizualnych, skryptów w chmurze, fizyki siatki i/lub webSlate. Podczas wyświetlania profilera wydajności w edytorze aparatu Unity w milisekundach (ms) czas wykonywania niektórych podsystemów jest wyświetlany w dolnej części profilera. Gdy tekst zmieni się z zielonego na czerwony, który wskazuje, że podsystem może być ponad budżet. Poniższa tabela zawiera więcej informacji na temat tych budżetów.
Nazwa podsystemu | Maksymalny budżet ramek | opis |
---|---|---|
Zachowanie | Nie dotyczy | Czas potrzebny na aktualizację wszystkich lokalnych skryptów MonoBehaviour (C# i Visual) |
Renderowanie | 25% | Czas milisekund renderowania sceny przez procesor |
WebSlate | Nie dotyczy | Godzina aktualizacji i renderowania wszystkich obiektów WebSlate w scenie w milisekundach |
Phys Sim | 15% | Czas na krok symulacji PhysX w milisekundach |
Synchronizacja obiektów fizycznych | 15% | Czas milisekundowy w celu zsynchronizowania wszystkich ciał fizyki |
Phys Effx | 10% | Godzina milisekund aktualizowania zachowań fizyki na zamówienie |
Użytkownik programu VS | 15% | Milisekundowy czas spędzony na grafach skryptów wizualnych umieszczonych w scenie |
VS Env | 10% | Milisekundowy czas spędzony na aktualizowaniu infrastruktury skryptu wizualnego |
VS Net | 10% | Milisekundowy czas spędzony na synchronizowaniu stanu sieci skryptu wizualnego |
Wartości "Maksymalna wartość procentowa ramki" wymienione powyżej są zaleceniami opartymi na zawartości ogólnej. Jako deweloper należy zrównoważyć te systemy w celu zapewnienia, że rama może być aktualizowana w czasie przydzielanym.
Zasoby dotyczące wydajności i optymalizacji
Podstawy wydajności grafiki https://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html
Uniwersalny potok renderowania (URP) https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/index.html
SRP Batcher https://docs.unity3d.com/Manual/SRPBatcher.html
Renderowanie z pojedynczym wystąpieniem i niestandardowe cieniowania https://docs.unity3d.com/Manual/SinglePassInstancing.html