Ubisoft zijn prutsers. Eerst bleeft de PS3 versie hangen op random momenten, dat is opgelost met een patch, maar de tearing is echt niet leuk meer. En het is niet echt nodig, want andere games, CoD4 bv, wijzen uit dat de PS3 het allemaal best kan, wat dus impliceert dat de programmeurs van Ubisoft die de PS3 engine gemaakt hebben niet echt hebben gekeken op de website van Insomniac bv of het sony developer network waar libraries en code snippets op staan om dingen echt snel te doen. Maar goed, AC is sowieso een saai spel.NRGetic schreef op zaterdag 02 februari 2008 @ 09:02:
Ik heb onlangs een PS3 gekocht. Nu heb ik een aantal games geleend om 's te kijken wat de PS3 zoal kan.
Bij het spelen van Assassin's Creed valt het me op dat er nogal wat screen tearing optreedt.
Is het de PS3 die te kort schiet en is AC gewoonweg te 'zwaar' (of is de PS te 'licht' tis maar hoe je het bekijkt)? Is het mijn LCD tv die niet kan tippen aan de game (Philips full HD) of is het een combinatie van beide?
Om voor eens en voor altijd het tearing/framedrop gezeik de nek op te draaien, hier een beknopte uitleg:Ik weet dat het ook met vsync te maken heeft. In verschilende fora zegt de een dat het aan de PS3 ligt en in de andere ligt het aan het LCD scherm.
Maar mijn vraag is dus eigenlijk: wat is screen tearing precies en wanneer treedt het op?
Tearing is vrij simpel uit te leggen. Ieder beeldscherm heeft een verversingsfrequentie. Bij TV's met een beeldbuis is dat 50hz, bij TFT monitoren en lcd/plasmas is dat 60hz. Dit houdt dus in dat er 50 of 60 keer per seconde een nieuw beeld getekend wordt op het scherm.
Laten we even aannemen dat je een LCD tv hebt AC aan het spelen bent. Als AC goed was geprogrammeerd dan had het 60 frames per seconde (fps) gehaald, dus het zou 60 keer per seconde een nieuw beeld aan de TV kunnen doorgeven en de TV zou iedere verversing een nieuw beeld kunnen tonen. Je snapt, veel games halen 60fps niet. Dus wat doen ze? Ze geven 30 fps door. Dit geeft de game meer lucht, want ze hebben nu 2 keer zoveel tijd om een frame te tekenen. De TV zal dus iedere 2 verversingen een nieuw beeld tekenen. Dit zie je als kijker accuut, want het is net iets minder vloeiend, maar nog steeds niet schokkerig.
Hoe tekent een gfx card of console nu een frame? Dit wordt gedaan in een framebuffer. Een framebuffer is veelal 2-ledig: een deel is klaar en wordt getoond op de monitor/tv (dus een frame wat doorgegeven is aan de tv/monitor) en het andere deel daarin wordt op dit moment getekend door de engine/renderer van het spel. Wanneer een frame klaar is, dan swapt de game de buffers om en het net getekende frame wordt dan doorgegeven aan de output en het deel dat daarvoor het beeld in zich had wordt gecleared en daarin wordt dan het nieuwe frame getekend.
Je snapt, als dit swappen in-sync loopt met de beeldverversing van de TV, dan zie je perfect smooth beeld. De output van de console of gfxcard leest de buffer waarin het frame staat dat getoond moet worden sequentieel, beeldlijn voor beeldlijn. Hoe rap de hardware ook is, dit kost tijd. Op zich is dit niet erg, als de TV achterloopt op het lezen van de buffer, dan heb je er geen last van. Normaliter is dat het geval, want de buffer wordt omgeswapped in de 'vertical blank'. Dit is de periode dat de electronenbeam wordt teruggesweaped van onder naar boven op de TV. Op LCD schermen heb je geen electronenbeam, maar ook die moeten de data lezen uit de output van de console/gfx card, en doen dat ook gewoon sequentieel, van boven naar beneden.
Stel, de game is niet bij machte om 30fps te halen, zoals bij AC veelvuldig gebeurt. Je hebt dan 2 mogelijkeden:
1) je krijgt framedrops
2) je krijgt tearing.
Framedrops krijg je als de bufferswapping van de framebuffer delen gelockt is op de Vertical Blank (VBL) van de tv/monitor. Bij 60hz, 30fps, dan kost een frame 0.0333..seconden. Stel, de game doet er 0.04 seconden over om een frame te tekenen. Dan is hij nog aan het tekenen wanneer de buffers geswapped moeten worden. De swap wordt dan NIET gedaan. Dit houdt dan in dat je niet 2 beeldverversingen naar hetzelfde frame zit te kijken maar 3. Er is dan een frame 'gedropped'. Framedrops zijn nadelig want de interne engine weet niets van rendering af, die maakt gewoon op 30fps of 60fps nieuwe frames aan (data om te renderen). De renderer kan het echter niet bijbenen en de engine moet dan compenseren. Dit is erg lastig, want hoeveel moet hij compenseren? Als hij dat niet doet raakt de buffer van frames om te renderen vol. Je ziet dat sommige games dan gewoon maar meer frames weggooien in de buffer, wat resulteert in nog meer choppy-ness.
Tearing krijg je wanneer de bufferswapping NIET is gelocked aan de VBL. De monitor/TV is op 1/3e van het beeld met tekenen en omdat de renderer klaar is met tekenen van het volgende frame worden de buffers geswapped. Als het beeld dan sterk verschilt (bv 20 pixels naar links verschoven is), dan zie je een breuk in het beeld: waar de monitor was met tekenen verspringt het beeld want de rest van het beeld is het volgende frame, het frame waar de tv/monitor mee had moeten beginnen BOVENAAN het beeld, echter de engine was te traag.
Wat engines moeten doen, en wat ze niet allemaal doen, is dat wanneer een frame te lang kost, de engine moet terugschalen naar minder polies of minder depth. Dit levert dan wellicht iets mindere kwaliteit op, maar wel dat de volgende frames niet tearen/droppen.
Het is ook zo dat een game OF tearing heeft OF framedrops, maar niet allebei.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com