Frames Per Second, Explained

Tänään käsittelemme yhtä PC-pelaamiseen liittyvää usein kysyttyä kysymystä: kuinka monta ruutua sekunnissa tarvitset? Pitäisikö sinun pelata samalla ruudunpäivitysnopeudella kuin näytön maksimivirkistystaajuus, esimerkiksi 60 FPS 60 Hz:n näytöllä, vai onko hyötyä pelien pelaamisesta paljon suuremmalla ruudunpäivitysnopeudella kuin mitä näyttösi pystyy näyttämään, kuten esimerkiksi 500 FPS?

Vastaaksemme tähän kysymykseen meidän on puhuttava hieman siitä, miten näytönohjain ja näyttö työskentelevät yhdessä lähettääkseen ruutuja silmämuniin ja miten Vsyncin kaltaiset teknologiat toimivat.

Mutta lopputulos on, että pelien ajaminen erittäin korkeilla, selvästi näytön virkistystaajuutta suuremmilla ruudunpäivitysnopeuksilla johtaa herkemmin reagoivaan pelikokemukseen ja pienempään havaittavaan syöttölatenssiin. Siinä vastaus kysymykseen niille, jotka eivät halua odottaa loppuun asti. Nyt puhutaan siitä, miksi.

Toimittajan huomautus: Tämä artikkeli julkaistiin alun perin 2. elokuuta 2018. Se on yhtä merkityksellinen ja ajankohtainen tänään kuin silloin, joten olemme nostaneet sen esiin osana #ThrowbackThursday-aloitettamme.

Esitellään, että meillä on näyttö, jonka kiinteä virkistystaajuus on 60 Hz. Toisin sanoen monitori päivittää näyttönsä 1/60 sekunnin välein eli 16,7 ms välein. Kun peliä ajetaan, ei ole mitään takeita siitä, että näytönohjain pystyy renderöimään jokaisen ruudun tasan 16,7 millisekunnissa. Joskus se saattaa kestää 20 sekuntia, joskus 15 sekuntia ja joskus 8 sekuntia. Tämä on pelin renderöinnin vaihteleva luonne GPU:lla.

Tämän vaihtelevan renderöintinopeuden ansiosta on mahdollista valita, miten kukin renderöity ruutu välitetään monitorille. Se voi välittää uuden ruudun näytölle heti, kun se on renderöity kokonaan, mikä tunnetaan yleisesti pelin ajamisena ”Vsync” eli vertikaalinen synkronointi pois päältä, tai se voi odottaa, kunnes näyttö on valmis päivittymään, ennen kuin se lähettää uuden ruudun, mikä tunnetaan nimellä ”Vsync päällä”.

Vsync pois päältä

Ensimmäisen menetelmän, Vsync pois päältä, käyttäminen aiheuttaa repimistä. Tämä johtuu siitä, että näyttö ei voi päivittää koko kuvaa välittömästi, vaan se päivittyy rivi riviltä, yleensä näytön yläreunasta alareunaan. Tämän prosessin aikana uusi ruutu voi tulla valmiiksi näytönohjaimesta, ja koska emme käytä Vsynciä, ruutu lähetetään näytölle välittömästi. Tuloksena on, että päivityksen puolivälissä näyttö vastaanottaa uutta dataa ja päivittää loput näytön riveistä näillä uusilla tiedoilla. Tällöin jäljelle jää kuva, jossa näytön yläpuolisko on edellisestä kehyksestä ja alapuolisko uudesta, tuoreesta kehyksestä.

Tearing

Näytettävästä sisällöstä riippuen tämä jako uusien ja vanhojen kehysten välillä yhden virkistyksen aikana näyttäytyy repeämänä eli näkyvänä viivana vanhojen ja uusien kehysten välillä. Yleensä se on selvimmin havaittavissa nopeasti liikkuvissa kohtauksissa, joissa yhden ja seuraavan kehyksen välillä on suuri ero.

Vsync pois päältä johtaa kyynelehtimiseen, mutta sen etuna on, että se lähettää kehyksen näytölle heti sen renderöinnin päätyttyä, jolloin GPU:n ja näytön välinen viive on pieni. Pidä tämä mielessä myöhempää käyttöä varten.

