Stotteren door shadercompilatie: waarom de eerste minuten het ergst zijn

Waarom een game hapert bij alles wat hij je voor het eerst laat zien, waarom een driverupdate het allemaal terugbrengt, en waarom de shadercache wissen de ene "oplossing" is die garandeert dat je er opnieuw voor betaalt.

Je start een game die je een tijd niet hebt gespeeld en de eerste tien minuten zijn afschuwelijk. Elk nieuw wapen, elk nieuw effect, de eerste keer dat een bepaalde vijand verschijnt — een hapering. Daarna komt het tot rust, en de tweede avond loopt de game vloeiend. Niets wat jij hebt veranderd deed dat. De tijd deed het.

Of de andere versie: de game liep prima, je hebt de grafische driver bijgewerkt, en het hele eerste uur is weer onrustig.

Het is allebei hetzelfde mechanisme, en het is een van de weinige oorzaken van gestotter die werkelijk normaal is, in de zin dat een gezonde machine met correcte software het produceert.

Waarom het werk op jouw machine moet gebeuren

Een shader is een klein programma dat op de GPU draait. De ontwikkelaar van de game schrijft hem in een hoog-niveautaal en compileert hem, maar maar half — naar een tussenvorm die beschrijft wát het programma doet, niet hoe een bepaalde grafische chip dat zou moeten doen.

De machinecode die je GPU werkelijk uitvoert is niet vooraf te maken, want hij hangt af van twee dingen die de ontwikkelaar niet heeft: jouw precieze GPU-architectuur en jouw precieze driverversie. De eigen compiler van de driver zet de tussenvorm om in instructies voor het silicium in jouw machine, en dat compileren gebeurt op je CPU, op het moment dat de game de shader nodig heeft.

De eerste keer dat een scène een bepaalde combinatie van shader, renderstatus en vertexindeling nodig heeft, moet er dus iets gecompileerd worden. Vraagt de game erom midden in een frame en wacht hij erop, dan is dat frame te laat. Dat late frame is de hapering die je voelde.

Het resultaat wordt naar een shadercache op schijf geschreven. De tweede keer dat hetzelfde verschijnt, wordt de gecompileerde code uit de cache gelezen in plaats van opnieuw gebouwd, en precies daarom wordt de game beter naarmate je speelt en is de tweede sessie prima.

Wat je terug naar het begin stuurt

De cache is alleen geldig voor de driver en de hardware die hem hebben gebouwd. Alles op deze lijst maakt hem geheel of gedeeltelijk ongeldig, en het eerste uur spelen is weer onrustig:

Geen van deze dingen is een fout. Het zijn de kosten van een cache die correct is in plaats van verouderd.

Hoe je weet dat dit is wat je hebt

Shadercompilatie heeft een herkenbare vingerafdruk, en hij lijkt op niets anders op de stotterlijst:

  1. Het zakt weg. Dit is het kenmerkende teken. Is je gestotter in het derde uur hetzelfde als in de derde minuut, dan is dit het niet.
  2. Het hangt aan nieuwigheid. De eerste aanblik van een wapen, een gebied, een weereffect, een bepaalde vijand. Dezelfde gang een tweede keer doorlopen is schoon.
  3. Het trekt zich niets aan van temperatuur en speelduur. Warmteproblemen worden erger naarmate je langer speelt; dit wordt beter.
  4. Het komt terug op een moment dat je kunt benoemen — na een driverupdate, na een patch, na een opschoning — en niet willekeurig.
  5. De GPU is niet het drukke deel. Het compileren is werk voor de CPU. Een GPU die tijdens deze haperingen ver onder volledige bezetting zit hoort hier bij het beeld, en is geen bewijs van het aparte probleem dat in Plotselinge FPS-drops in games wordt beschreven.

Beschrijven die vijf jouw verschijnsel niet, ga dan terug naar de algemene lijst in Waarom games stotteren op Windows 11 — de oorzaken daar zakken niet vanzelf weg.

Wat je eraan doet

Vooral: laat het gebeuren. Maar aan de randen zijn er echte keuzes.

Wis de shadercache niet als oplossing. Dit is het ene advies op deze pagina dat het waard is twee keer te lezen. De cache leegmaken wordt voortdurend voorgeschreven als middel tegen gestotter, en wat het werkelijk doet is garanderen dat je de volledige compilatiekosten opnieuw vanaf nul betaalt. Het is een legitieme stap bij het opsporen van beeldfouten na een driverwissel. Het is het tegenovergestelde van een prestatie-oplossing.

Gebruik de eigen precompilatiestap van de game als hij die aanbiedt, en sla hem niet over. Een game die twee minuten op een scherm "shaders compileren" staat voordat het menu komt, doet precies dit werk vooraf, waar het je niets kost behalve wachten.

Laat de machine na een driverupdate nog even aanstaan. Sommige drivers bouwen DirectX 12-shaders opnieuw op terwijl het systeem niets doet, juist zodat de runtime het later minder hoeft te doen. Dat helpt alleen als de machine die rusttijd krijgt.

Houd de game en zijn cache op een SSD, en buiten een gesynchroniseerde map. Een cloudclient kijkt naar elke schrijfactie, en een game schrijft zijn shadercache voortdurend — elke vermelding wordt werk voor een filterstuurprogramma plus een upload over dezelfde verbinding die je partij gebruikt.

Meet niet binnen dat venster. Een opname die in de eerste minuten na een driverupdate wordt gemaakt meet de compiler, niet de driver. De benchmark lezen behandelt de vergelijkingsregels; zo breek je de eerste ervan makkelijk per ongeluk.

Wat de scan erover zegt

De stotterscan controleert of er onlangs een shadercache is geleegd, en vindt hij er een, dan zegt hij wat deze pagina zegt: de game compileert de gewiste cache opnieuw terwijl je speelt, gestotter vroeg in de sessie is normaal en zakt vanzelf weg, en je moet niet benchmarken voordat dat venster voorbij is.

Het wordt bewust niet gepresenteerd als een fout die gerepareerd moet worden. Er valt niets te repareren — er zijn eenmalige kosten te betalen, en het eerlijkste wat een programma kan doen is je vertellen dat je er middenin zit, zodat je niet de hele avond een instelling de schuld geeft.

Waar het ophoudt normaal te zijn

Compilatiegestotter dat nooit wegzakt is een ander probleem: de cache wordt niet bewaard. Controleer of de schijf niet vol is, of de cache niet tussen sessies door een geplande opruiming wordt gewist, en of de gamemap niet ergens staat waar een cloudclient of een groottelimiet hem steeds leeghaalt.

En is de run over de hele lengte ongelijkmatig in plaats van vooral aan het begin, dan kijk je in plaats daarvan naar Hoge gemiddelde FPS maar slechte 1% lows, en dat is een probleem van voorvallen en niet van opwarmen.

Gerelateerd

Speel je CS2? Welke startopties nog iets doen en waar de frames in het videomenu werkelijk zitten: Lage FPS en gestotter in CS2: een gemeten checklist

w0a verandert geen enkele Windows-instelling tot je erom vraagt, en een tweak bewaart de oude waarde voordat hij een nieuwe schrijft. Herinner me

Heeft deze pagina geholpen?

Wat ontbrak, of wat werkte er niet? We lezen elk van deze berichten.

Heeft deze pagina het niet opgelost, schrijf ons dan — noem het artikel dat je hebt gelezen, dan verbeteren we het.