Spieleleistung analysieren und optimieren

In diesem Leitfaden wird beschrieben, wie Sie die Spieleleistung auf Android-Geräten analysieren und optimieren, um für eine reibungslose Nutzererfahrung zu sorgen. Dabei geht es darum, Leistungsengpässe zu identifizieren, zwischen CPU- und GPU-Problemen zu unterscheiden und Optimierungsergebnisse zu überprüfen.

Egal wie unterhaltsam oder fesselnd ein Spiel ist: Wenn es auf Mobilgeräten nicht gut läuft, werden die Spieler es nicht genießen und es wird nicht so erfolgreich sein. Auch bei unterhaltsamen Spielen kann es zu Problemen wie einer niedrigen Framerate (FPS) oder einer Überhitzung des Geräts kommen. Diese Probleme führen zu Unzufriedenheit bei den Spielern. Daher ist es wichtig, die Spielleistung zu verbessern und zu wissen, wie man sie optimiert.

Der Prozess zur Leistungsoptimierung umfasst die folgenden Schritte:

  1. Gesamtleistung des Spiels messen: Leistungseinbußen lassen sich szenenweise quantifizieren, um Anomalien zu erkennen.

  2. Prüfung der CPU- und GPU-Auslastung: Ermitteln Sie die zugrunde liegende Ursache, unabhängig davon, ob sie CPU- oder GPU-gebunden ist.

    Tools:Unreal Insight, Unity Profiler, Perfetto und Tools zur Leistungsmessung.

  3. CPU-Optimierung. Beheben Sie die erkannten Leistungsengpässe.

    Tools:Unreal Insight, Unity Profiler, Perfetto und Simpleperf.

  4. GPU-Optimierung: Beheben Sie die erkannten Leistungsengpässe.

    Tools:RenderDoc, Arm Mobile Studio, AGI, anbieterspezifisches Tool.

  5. A/B-Tests Führen Sie A/B-Tests durch, um die Wirksamkeit der implementierten Optimierungen zu überprüfen.

    Tools:Unreal Insight, Unity Profiler, Perfetto und Tools zur Leistungsmessung, CPU- oder GPU-Frequenzsperre und RenderDoc.

  6. Dieser iterative Prozess (1–5) wird fortgesetzt, bis die Ziel-FPS und die thermischen Parameter erreicht sind.

Voraussetzungen

Umfassende Spielleistung analysieren

Sie müssen die Gesamtleistung des Spiels prüfen und alle szenenbasierten Leistungseinbußen oder Anomalien identifizieren. Bevor Sie Ihr Spiel optimieren, sollten Sie seine aktuelle Leistung prüfen. Da Spiele viele Benutzeroberflächen und Szenen enthalten, sollten Sie Szenen mit hoher CPU- oder GPU-Auslastung oder Layouts mit unerwarteter Leistung analysieren, um Leistungsbeeinträchtigungen und die CPU- oder GPU-Auslastung pro Szene zu beobachten.

  1. Leistungseinbußen quantifizieren:Verwende Tools zur Leistungsmessung, um die Gesamtleistung des Spiels zu messen. Messen Sie die Leistung pro Szene, um bestimmte Bereiche mit Beeinträchtigungen oder Anomalien zu identifizieren.
  2. Problematische Szenen identifizieren:Analysieren Sie die Daten, um Szenen mit hoher CPU- oder GPU-Auslastung zu finden oder in denen Bildschirmlayouts nicht die erwartete Leistung erbringen.
  3. Trace-Daten erfassen:Verwenden Sie Trace-Tools, um detaillierte Leistungsdaten für die identifizierten problematischen Szenen zu erfassen.

CPU- oder GPU-Engpässe identifizieren