Vsync päällä

Vaihtoehtoinen tapa näyttää kuva on Vsync päällä. Tällöin sen sijaan, että näytönohjain lähettäisi uuden kuvan välittömästi näytölle, se sekoittaa jokaisen renderöidyn kuvan puskuriin. Ensimmäiseen puskuriin tallennetaan kehys, jota parhaillaan työstetään, ja toiseen puskuriin tallennetaan kehys, jota näyttö näyttää parhaillaan. Toista puskuria ei päivitetä missään vaiheessa päivityksen aikana, joten näytöllä näkyy vain yhden täysin renderöidyn kehyksen tiedot, minkä seurauksena päivitys kesken päivityksen ei aiheuta repeilyä.

Vsync päällä, tarkempi tarkastelu

Toisen puskurin päivitys tapahtuu vain päivitysten välillä. Varmistaakseen, että näin tapahtuu, näytönohjain odottaa ruudun renderöinnin päätyttyä, kunnes näyttö on päivittymässä. Sitten se sekoittaa puskurit, alkaa renderöidä uutta kehystä ja prosessi toistuu. Joskus prosessiin saattaa kuulua useita puskureita, ennen kuin ruutu saapuu näyttöön, mutta tämä on Vsyncin toiminnan yleinen ydin.

Kun näytönohjaimesi on liian hidas renderöimään ruutua… tapahtuu stutterointia

Vsyncissä on kaksi ongelmaa. Ensinnäkin, jos näytönohjaimen renderöintinopeus on liian hidas pysyäkseen näytön virkistystaajuuden tahdissa – sanotaan, että näytönohjain pystyy renderöimään vain 40 FPS:n nopeudella 60 Hz:n näytöllä – näytönohjain ei renderöi täyttä kehystä ajoissa, jotta se ehtisi vastaamaan näytön virkistystaajuuden alkua, joten kehys toistuu. Tämä aiheuttaa pätkimistä, koska jotkin kehykset näytetään vain kerran, kun taas toiset näytetään kahdesti.

Vsync päällä: 60 Hz:n näyttö, 200 FPS

Toinen ongelma syntyy, kun näytönohjaimesi on erittäin nopea ja pystyy helposti renderöimään ruudun virkistystaajuusvälin sisällä. Tästä syystä Vsyncin ollessa päällä korkein saamasi kuvanopeus vastaa monitorisi virkistystaajuutta, koska näytönohjain on periaatteessa ”lukittu” renderöimään enintään virkistystaajuutta nopeammin.

Nyt tässä kohtaa syntyy paljon sekaannusta.

Kuullaan usein juttuja kuten ”GPU:n lukitseminen monitorini virkistystaajuuteen Vsyncin avulla on hienoa, koska jos se renderöi nopeammin kuin virkistystaajuus, nuo ruudut menevät hukkaan, koska monitori ei pysty näyttämään niitä, ja saan aikaan vain repeilyä”. Monet viittaavat virransäästöön Vsyncin käytöstä; näytönohjaimen ei tarvitse työskennellä niin kovasti, ei ole mitään hyötyä siitä, että ruudunpäivitysnopeus on korkeampi kuin monitorin virkistystaajuus, joten ajetaan lukitulla FPS:llä ja säästetään virtaa.

Voidaan ymmärtää, miksi ihmiset päätyvät tähän johtopäätökseen, ja siinä on joitakin totuuden palasia, mutta yleisesti ottaen se ei pidä paikkaansa. Ja syy tähän on se, että et ota huomioon aikaa, jolla syötteitä käsitellään, ja sitä, kuinka kauan kestää, että nämä syötteet realisoituvat näytöllä.

Vsync on mukaan lukien syötteet

Mutta selittääksemme, miksi näin on, katsotaan Vsync on -kaaviota, mutta asetetaan kaavio päällekkäin hiireltä ja näppäimistöltä tulevan syötteen kanssa, joka kerätään tyypillisesti 1 ms välein. Käytetään myös samaa esimerkkiä, jossa meillä on näytönohjain, joka pystyy renderöimään 200 FPS:n nopeudella 60 Hz:n näytöllä.

