Hoe Playstation 1-graphics toch zo hun charme kunnen hebben
Voor retro-likes zijn 8- en 16-bit-stijlen niet al meer wat de klok slaat: de low-poly-look van de Playstation 1 is namelijk bezig aan een opmars. Wat zorgde er destijds voor dat Playstation-games zo’n unieke uitstraling hadden?

Sony’s eerste driedimensionale console was een doorslaand succes: het bedrijf verkocht namelijk meer dan honderd miljoen exemplaren van de Playstation 1. Veel hedendaagse gamefranchises vonden er hun oorsprong en gevestigde series, zoals Final Fantasy, maakten de overstap na jarenlang trouwe dienst bij Nintendo.
Als je met deze console opgegroeid bent, dan heb je waarschijnlijk warme herinneringen aan de nieuwe dimensie die Sony bracht met de PS1. Driedimensionale gamewerelden stonden echter nog in de kinderschoenen. Bij de Playstation 1 merk je dat vooral aan texturen met een lage resolutie, wiebelige polygonen en onnatuurlijk ogende oppervlakken. Hoewel die opsomming het resultaat is van technische tekortkomingen, roepen ze nu een warm gevoel van nostalgie op. Imperfecties kunnen zo hun charme hebben.
Beperkingen in de hardware
Om te begrijpen waarom Playstation-games er destijds zo uitzagen, moeten we onder de cd-lade kijken. De console had slechts 2 MB aan werkgeheugen tot zijn beschikking en daarbinnen moest die alles laden: spellogica, (het gros van) geluid, animaties en geometrie. Naast het, naar huidige maatstaven, krappe werkgeheugen zijn ook de graphics processing unit (gpu) en central processing unit (cpu) van belang voor de unieke look van de PS1.
De cpu werd bijgestaan door een aparte chip, de geometry transformation engine (gte), die gespecialiseerd was in het maken van 3d-berekeningen. Opmerkelijk is hier dat de gpu zelf eigenlijk een 2d-machine is: die heeft geen logica aan boord voor het maken van 3d-spelwerelden. De gpu kon alleen platte vlakken op het scherm tekenen. Kortgezegd ontstond het 3d-effect doordat de gte de driedimensionale wereld eerst platsloeg tot 2d-coördinaten, waarna de gpu die platgeslagen polygonen kon voorzien van texturen.

De wereld geperst in één megabyte
Bovenop het werkgeheugen had de Playstation 1 MB aan videogeheugen (vram). In die ene megabyte moesten zowel de framebuffer (het beeld dat naar je televisie gaat) als alle texturen passen die op dat moment zichtbaar waren. Texturen móesten in het vram staan zodat de PS1 ze op een polygoon kon plakken. Er was geen manier om ze direct vanaf de schijf te streamen.
In theorie paste er een 16-bits textuur van 1024 bij 512 pixels in die megabyte, maar de framebuffer eiste daar zijn deel van op. Ook hadden ontwikkelaars kunnen kiezen voor een resolutie van 640 bij 480 pixels, maar in de praktijk kwam het meer dan eens neer op ongeveer de helft daarvan. Dat scheelde niet alleen vram, maar gaf hen ook ruimte voor een aparte buffer om naartoe te renderen, zodat het beeld niet zichtbaar opgebouwd werd en ze effecten konden toevoegen.
Daardoor bleef er uiteindelijk ongeveer 480 KB aan videogeheugen over voor texturen. In die ruimte pasten zo’n vier textures van 256 bij 256 pixels en dat was het. Wilde je een rijke, gevarieerde wereld bouwen, dan moest je zuinig zijn, lage resoluties accepteren, texturen recyclen en gebruikmaken van het inkleuren van polygonen zonder aankleding.
Diepgang is ver te zoeken
Nu komen we bij de beperkingen aan die aanwezig waren vanwege de technische keuzes die Sony maakte. Omdat de gpu eigenlijk een 2d-machine was, gebeurde er iets vreemds zodra een developer een textuur op een polygoon projecteerde die niet parallel liep aan de breedte van het scherm. De gte kon prima de hoekpunten van een polygoon in 3d-ruimte plaatsen en omrekenen naar een 2d-positie op het scherm. Maar zodra de gpu de textuur tussen die hoekpunten ging invullen, was alle informatie over diepte verdwenen. De gpu kreeg simpelweg te horen: “teken een samenstelling tussen deze drie of vier 2d-punten” en deed dat door lineair tussen de hoekpunten te interpoleren, zonder enig besef dat het ene hoekpunt mogelijk veel verder weg was dan het andere. Dit noem je affine texture mapping.
Het gevolg is dat bekende wiebelen en vervormen van textures op vloeren, muren en andere oppervlakken die schuin in beeld staan. Een rechte tegelvloer bijvoorbeeld kon gaan golven zodra je er overheen liep. Moderne gpu’s lossen dit op met perspective correct texture mapping, waarbij een engine voor elke pixel opnieuw rekening houdt met diepte. Een berekening die de PS1-gpu gewoonweg niet kon maken.

