Frames per sekund, forklaret

I dag tager vi fat på et af de hyppigst stillede spørgsmål om PC-spil: Hvor mange billeder per sekund har du brug for? Skal du køre med samme billedfrekvens som din skærms maksimale opdateringsfrekvens, f.eks. 60 FPS på en 60 Hz skærm, eller er der en fordel ved at køre spil med en meget højere billedfrekvens, end din skærm kan vise, f.eks. 500 FPS?

For at besvare dette spørgsmål er vi nødt til at tale lidt om, hvordan en GPU og en skærm arbejder sammen for at sende billeder ind i dine øjne, og hvordan teknologier som Vsync fungerer.

Men i bund og grund er det, at hvis du kører spil med ekstremt høje billedfrekvenser, langt over din skærms opdateringsfrekvens, vil det føre til en mere responsiv spiloplevelse med lavere opfattet inputlatenscy. Det er svaret på spørgsmålet for dem, der ikke ønsker at vente til slutningen. Lad os nu tale om hvorfor.

Redaktørens note: Dette indslag blev oprindeligt offentliggjort den 2. august 2018. Det er lige så relevant og aktuelt i dag som dengang, så vi har bumpet det som en del af vores #ThrowbackThursday-initiativ.

Lad os antage, at vi har en skærm med en fast opdateringshastighed på 60 Hz. Med andre ord opdaterer skærmen sin skærm hvert 1/60. sekund, eller hver 16,7 ms. Når man kører et spil, er der ingen garanti for, at GPU’en er i stand til at gengive hvert enkelt billede på præcis 16,7 millisekunder. Nogle gange tager det måske 20 ms, andre gange 15 ms og andre gange 8 ms. Det er den varierende karakter af rendering af et spil på en GPU.

Med denne varierende renderingshastighed er der et valg af, hvordan hver enkelt renderet frame sendes videre til skærmen. Den kan videregive den nye frame til skærmen, så snart den er fuldt renderet, almindeligvis kendt som at køre spillet med “Vsync” eller vertikal sync off, eller den kan vente, indtil skærmen er klar til at opdatere, før den sender den nye frame, kendt som “Vsync on”.

Vsync off

Anvendelse af den første metode, Vsync off, forårsager tearing. Det skyldes, at en skærm ikke kan opdatere hele billedet øjeblikkeligt, men i stedet opdateres det linje for linje, normalt fra toppen af skærmen til bunden. Under denne proces kan en ny frame blive klar fra GPU’en, og da vi ikke bruger Vsync, sendes den frame til skærmen med det samme. Resultatet er, at skærmen midtvejs i en opdatering modtager nye data og opdaterer resten af linjerne på skærmen med disse nye data. Du står så tilbage med et billede, hvor den øverste halvdel af skærmen er fra den tidligere ramme og den nederste halvdel er fra den nye, nyligt tilgængelige ramme.

Tearing

Afhængigt af det indhold, der vises, præsenterer denne opdeling mellem nye og gamle rammer i den ene opdatering sig som en tåre, eller en synlig linje mellem de gamle og nye rammer. Normalt er det mest mærkbart i hurtigt bevægende scener, hvor der er en stor forskel mellem den ene frame og den næste.

Mens Vsync off fører til tearing, har det den fordel, at det sender en frame til skærmen, så snart den er færdig med at blive renderet, for lav latenstid mellem GPU’en og skærmen. Husk det til senere.

Vsync on

Den alternative måde at vise et billede på er med Vsync on. Her sender GPU’en i stedet for at sende det nye billede med det samme til skærmen, blander den hvert renderet billede i en buffer. Den første buffer bruges til at gemme den ramme, der arbejdes på i øjeblikket, og den anden buffer bruges til at gemme den ramme, som skærmen viser i øjeblikket. På intet tidspunkt under opdateringen opdateres den anden buffer, så skærmen viser kun data fra én fuldt renderet ramme, og som følge heraf får du ikke tearing fra en opdatering midtvejs i opdateringen.

Vsync on, a closer look

Det eneste tidspunkt, hvor den anden buffer opdateres, er mellem opdateringerne. For at sikre, at det sker, venter GPU’en, efter at den er færdig med at rendere en frame, indtil skærmen er ved at blive opdateret. Derefter blander den bufferne, begynder at rendere en ny ramme, og processen gentages. Nogle gange kan processen involvere flere buffere, før en ramme når frem til skærmen, men dette er den generelle hovedregel for, hvordan Vsync fungerer.

Når din GPU er for langsom til at rendere en ramme … sker der stottering

