Door Daan van Monsjou

Nieuwsredacteur

Hoge framerates én goede graphics

Hoe werken Nvidia DLSS, Intel XeSS en AMD FSR 2.0?

16-04-2022 • 06:00

28

Singlepage-opmaak

Wat zijn upscaling en spatial vs. temporal?

Voordat we DLSS, XeSS en FSR 2.0 uiteenzetten, is het goed om even stil te staan bij wat upscaling precies inhoudt. We bespraken het al kort op de vorige pagina, maar simpel gezegd: bij upscaling wordt een game op een lagere resolutie gerenderd en vervolgens wordt die resolutie verhoogd. Doordat de game op een lagere resolutie draait, kan de framerate een stuk hoger liggen. En doordat de resolutie later wordt opgeschaald, moet het verlies in beeldkwaliteit relatief beperkt blijven.

Hogere framerates zijn nooit mis, maar zeker bij moderne games kan upscaling soms zelfs broodnodig zijn. Denk aan games met raytracing, een rendertechniek die berucht is om zijn gevolgen voor de prestaties. Ook bij gamen op hogere resoluties dan 4k kan upscaling goed van pas komen. Om een 4k-beeld te tonen, moeten immers vier keer zoveel pixels gerenderd worden als bij 1080p, wat dus ook meer rekenkracht vergt. Er zijn verschillende manieren om dat aan te pakken. De gangbaarste zijn spatial upscaling en temporal upscaling.

Te renderen pixels bij verschillende resoluties
Resolutie Totaal aantal pixels
4k (3840x2160p) 8,29 miljoen
Quad hd (2560x1440p) 3,69 miljoen
Full hd (1920x1080p) 2,07 miljoen
Hd-ready (1280x720p) 0,92 miljoen

Spatial upscaling: informatie uit een enkel frame

We beginnen met technieken voor spatial upscaling, zoals AMD's FSR 1.0 en de eerste versie van Nvidia DLSS. Bij dat soort technieken wordt puur gebruikgemaakt van informatie die beschikbaar is in een enkel frame. Ieder frame wordt dus behandeld als een soort losstaand plaatje, dat op een lage resolutie wordt gerenderd en vervolgens door de upscaler wordt voorzien van meer pixels, met een output op hogere resolutie als gevolg.

Spatial upscalers proberen daarbij ontbrekende details te schatten op basis van informatie uit nabijgelegen pixels en deze vervolgens in te vullen. Daar zijn verschillende technieken voor, bijvoorbeeld bicubic-, bilinear- en Lanczos-resampling. Die technieken hanteren allemaal een eigen manier om de kleur van nieuwe pixels te schatten en in te vullen op basis van informatie uit een frame.

Op deze manier opschalen heeft verschillende voordelen. Het is relatief makkelijk te implementeren en het vergt niet bijzonder veel rekenkracht om de extra pixels op deze manier te schatten. Spatial upscaling kan bovendien vaak een prima beeldkwaliteit opleveren. Doordat het alleen informatie uit een enkel frame tot zijn beschikking heeft, is de eindkwaliteit nog wel een stuk minder dan bij 'native' rendering op hoge resolutie.

AMD FidelityFX Super ResolutionAMD FidelityFX Super ResolutionAMD FidelityFX Super Resolution

AMD's eerste versie van FidelityFX Super Resolution is een voorbeeld van een spatial upscaler.

Het eindresultaat is dan ook vaak minder scherp, doordat de upscaler simpelweg minder informatie heeft om mee te werken. Spatial upscaling kan ook flikkeringen in beeld veroorzaken. Dat komt doordat de spatial upscaler van frame tot frame werkt en daarbij verschillende afwegingen kan maken. De upscaler kan bij een frame bijvoorbeeld besluiten dat een pixel wit moet zijn, maar bij het volgende frame diezelfde pixel zwart invullen.

Bij lage schaalfactoren, bijvoorbeeld van 1440p naar 4k, zijn deze problemen kleiner, aangezien de upscaler dan nog relatief veel informatie heeft om mee te werken. Bij hogere schaalfactoren, bijvoorbeeld 1080p naar 4k, is de kans op foutjes in de upscaling groter, doordat de upscaler minder data tot zijn beschikking heeft.

Temporal upscaling: meer samples voor betere beeldkwaliteit

Aan de andere kant heb je technieken voor temporal upscaling. Dit soort technieken gebruikt data uit de huidige frames, maar combineert die met gegevens uit frames die eerder zijn gerenderd. Daardoor is er meer informatie beschikbaar voor de upscaler, wat een betere beeldkwaliteit moet opleveren.

Daarbovenop wordt bij temporal upscaling meestal tegelijk antialiasing toegepast. Dat betekent dat de opschaalstap eerder in de pijplijn kan plaatsvinden, aangezien de inputbeelden aliased mogen zijn. Dat komt de beeldkwaliteit uiteindelijk ten goede, doordat bij antialiasing al wat detail verloren gaat. Spatial upscaling vindt meestal juist plaats na antialiasing. Door de extra informatie is het bovendien mogelijk om hogere schaalfactoren toe te passen met minder kwaliteitsverlies.

DLSS 2.0 Deliver Us to the Moon
DLSS 2.0 is een voorbeeld van een temporal upscaler.

Een nadeel van temporal upscaling is dat het moeilijker is om dit in games te implementeren. Het verwerken van de extra gegevens uit vorige frames vergt bovendien wat meer rekenkracht, dus deze technieken zullen ook wat minder prestatievoordelen bieden ten opzichte van spatial upscaling.

Temporal upscaling kan ook enkele problemen introduceren. Doordat ook voorgaande frames gebruikt worden, kan er ghosting ontstaan als het beeld beweegt. Bij het tonen van beweging is het dan alsof pixels worden uitgesmeerd. Ook kan er wat blurring ontstaan, evenals flikkering en andere grafische artefacten. Die zaken vergen extra aandacht bij het implementeren van temporal upscaling.

Bij temporal upscaling zijn er eveneens verschillende manieren om het toe te passen. Ook de temporal upscalers van AMD's FSR 2.0, Intels XeSS en Nvidia's DLSS verschillen onderling. In de volgende pagina's gaan we in op de technische werking van alle drie de technieken, beginnend met het inmiddels welbekende DLSS.

Amazon AWS Ghosting
Een extreem voorbeeld van ghosting, waarbij pixels uit voorgaande frames in beeld blijven terwijl die niet langer relevant zijn.
Bron: Amazon Web Services

Lees meer