Vsyncin ja yksinkertaisen puskurijärjestelmän avulla tässä yksinkertaistetussa selityksessä näytönohjain alkaa renderöidä hiiren syötettä vastaavan ruudun heti, kun se vastaanottaa syötteen, hetkellä 0. Sen jälkeen kehyksen renderöinti kestää 5 ms, ja se odottaa vielä 11,7 ms ennen kuin se lähettää sen näytön puskuriin.

Näytöllä kestää sitten jonkin aikaa vastaanottaa renderöitävä kehys ja päivittää fyysisesti näytön rivi riveittäin tällä tiedolla.

Vsync on including input

Jopa parhaimmassakin skenaariossa on vähintään 16,7 ms:n viive syötteesi ja sen välillä, kun näyttö voi alkaa näyttää syötteen tuloksia sinulle.

Kun otetaan huomioon näytön syötön viive, suorittimen prosessointiaika ja niin edelleen, viive syötön ja näytön päivityksen välillä voi olla helposti yli 50 ms.

Vsync pois päältä mukaan lukien syöttö, 60 Hz:n näyttö, 200 FPS

Katsotaan nyt Vsync pois päältä -kaaviota. Näytönohjain renderöi jatkuvasti riippumatta siitä, milloin näyttö päivittyy, ja kestää 5 ms muuttaa syötteen täydelliseksi kehykseksi. Tämän jälkeen näyttö voi alkaa näyttää tuota uutta kehystä välittömästi, vaikkakin se voi olla vain osa siitä kehyksestä. Tuloksena on, että viive, joka kuluu peliin lähettämäsi syötteen ja sen välillä, kun näyttö voi alkaa näyttää syötteen tuloksia, lyhenee 16,7 ms:sta vain 5 ms:iin. Eikä reaalimaailman toteutuksissa ole mitään ylimääräisiä puskureita; se on yhtä nopeaa kuin tuo plus monitorisi syöttöviive.

Ja tässä kohtaa saat etulyöntiaseman. Tässä esimerkissä 200 FPS:n ajaminen Vsync pois päältä 60 Hz:n monitorilla vähentää input-latenssin 5 ms:iin, kun taas Vsync päällä tuo latenssi on vähintään 16,7 ms, ellei enemmänkin.

Vaikka näyttö ei pysty näyttämään kaikkia 200 ruutua sekunnissa kokonaisuudessaan, se, mitä näyttö näyttää 1/60 sekunnin välein, tuotetaan syötteestä, joka on ajallisesti paljon lähempänä kyseistä ruutua.

Tämä ilmiö pätee tietysti myös korkean virkistystaajuuden näyttöihin. Esimerkiksi 144 Hz:n taajuudella näet paljon enemmän ruutuja sekunnissa, joten saat kaiken kaikkiaan sulavamman ja reagoivamman kokemuksen. Mutta jos käytät 200 FPS:ää Vsync pois päältä eikä 144 FPS:ää Vsync päällä, saat silti 5 ms:n ja jopa 7 ms:n välisen eron tuloviiveessä.

Nyt kun puhumme millisekunnin eroista, ihmettelet varmaan, voitko todella huomata tämän eron peleissä.

Se riippuu siitä, millaista peliä pelaat, ero voi olla mitä tahansa erittäin huomattavasta erosta siihen, ettei eroa ole lainkaan. Nopeatempoinen peli, kuten CS: GO, joka pyörii 400 FPS:n nopeudella 60 Hz:n näytöllä, jonka syöttöviive on parhaimmillaan noin 2,5 ms, tuntuu huomattavasti herkemmältä hiiren liikkeille kuin jos sama peli pyörii 60 FPS:n nopeudella 16,7 ms:n viiveellä (tai enemmän).