Wie gaat er voor?
In een 3d-wereld moet een console bovendien bepalen welke objecten voor elkaar staan (en dus weten waar iets in de diepte staat). Moderne hardware doet dit per pixel met een zogeheten Z-buffer. In die buffer onthoudt een systeem voor elk beeldpunt hoe ver het verwijderd is van de camera. De PS1-gpu kon dat niet, omdat die geen besef had van drie dimensies. In plaats daarvan sorteerde die per polygoon, op basis van een gemiddelde diepte. De console nam het gemiddelde van alle hoekpunten van een polygoon en gebruikte die ene waarde om te bepalen of het voor of achter andere polygonen moest tekenen.
Dat werkt prima zolang die grafische elementen niet overlappen. Maar zodra twee polygonen elkaar gedeeltelijk kruisen, bijvoorbeeld als twee zwaarden elkaar raken, gaat het mis. De ene polygoon klapt opeens helemaal vóór of helemaal achter de andere, in plaats van dat ze elkaar correct doorsnijden. Vandaar de bekende z-fighting en het plotselinge wisselen van zichtbare oppervlakken naarmate de camera beweegt.
Bibberen zonder het koud te hebben
Het trillen en correct interpreteren van objectranden, vooral wanneer een personage of de camera langzaam beweegt, is iconisch voor de PS1. Een polygoon beslaat een aantal pixels op je scherm, maar de exacte hoeken liggen zelden precies op een pixelgrens. Modernere systemen rekenen op sub-pixelniveau: ze onthouden dat een hoek bijvoorbeeld op positie 100,7 ligt en mengen dat met de omliggende elementen, waardoor een beweging vloeiend oogt.
De gpu van de Playstation kon dat niet. De coördinaten van polygonen moesten altijd hele getallen zijn; een rand kon niet tussen twee pixels in zweven. Bewoog een object langzaam over het scherm, dan bleef het op positie honderd staan totdat het opeens naar 101 sprong. Dat veroorzaakt het karakteristieke (haast magnetische) uitlijnen van randen van de ene naar de andere positie, alsof alles in beeld voortdurend kleine, schokkerige stappen zet. Wat de grafische elementen feitelijk ook deden.

Imperfectie als esthetiek
Hoewel al die aspecten die het beeld van een Playstation 1 zo uniek maakten voortkwamen uit technische tekortkomingen, worden ze nu juist omarmd. De wiebelende texturen, de plotseling verspringende polygonen, de trillende objectranden: het zijn allemaal imperfecties van een machine die meer wilde dan zijn hardware kon waarmaken. En juist daarin schuilt de charme, zo zie je onder meer bij de game Vultures.
Waar veel moderne games streven naar fotorealisme, of het laten zien van zo veel mogelijk detail, bood de PS1-look een ruwheid die ruimte laat voor de verbeelding. Een trillende polygoon of wiebelende textuur herinnert je eraan dat je naar een nagemaakte wereld kijkt die niet echt is, maar toch een verhaal vertelt. Bovenal heeft die een hoog gehalte nostalgie. Voor een nieuwe generatie ontwikkelaars is dat geen tekortkoming meer, maar een keuze in stijl. En als het een keuze is, dan is er schoonheid — en die kunnen we jaren later meer en meer waarderen.
Deze tekst is geschreven door Ronald van der Woude.
Voor meer verhalen kun je terecht in ons overzicht. Daarnaast recenseren we wekelijks hardware, voornamelijk retrohandhelds, en kun je bij ons terecht voor gamereviews die altijd oog hebben voor de retrogamer. Je kunt je daarnaast aanmelden voor onze Discord, waar we het over spellen en meer hebben.