Wenn das Spiel die Ziel-FPS nicht erreicht, müssen Sie feststellen, ob das Problem an der CPU oder an der GPU liegt. Die Analyse des CPU- und GPU-Verhaltens ist entscheidend, um Optimierungsmöglichkeiten zu finden, auch wenn das Gerät während des Spielens heiß wird oder zu viel Strom verbraucht. Sie können verschiedene Methoden verwenden, um herauszufinden, ob das System CPU- oder GPU-gebunden ist.

  1. Trace-Daten analysieren:Verwenden Sie Ihr bevorzugtes Tool, um Trace-Daten zu analysieren:

    • Unreal Insight (Unreal Engine): Analysieren Sie den Trace, um die Zeit für GameThread, RenderThread und RHIThread zu sehen.
      • Wenn GameThread oder RenderThread das Frame-Zeitlimit überschreiten (z. B. 33, 3 ms für 30 fps), ist das Spiel CPU-gebunden.
      • Wenn RHIThread eine längere Ausführung aufweist oder den Großteil der Frame-Zeit ausmacht, ist das Spiel GPU-gebunden.
    Unreal Insight-Ablaufverfolgungszeitachse mit Ausführungszeiten für GameThread, RenderThread und RHIThread
    Abbildung 2. Unreal-Insight-Trace mit GameThread, RenderThread und RHIThread (zum Vergrößern klicken).
    • Unity Profiler (Unity): Wenn der Hauptthread viel Zeit für Markierungen wie Gfx.WaitForPresentOnGfxThread benötigt, während der Renderthread Gfx.PresentFrame oder <GraphicsAPIName>.WaitForLastPresent anzeigt, ist das Spiel GPU-gebunden.
    Unity Profiler-Zeitachse mit dem Hauptthread, der auf Gfx.WaitForPresentOnGfxThread wartet
    Abbildung 3. GPU-gebundenes Beispiel für Unity Profiler (zum Vergrößern klicken).
    • Perfetto:Analysieren Sie die Zuweisung von CPU-Kernen und Details zur Thread-Ausführung. Diese Analyse erleichtert die Identifizierung von Leistungsengpässen durch die detaillierte Überprüfung von Informationen zur Thread-Ausführung.
    • CPU-Overhead:Der Trace weist darauf hin, dass die Arbeitslast auf dem GameThread und RenderThread in Verbindung mit VSync für Verzögerungen im QueuePresent des RHI-Threads verantwortlich ist. Dies deutet auf ein CPU-gebundenes Szenario hin.

      Perfetto-Trace mit Ausführungszeiten für GameThread, RenderThread und RHIThread
      Abbildung 4. Perfetto-Traces mit Details zur CPU-Ausführung (zum Vergrößern klicken).
    • GPU-Overhead:Wenn die GPU-Fertigstellungszeit das Frame-Zeitlimit überschreitet, z. B. 25 ms, ist das Spiel GPU-gebunden. Der Trace zeigt, dass die GPU-Fertigstellung 25 ms überschreitet. Das deutet auf ein GPU-gebundenes Szenario hin.

      Perfetto-Trace mit GPU-Abschlussblock, der auf den GPU-Abschluss wartet
      Abbildung 5. Perfetto-Traces mit Details zum GPU-Overhead (zum Vergrößern klicken)
  2. Unreal Engine-Befehle für Statistiken verwenden:

    • stat unit:Vergleichen Sie die Zeit, die den Threads „Game“, „Draw“ und „RHI“ zugewiesen ist. Wenn die Game- und Draw-Zeiten niedrig sind, die RHI-Zeit aber das Frame-Zeitlimit durchgehend überschreitet, ist das Spiel GPU-gebunden. Wenn beispielsweise die erforderliche FPS 30 beträgt (entspricht 33,33 ms pro Frame) und sowohl der Game- als auch der Draw-Thread konstant im Bereich von 10–15 ms bleiben, die RHI jedoch konstant 30 ms überschreitet, deutet dies stark auf ein GPU-gebundenes Szenario hin.
    Statistikeinheit-Overlay mit den Ausführungszeiten für Frame, Spiel, Draw, GPU und RHIT
    Abbildung 6. Mit der statistischen Einheit lässt sich die Schätzung von GPU-gebundenen Bedingungen vereinfachen.
    • stat VulkanRHI:Dauer von „Warteschlange – Senden“ und „Warteschlange – Präsentieren“ prüfen.
    Stat-Overlay für VulkanRHI mit Zykluszählern für „Queue Submit“ und „Queue Present“
    Abbildung 7. Mit dem Stat „VulkanRHI“ lassen sich GPU-gebundene Bedingungen schätzen (zum Vergrößern klicken).
    • stat slow:Untersuchen Sie die den Threads „Game“, „Render“ und „RHI“ zugewiesene Zeit, um Hindernisse zu ermitteln.
  3. Leistungsmesswerte prüfen:Nutzen Sie die Ergebnisse Ihrer umfassenden Spielleistungsanalyse. Auf Android-Geräten:

    • CPU-gebunden:Die (normalisierte) CPU-Auslastung liegt über 15%, die GPU-Auslastung und die FPS sind niedrig.
    • GPU-gebunden:Die GPU-Nutzung liegt über 90%.

    Wenn die FPS und die GPU-Nutzung niedrig sind, während die CPU-Nutzung 15 % überschreitet, kann die Situation als CPU-gebunden betrachtet werden.

    Tabellen mit Leistungsmesswerten für CPU- und GPU-gebundene Szenarien
    Abbildung 8. Leistungsmesswerte mit CPU- und GPU-Nutzung.

CPU-Leistung optimieren

Wenn die Analyse darauf hindeutet, dass das Spiel CPU-gebunden ist, sollten Sie genauer untersuchen, welche Threads oder APIs den Engpass verursachen.

Ausführliche Informationen finden Sie unter CPU, GPU Optimization Tips for Android.

GPU-Leistung optimieren

Wenn die Analyse darauf hindeutet, dass das Spiel GPU-gebunden ist, sollten Sie Frame-Debugger verwenden, um die Render-Pipeline und die Draw-Aufrufe zu analysieren.

Ausführliche Informationen finden Sie unter CPU, GPU Optimization Tips for Android.

Effektivität der Optimierung prüfen

  1. A/B-Tests durchführen:Erstellen Sie einen Build mit den implementierten Optimierungen.
  2. Leistung messen:Verwenden Sie dieselben Tools und Methoden wie bei der ursprünglichen Analyse, um die Leistung des optimierten Builds zu messen.
  3. Ergebnisse vergleichen:Vergleiche die neuen Leistungsdaten mit den ursprünglichen Daten, um zu bestätigen, dass die ermittelten Engpässe behoben wurden und die FPS- und thermischen Ziele erreicht werden.
  4. Wiederholen:Wiederholen Sie die Analyse- und Optimierungsschritte, bis die gewünschte Leistung erreicht ist.

Siehe auch