Dat is idd echt een onzinverhaal ja

Je haalt 60 fps, en je hebt een 60Hz scherm dan heb je elke milliseconde 1 frame
Hoe kom je daar in hemelsnaam bij

Vanwaar die 1 milliseconde? 60 Hz voor een monitor betekent 60 refreshes van het beeld per seconde. Een zichtbaar frame duurt dus 1/60s = 16.67ms. De data van de frame zal niet instantaan van je videokaart naar de monitor verstuurd worden, dus ergens in die periode van 16.67ms zit een periode waarin het frame verstuurd wordt. Wat er gebeurt als je videokaart meer dan 60 beeldjes per seconde rendert is dat hij halverwege het versturen van het ene beeldje de interne buffer alweer overschrijft met de volgende. Aangezien de pixels doorgaans van links naar rechts, van boven naar beneden verstuurd worden, heeft dit als gevolg dat de onderste helft niet meer bij de bovenste helft hoort. Dit heet
tearing.
De framerate (die verder geheel los staat van de refresh rate) is wel van invloed op vertragingen in de gameplay. Als een game 30 frames per seconde eruit jast, dan duurt elke frame dus 33.33ms. Terwijl jij naar een beeld zit te kijken, is de game ondertussen de volgende frame al weer aan het renderen, dus daar zit sowieso al een vertraging van 33.333ms tussen in wat je ziet tov wat er daadwerkelijk gebeurt. Daarnaast is het zo dat de input ook eens per frame verwerkt wordt. Oftewel, als jij op een knopje drukt, duurt het gemiddeld een halve frame voordat die input verwerkt wordt, en daarna duurt het weer een heel frame voordat je het effect daarvan op het beeld ziet. Het nadeel van een lage framerate is dus vooral dat er een merkbare lag kan optreden, wat heel irritant speelt. Overigens is dit effect bij 30fps en doubleduffering nog nagenoeg niet merkbaar.
Echter, als je de tearing uit het begin van m'n verhaal wilt voorkomen, dan moet je "vsyncen". Dit betekent dat de videokaart pas een nieuw beeldje actief maakt nadat de vorige volledig verzonden is. Hierdoor krijg je dat frametijd altijd een veelvoud van de tijd van een enkel frame van de monitor inneemt. Oftewel, als je monitor 60Hz output, dan kun je 60fps, 30fps, 20fps, 15fps etc. draaien. Het probleem hiermee is dat je vaak nog een extra frame achter gaat lopen (je hebt immers een beeld dat momenteel getoond wordt, een beeld dat al klaar staat in de queue, en een beeld waar de game momenteel mee bezig is). En zeker in de situaties waarin een veelvoud van de frametijd
net niet gehaald wordt krijg je een stotterende framerate en een merkbare input lag, die heel storend is tijdens het gamen. Wat dat betreft speel ik liever een game die rock solid 30 draait, dan eentje die vaak 60 draait maar dat soms net niet haalt (waardoor hij terugvalt naar 30).
Een ander bijkomend effect is dat alle physics en bewegingen in de game afhankelijk zijn van de frametijd, terwijl dit eigenlijk niet juist is. Natuurlijk, als iets met 60 pixels per seconde over het scherm gaat, en je game loopt 60 fps, dan moet ieder object 1 pixel per frame worden opgeschoven, en als je game 30fps loopt moet dat 2 pixels per frame zijn. Het punt is, je weet als game niet hoe lang de huidige frame gaat duren. Je weet alleen hoe lang de vorige geduurd heeft. Als je steeds 60fps loopt ga je uit van een frametijd van 16.67ms, en beweeg je de objecten ook met die snelheid vooruit. Als er dan in eens een frame komt van 30fps (33.33ms), dan zal in dat frame het object nog steeds met 16.66ms vooruit zijn bewogen, terwijl het daadwerkelijke plaatje van dat frame veel te laat getoond wordt (en het object dus eigenlijk verder had moeten zijn op het moment dat jij het beeld ziet). En na die frame, als de framerate weer terugspringt naar 60, is het weer precies andersom - de objecten bewegen dan juist veel te weinig. Dit zorgt voor jerky movement, wat heel storend is in games die geen constante framerate halen.
[Reactie gewijzigd door .oisyn op 22 juli 2024 18:29]