Kummassakin tapauksessa näyttö näyttää uuden ruudun vain 60 kertaa sekunnissa, joten se ei tunnu yhtä sulavalta kuin 144 Hz:n tai 240 Hz:n näytöllä. Mutta ero syöttölatenssissa on valtava. 400 FPS:llä ajettaessa saat syötteet näytölle lähes 7 kertaa nopeammin, ellei jopa nopeammin. Kokeile itse ja tunnet varmasti eron reagointikyvyssä.”

Emmekä ole vetäneet tätä selitystä tyhjästä, itse asiassa Nvidia tietää Vsyncin rajoitukset syöttölatenssin suhteen, minkä takia he tarjoavat vaihtoehdon nimeltä Fast Sync (AMD:n vaihtoehto on nimeltään Enhanced Sync). Tämä näytön synkronointitekniikka on kuin Vsync on:n ja Vsync off:n yhdistelmä, joka tuottaa molempien maailmojen parhaat puolet.

Fast Sync toimii ottamalla Vsync on:n putkistoon käyttöön ylimääräisen puskurin, jota kutsutaan last rendered bufferiksi. Tämän ansiosta näytönohjain voi jatkaa uusien ruutujen renderöintiä takapuskuriin ja siirtyä viimeiseen renderöityyn puskuriin, kun se on valmis. Näytön päivityksen yhteydessä viimeinen renderöity puskuri työnnetään etupuskuriin, jota näyttö käyttää.

Fast Sync / Enhanced Sync

Tämän etuna on se, että näytönohjain ei enää odota ruudun valmistumisen jälkeen näytön päivitystä, kuten Vsync on -tilassa. Sen sijaan GPU jatkaa kehysten renderöintiä, joten kun näyttö menee käyttämään kehystä päivitysjakson alussa, kyseinen kehys on renderöity lähempänä päivitysikkunaa. Tämä vähentää syöttöviivejä. Toisin kuin Vsync pois päältä, Fast Sync kuitenkin toimittaa valmiin ruudun näytölle jokaisen virkistyksen alussa sen sijaan, että se vain työntäisi ruudun näytölle välittömästi, ja juuri tämä tekniikka eliminoi repimisen.

Fast Sync toimii vain, kun ruudunpäivitysnopeus on korkeampi kuin näytön virkistystaajuus, mutta se onnistuu tarjoamaan reagoivamman pelikokemuksen ilman repimistä. Ja tietysti AMD:llä on vastaava nimeltä Enhanced Sync.

Toivottavasti tämä selitys on selvittänyt joitakin kysymyksiäsi siitä, miksi pelin ajaminen näytön maksimivirkistystaajuuden yläpuolella tuottaa reagoivamman pelikokemuksen ja miksi kyky ajaa pelejä suuremmilla ruudunpäivitysnopeuksilla on aina eduksi, vaikka näyttäisikin siltä, että näyttösi ei pysty hyödyntämään sitä.

Viimeinen huomautus: emme ole keskustelleet täällä G-Syncin ja FreeSyncin kaltaisista adaptiivisista synkronointitekniikoista, ja se johtuu siitä, että olemme puhuneet enimmäkseen pelien pyörittämisestä maksimivirkistystaajuuden yläpuolella, jolloin adaptiivista synkronointia ei sovelleta. Erilaisia synkronointimenetelmiä on paljon, mutta mukautuva synkronointi on hyvin erilainen kuin Vsync ja Fast Sync, joista olemme puhuneet, eikä se ole ainakaan tämän keskustelun kannalta merkityksellinen.

Lisälukemista
  • Parhaat pelinäytöt
  • FreeSync 2 selitetty
  • Parhaat näytönohjaimet 2018
Shopping Shortcuts
  • Radeon RX 570 Amazonissa, Newegg
  • Radeon RX 580 Amazonissa, Newegg
  • GeForce GTX 1060 6GB Amazon
  • GeForce GTX 1070 Ti Amazon
  • GeForce RTX 2070 Amazon
  • GeForce RTX 2070 Amazon, Newegg
  • GeForce RTX 2080 Amazonissa, Newegg
  • GeForce RTX 2080 Ti Amazonissa, Newegg

Masthead credit: Kuva: Jakob Owens

Articles

Vastaa

Sähköpostiosoitettasi ei julkaista.