Der er to problemer med Vsync. For det første, hvis din GPU-renderingshastighed er for langsom til at følge med skærmens opdateringshastighed – lad os sige, at den kun er i stand til at rendere med 40 FPS på en 60 Hz-skærm – så vil GPU’en ikke rendere en fuld ramme i tide til at møde starten af skærmens opdatering, så en ramme bliver gentaget. Dette forårsager stuttering, da nogle rammer kun vises én gang, mens andre vises to gange.

Vsync on: 60 Hz-skærm, 200 FPS

Det andet problem opstår, når din GPU er meget hurtig og nemt kan gengive en ramme inden for opdateringsfrekvensintervallet. Lad os sige, at den kan rendere med 200 FPS og producere en ny ramme hver 5 ms, bortset fra at du bruger en 60 Hz-skærm med et opdateringsvindue på 16,7 ms.

Med Vsync slået til vil din GPU færdiggøre den næste ramme, der skal vises, på 5 ms, hvorefter den vil vente i 11,7 ms, før den sender rammen til den anden buffer, der skal vises på skærmen, og starter på den næste ramme. Det er derfor, at med Vsync slået til, svarer den højeste billedfrekvens, du får, til opdateringsfrekvensen på din skærm, da GPU’en stort set er “låst” til ikke at rendere hurtigere end opdateringsfrekvensen.

Nu er det på dette punkt, at der er en masse forvirring.

Vi hører ofte ting som “at låse GPU’en til min skærms opdateringshastighed ved hjælp af Vsync er fantastisk, for hvis den renderer hurtigere end opdateringshastigheden, er disse frames spildt, fordi skærmen ikke kan vise dem, og det eneste, jeg får, er tearing”. Mange mennesker peger på strømbesparelser ved at bruge Vsync; din GPU behøver ikke at arbejde så hårdt, der er ingen fordel ved at køre med billedfrekvenser, der er højere end skærmens opdateringsfrekvens, så kør med en låst FPS og spar noget strøm.

Vi kan godt se, hvorfor folk kommer til denne konklusion, og der er nogle bidder af sandhed der, men det er ikke korrekt generelt. Og grunden til dette er, at du ikke tager højde for den tid, hvor input behandles, og hvor lang tid det tager for disse input at materialisere sig på skærmen.

Vsync on herunder input

For at forklare, hvorfor dette er tilfældet, skal vi se på Vsync on-diagrammet, men overlejre diagrammet med input fra din mus og tastatur, som typisk indsamles hver 1 ms. Lad os også bruge det samme eksempel, hvor vi har en GPU, der er i stand til at rendere med 200 FPS med en 60 Hz-skærm.

Med Vsync og et simpelt buffersystem begynder GPU’en i denne forenklede forklaring at rendere en frame, der svarer til dit input fra musen, så snart den modtager dette input, på tidspunkt 0. Derefter tager det 5 ms at rendere rammen, og den venter yderligere 11,7 ms, før den sender den til displaybufferen.

Det tager derefter noget tid at modtage den ramme, der skal renderes, og fysisk opdatere displayet linje for linje med disse oplysninger.

Vsync on including input

Selv i det bedste tilfælde har vi en forsinkelse på mindst 16,7 ms mellem dit input og det tidspunkt, hvor skærmen kan begynde at vise resultaterne af dette input til dig.

Når man medregner forsinkelse af skærmens input, CPU-behandlingstid osv. kan forsinkelsen mellem input og skærmens opdatering nemt være mere end 50 ms.

Vsync off inklusive input, 60 Hz-skærm, 200 FPS

Nu skal vi se på Vsync off-diagrammet. GPU’en renderer kontinuerligt, uanset hvornår skærmen opdateres, og det tager 5 ms at omdanne dit input til en komplet ramme. Skærmen kan derefter begynde at vise denne nye ramme med det samme, selv om det måske kun er en del af denne ramme. Resultatet er, at latenstiden mellem dit input til spillet og det tidspunkt, hvor skærmen kan begynde at vise resultatet af dette input, reduceres fra 16,7 ms til kun 5 ms. Og der vil ikke være nogen ekstra buffere i implementeringer i den virkelige verden; det er lige så hurtigt som det plus din skærms inputforsinkelse.

Og det er her, du får fordelen. I dette eksempel reducerer kørsel med 200 FPS med Vsync off på en 60 Hz skærm input latency til 5 ms, hvorimod med Vsync on er denne latency mindst 16,7 ms, hvis ikke mere.

Selv om skærmen ikke er i stand til at vise alle 200 billeder pr. sekund i sin helhed, er det, som skærmen viser hvert 1/60. sekund, produceret fra et input meget tættere i tid på det pågældende billede.

