한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Game-Lag-Whitepaper › L1 Spielprozess auf dem Client

Synchrones Laden und Shader-Kompilierung im Main-Thread Synchronous asset load, shader compile

Ursachen-ID cg-sync-load · Hauptzuständig Client-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Bevor ein neues Gebiet, ein neues Monster oder ein neuer Effekt zum ersten Mal gezeichnet wird, liest das Spiel Dateien und erzeugt Shader. Währenddessen steht es still.

Warum Betreten eines neuen Gebiets, erstmals auftauchende Skills, Ausrüstung oder Monster → Folge Main-Thread wartet auf das Lesen von Dateien und die Shader-Kompilierung → Auf dem Bildschirm Nur beim ersten Mal 0,1–1 s Stillstand, ab dem zweiten Mal in Ordnung

Symptome
Freeze, Ruckeln
Faktoren
Stillstand
Wer ist betroffen
Nur ich
Wann
Beim Bewegen oder Zonenwechsel, Bei bestimmten Aktionen
Zuständigkeit
Hauptzuständig Client-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Asynchrones Laden, Vorladen (Prewarming), Shader auf dem Ladebildschirm oder beim ersten Start vorkompilieren, Ladebildschirme gezielt nutzen.
Größenordnungen
Die Kompilierung eines Shaders dauert einige Dutzend ms, im ungünstigen Fall 100 ms und mehr. Texturen laden je nach Datenträger in einigen Dutzend bis einigen hundert ms.
Im Graphen
Ansturm direkt nach Login oder Wartung · Anzahl der Frametime-Spikes (direkt nach Patch oder Treiber-Update)
Wo nachsehen
Mit PresentMon dieselbe Route zweimal aufzeichnen und den ersten mit dem zweiten Durchlauf vergleichen. In Development-Builds unter Unreal r.PSOPrecache.Validation aktivieren und stat PSOPrecache sowie „PSO PRECACHING MISS“ im Log prüfen, unter Unity in der Timeline des Profilers die Lade- und Shader-Abschnitte der Ausreißer-Frames ansehen
Spricht dafür
Ausschläge von 0,1–1 s nur beim ersten Besuch eines Orts oder beim ersten Einsatz eines Skills, beim zweiten Mal verschwunden. Meldungen häufen sich direkt nach einem Patch oder Grafiktreiber-Update und nehmen dann ab
Spricht dagegen
Ausschlag jedes Mal am selben Ort: kein Shader-Cache-Problem. Wiederholt sich bei jeder Bewegung, aber nur auf PCs mit langsamem Datenträger: „Langsamer Datenträger bremst Asset-Streaming“. Dedizierter GPU-Speicher voll: „Zu wenig Grafikspeicher (VRAM)“
Prüfmittel
Logs oder Metriken aus Spielserver bzw. Client nötig
Mehr dazu
Auf dem PC speichert der Grafiktreiber einmal erzeugte Shader im Shader-Cache und verwendet sie wieder. Direkt nach einem Treiber-Update oder einem Spiel-Patch wird dieser Cache ungültig. Dann ruckelt es eine Weile auch bei Spielern, bei denen vorher alles flüssig lief. Typische Meldung: „Seit dem Patch hakt es an jedem Ort, an den ich zum ersten Mal komme.“

Quellen

  1. Shader loading Unity
    Bei der ersten Nutzung einer Shader-Variante erzeugt der Grafiktreiber die GPU-Fassung, was spürbar stocken kann. Einmal erzeugte Varianten werden gecacht und stocken nicht erneut
  2. Optimizing Rendering With PSO Caches in Unreal Engine Epic Games
    Pipeline-States (PSOs) erst im Moment des Bedarfs zu erzeugen kann 100 ms und länger dauern, deshalb vorab erzeugen
  3. Direct3D 12 Return Codes Microsoft
    D3D12_ERROR_DRIVER_VERSION_MISMATCH: Ein PSO-Cache aus einer anderen Treiberversion lässt sich nicht wiederverwenden (nach einem Treiber-Update wird neu kompiliert)
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    Aufzeichnung der Zeit pro Frame über FrameTime (CPU-Zeit zwischen Frames)
  5. PSO Precaching for Unreal Engine Epic Games
    Mit aktiviertem r.PSOPrecache.Validation zeigt stat PSOPrecache Statistiken zu verpassten PSOs, und das Log meldet „PSO PRECACHING MISS“. Dauert die PSO-Erzeugung zur Laufzeit länger als standardmäßig 20 ms, zählt sie als Hitch

Verwandte Ursachen

Gleiche Schicht: L1 Spielprozess auf dem Client

Ursachen aus anderen Schichten mit demselben Symptom (Freeze)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen