Podstawowe komendy do diagnostyki wydajności gier w Unreal Engine 5.1
Utworzony przez Łukasz Sujkowski, dnia 25.01.2023
10811
0
Jednym z kluczowych elementów podczas tworzenie gier komputerowych (szczególnie mobilnych) jest diagnostyka wydajności. Zanim jednak przejdziemy do opisu podstawowych komend diagnostycznych, zajmiemy się omówieniem kilku bardzo istotnych kwestii.
Pierwsza z nich to pojęcie draw call, które można przetłumaczyć na żądanie wyrysowania lub wywołanie funkcji rysującej. Jest to żądanie wyrenderowania przez GPU jakiejś grupy wielokątów, zainicjalizowane przez CPU. Bardzo istotną informacja jest fakt, że model posiadający dwa materiały wygeneruje dwa draw calle, a więc korzystanie z slotów materiałów może nie być tak optymalne jakby się to mogło wydawać.
Kolejne pojęcie to render pass będące zbiorem wywołań funkcji rysującej (draw calls) wykonywanych przez GPU, pogrupowanych zgodnie z ich funkcją w procesie renderingu (np. post-processing, renderowanie przeźroczystości obiektów itd.).
Ostatnią kwestią będzie omówienie jednostki pomiaru wydajności. W przypadku benchmarku kart graficznych używamy jednostki FPS (klatki na sekundę), niestety w naszym przypadku nie jest ona użyteczna. Za przykład może posłużyć sytuacja w której, chcemy obliczyć ile gra będzie osiągała klatek na sekundę po aktywacji kilku funkcji. Przyjmijmy, że bazowo bez funkcji mamy 30 klatek na sekundę, funkcja A pochłania 15 klatek, funkcja B na przykład 20 klatek. Przy takim założeniu jeśli aktywujemy obie funkcje gra osiągnie -5 klatek na sekundę. Czyli co, gra zacznie się cofać?
Z tego powodu korzystamy po prostu z czasu wykonania mierzonego w milisekundach. Jeśli nasza gra będzie wyliczała jedną klatkę gry w 20 ms wtedy łatwo policzyć, że osiągniemy 50 klatek na sekundę (1000/20=50). Jeśli zaś ten czas wzrośnie do 5000 ms to kolejną klatkę zobaczymy po 5 sekundach od pojawienia się poprzedniej.
Okej, teraz możemy przejść do omawiania komend. Zacznijmy od komend stat fps oraz stat unit. Pierwsza z nich wyświetla liczbę klatek na sekundę oraz czas renderowania jednej klatki. Druga wygląda podobnie, lecz jest rozszerzona o kilka istotnych mierników.
- Frame - całkowity czas renderowania poprzedniej klatki.
- Game - czas wykonania kodu rozgrywki przez CPU.
- Draw - czas przygotowania danych dla GPU przez CPU.
- GPU - czas renderowania klatki przez kartę graficzną.
- RHIT - czas renderowania dla wątku RHI (OpenGL, D3D12).
- Draws - aktualna liczba wywołań funkcji rysującej (draw calls).
- Prims - aktualna liczba rysowanych trójkątów.
Dalej mamy stat gpu, będące wykazem czasów dla różnych zbiorów wywołań funkcji rysującej (render passes).
Jak widać rozbija ona czas renderowania GPU na kilka istotnych dla nas grup, takich jak czas renderowanie UI czy czas renderowania post-processingu.
Oczywiście istnieje o wiele więcej komend, polecam zapoznać się z nimi na własną rękę:
- stat rhi
- stat Foliage
- stat Landscape
- stat Particles
- stat LightRendering
- stat ShadowRendering
Komentarze
Brak komentarzy...