Dette fænomen gælder naturligvis også med skærme med høj opdateringsfrekvens. Ved f.eks. 144 Hz vil du kunne se mange flere billeder hvert sekund, så du får en mere jævn og responsiv oplevelse i det hele taget. Men hvis du kører med 200 FPS med Vsync slukket i stedet for 144 FPS med Vsync slået til, vil du stadig få en forskel på mellem 5 ms og op til 7 ms inputlatency.

Nu når vi taler om millisekunders forskelle, undrer du dig sikkert over, om du rent faktisk kan mærke denne forskel i spil.

Afhængigt af hvilken slags spil du spiller, kan forskellen være alt fra meget mærkbar, til ingen forskel overhovedet. Et hurtigt spil som CS: GO, der kører med 400 FPS på en 60 Hz-skærm med en inputlatenstid på i bedste fald omkring 2,5 ms, vil føles betydeligt mere lydhør over for dine musebevægelser, end hvis du kører det samme spil med 60 FPS med 16,7 ms latency (eller mere).

I begge tilfælde viser skærmen dig kun et nyt billede 60 gange i sekundet, så det vil ikke føles så glat som på en 144 Hz- eller 240 Hz-skærm. Men forskellen i input latenstid er enorm; ved at køre med 400 FPS kan du få dine input til skærmen næsten 7 gange hurtigere, hvis ikke mere. Prøv det selv, og du vil helt sikkert mærke forskellen i reaktionsevne.

Og vi har ikke bare trukket denne forklaring ud af ingenting, faktisk kender Nvidia begrænsningerne ved Vsync med hensyn til input latens, hvilket er grunden til, at de leverer et alternativ kaldet Fast Sync (AMD’s alternativ hedder Enhanced Sync). Denne skærm synkroniseringsteknik er som en kombination af Vsync on og Vsync off, hvilket giver det bedste fra begge verdener.

Fast Sync fungerer ved at indføre en ekstra buffer i Vsync on-pipelinen, kaldet den sidst renderede buffer. Dette gør det muligt for GPU’en at fortsætte med at rendere nye frames i den bagerste buffer og gå over i den sidst renderede buffer, når den er færdig. Ved en skærmopdatering skubbes den sidst renderede buffer så til den forreste buffer, som skærmen får adgang til.

Fast Sync / Enhanced Sync

Den fordel, dette skaber, er, at GPU’en ikke længere venter efter afslutningen af en frame på, at skærmopdateringen skal finde sted, som det er tilfældet med Vsync on. I stedet fortsætter GPU’en med at rendere rammer, så når skærmen skal til at tilgå en ramme i begyndelsen af opdateringsperioden, er denne ramme blevet renderet tættere på opdateringsvinduet. Dette reducerer inputlatenstiden. Men i modsætning til når Vsync er slået fra, leverer Fast Sync en færdig ramme til skærmen i begyndelsen af hver opdatering, i stedet for blot at skubbe rammen til skærmen med det samme, og det er denne teknik, der eliminerer tearing.

Fast Sync er kun funktionel, når billedfrekvensen er højere end skærmens opdateringsfrekvens, men det lykkes at give en mere responsiv spiloplevelse uden tearing. Og AMD har naturligvis en tilsvarende kaldet Enhanced Sync.

Håber denne forklaring har afklaret nogle af dine spørgsmål om, hvorfor det at køre et spil over skærmens maksimale opdateringsfrekvens giver en mere responsiv spiloplevelse, og hvorfor det altid er en fordel at kunne køre spil med højere billedfrekvenser, selv om det kan se ud til, at din skærm ikke kan udnytte det.

En sidste bemærkning: Vi har ikke diskuteret adaptive synkroniseringsteknologier som G-Sync og FreeSync her, og det skyldes, at vi mest har talt om at køre spil over den maksimale opdateringshastighed, hvor adaptiv synkronisering ikke er relevant. Der findes en masse forskellige synkroniseringsmetoder, men adaptiv sync er meget forskellig fra Vsync og Fast Sync, som vi har talt om, og er i hvert fald i denne diskussion ikke rigtig relevant.

Videre læsning
  • De bedste gaming-skærme
  • FreeSync 2 forklaret
  • De bedste grafikkort 2018
Shopping genveje
  • Radeon RX 570 på Amazon, Newegg
  • Radeon RX 580 på Amazon, Newegg
  • GeForce GTX 1060 6GB på Amazon
  • GeForce GTX 1070 Ti på Amazon, Newegg
  • GeForce RTX 2070 på Amazon, Newegg
  • GeForce RTX 2080 på Amazon, Newegg
  • GeForce RTX 2080 Ti på Amazon, Newegg

Masthead-kredit: Foto: Jakob Owens

Articles

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.