Ook AMD gaf aan met een nieuwe temporal upscaler te komen, als laatste van de drie grote gpu-makers. Het betreft een nieuwe versie van bestaande AMD's FidelityFX Super Resolution-techniek, momenteel nog een spatial upscaler die vorig jaar al uitkwam. FSR 2.0 mag dan zijn naam delen met de eerste versie van FSR, de werking is anders.
FSR 2.0 is namelijk temporal. In dit opzicht toont het veel gelijkenissen met DLSS en XeSS. De onderscheidende feature van AMD is dat geen gebruik wordt gemaakt van deep learning of AI-hardware, zoals dat bij de varianten van Nvidia en Intel wel het geval is. Dat moet de compatibiliteit vergroten en heeft volgens AMD verschillende andere voordelen, zoals meer flexibiliteit bij het implementeren en optimaliseren van FSR 2.0. Een handgemaakt algoritme kan immers makkelijker aangepast worden dan een neuraal netwerk, dat wordt getraind en daarna als het ware kant-en-klaar wordt geleverd aan ontwikkelaars.
Tegelijk betekent dit dat AMD andere stappen moet zetten om zaken als ghosting en artefacting te voorkomen. Onlangs gaf het bedrijf details over de techniek achter FSR 2.0, tijdens de Game Developers Conference in San Fransisco.
FSR 2.0 in de renderpipeline
Aangezien FSR 2.0 veel van dezelfde inputs vergt als DLSS en XeSS, gaan we niet al te diep in op de exacte locatie in de renderpipeline. Net als DLSS en XeSS vervangt FSR 2.0 de TAA-stap in de renderpipeline, waarmee de opschaaltechniek opnieuw helemaal vooraan in de postprocessingketen wordt geplaatst.
FSR 2.0 vereist opnieuw gejitterde inputframes met motionvectoren, dieptebuffers en data over kleuren. Al die informatie wordt aan FSR 2.0 gevoed, waarna de techniek een opgeschaald frame 'uitspuugt'. Dat wordt vervolgens door de rest van de postprocessingpipeline geloodst en uiteindelijk op een hogere resolutie getoond op het scherm van de gebruiker.
Upscaling met FSR 2.0: Geen AI, maar Lanczos
Hier eindigen overigens de gelijkenissen met DLSS en XeSS. Zoals gezegd gebruikt AMD geen AI of machinelearning voor het daadwerkelijk opschalen. Volgens het bedrijf komt dat onder meer de compatibiliteit ten goede. Ook zou deze aanpak beter te optimaliseren zijn, doordat ontwikkelaars meer controle hebben over de inzet van dat handgemaakte algoritme. AMD gaf daarover meer details in zijn GDC-presentatie.
Net als FSR 1.0, borduurt de opschaalstap van FSR 2.0 voort op een aangepaste versie van het gangbare Lanczos-interpolatiefilter. Met Lanczos worden de targetpixels voor de uiteindelijke resolutie berekend door middel van de samples die met jittering zijn verzameld, waarbij uiteraard ook de motionvectoren worden meegenomen in het geval van bewegende beelden.
AMD geeft daarbij de onderstaande afbeelding als voorbeeld, waarbij een pixel omgezet moet worden in vier targetpixels voor het opschalen van 1080p naar 4k. In deze afbeelding vormen de negen grijze blokken de low-res pixels, waarmee het frame op 1080p is gerenderd. De vier kleine stippen in iedere pixel zijn de middelpunten van de targetpixels, die met de opschaalstap berekend moeten worden voor een eindresultaat op 4k. De blauwe stippen zijn de samples die met jittering zijn verzameld uit huidige en voorgaande frames. In het voorbeeld toont AMD één sample per pixel voor de leesbaarheid, maar in de praktijk ligt dat aantal hoger.
Via Lanczos wordt de weight van iedere sample berekend en vervolgens geclampt. Dat betekent in de praktijk dat informatie uit samples die dichter bij het middelpunt van de targetpixel zitten, zwaarder wordt meegeteld tijdens de opschaalstap. Samples die verder weg zitten, zijn minder belangrijk. Dat moet scherpere beelden opleveren en ringing-artefacten voorkomen.
Simpel gezegd: rekening houdend met dat berekende gewicht en de bewegingsdata uit dilated motionvectoren, wordt het gemiddelde van deze samples genomen om de targetpixels zo waarheidsgetrouw mogelijk in te kleuren, met een opgeschaald frame als resultaat.
Lanczos-upscaling en motionvectoren in FSR 2.0 Bron: AMD
Ghosting oplossen zonder deep learning
FSR 2.0 gaat echter verder dan dat. Waar Nvidia en Intel AI inzetten voor het opschalen van een frame, waarbij ook zaken als artefactvorming worden gecorrigeerd, doet AMD dat dus niet. Het bedrijf zet daarom andere trucjes in om temporal artifacts te voorkomen.
Een voorbeeld betreft ghosting, waarbij een deel van een voorgaand frame in beeld blijft, waardoor het lijkt alsof een object is uitgesmeerd. Er zijn verschillende situaties waarin dat kan optreden. De eerste is bij disocclusions, waarbij een verborgen object opeens zichtbaar wordt. In een game kan dat bijvoorbeeld voorkomen als een verstopte vijand achter een muur vandaan komt of juist als een personage beweegt en de omgeving achter dat personage zichtbaar wordt.
In die gevallen wordt een disocclusion mask gecreëerd. Daarbij komen de eerdergenoemde dieptebuffers kijken. Hiermee vergelijkt AMD de diepte van een frame met de diepte van het vorige frame. Op die manier kunnen verschillen in de omgeving aangetoond worden. Het bedrijf toont hiervoor een voorbeeld van een bewegende robot op een simpele achtergrond, waarbij het verschil in diepte tussen twee frames wordt getoond op een rode afbeelding. Het zwarte gedeelte is het gebied dat in het vorige frame verborgen was, maar nu zichtbaar is geworden doordat de drone is bewogen.
Die informatie kan gebruikt worden om disocclusions te detecteren. Op plekken waar disocclusions zitten, wordt vrijwel alle informatie uit voorgaande frames geschrapt, wat temporal ghosting moet voorkomen. Ook wordt het huidige frame op die plekken licht vervaagd, wat de beeldkwaliteit dan weer ten goede moet komen bij gebrek aan de extra samples uit vorige frames.
Ghosting kan ook veroorzaakt worden door shading changes. Denk daarbij aan situaties waarin de verlichting wordt aangepast. Dit kan ook voorkomen bij geanimeerde textures. Het moeilijke daaraan is dat dit soort veranderingen niet verholpen kan worden met motionvectoren of dieptebuffers, doordat ze niet direct onderhevig zijn aan bewegingen. In dit geval is kleurinformatie uit voorgaande frames nog steeds waardevol, vertelt AMD. Deze kleuren moeten echter worden aangepast om te passen binnen het nieuwe frame. FSR 2.0 berekent daarvoor een geldigheidsbereik, waarbinnen de kleuren uit voorgaande frames beperkt moeten worden.
Flikkering door thin features
Verder kunnen thin features leiden tot problemen als flikkering. Zeer dunne objecten, die in het frame slechts een paar pixels breed zijn, hoeven op zichzelf geen probleem te zijn, maar bij temporal upscaling leveren ze toch problemen op. Aangezien de pixels worden verschoven bij jittering, is het mogelijk dat thin features in bepaalde frames niet in beeld zijn. Daardoor kunnen ze tijdelijk in en uit het frame verschijnen en verdwijnen, wat leidt tot een onstabiel beeld.
Om hiermee om te gaan, heeft AMD een vergrendelingsmechanisme ingevoerd. Daarmee worden pixels als ribbels gedetecteerd en worden ze vastgezet. In dat gedeelte van het frame worden pixels als spatial behandeld. In de praktijk worden gegevens uit voorgaande frames in die gedeelten van het frame dus genegeerd, waardoor ze niet uit beeld verdwijnen.
Uiteraard kunnen deze features niet continu worden vastgezet; dat zou andere visuele problemen opleveren. De locks worden in ieder geval vrijgegeven na het voltooien van een jittersequentie. Dergelijke sequenties moeten daarom zo kort mogelijk zijn, terwijl er nog wel voldoende jittersamples zijn om opgeschaalde beelden van hoge kwaliteit af te leveren. Als de thin feature na de jittersequentie nog steeds in beeld is, wordt de lock hernieuwd. Locks worden verder meebewogen met de viewport en worden stopgezet als de thin features uit beeld verdwijnen.
AMD erkent daarbij dat het vermoedelijk niet snel genoeg is om locks stop te zetten na het verloop van een jittersequentie. Ook dat kan ghosting opleveren. Om dit te voorkomen, worden opnieuw disocclusions en veranderingen in de shading gevolgd. Locks worden automatisch stopgezet als een disocclusion plaatsvindt, die wordt gedetecteerd met de eerdergenoemde disocclusion masks. Een algoritme dat shading changes opmerkt, kan ook locks opheffen die niet langer relevant zijn in de context van een nieuw frame.
Kwaliteitsmodi en schaalfactoren
AMD voorziet FSR 2.0 van vier verschillende prestatiemodi, hoewel een daarvan optioneel is. Standaard beschikt iedere FSR 2.0-game over een Quality-, Balanced- en Performance-modus met schaalfactoren tussen de 1,5 en 2,0. De Ultra Quality-modus uit FSR 1.0 verdwijnt, hoewel daar een optionele Ultra Performance-optie met 3x-scaling voor terugkomt. Ontwikkelaars kunnen die feature echter uitzetten als ze dat willen.
AMD claimt dat de Quality-modus een 'vergelijkbare of betere' beeldkwaliteit oplevert in vergelijking met native rendering op de outputresolutie en zegt dat gamers daarbij een 'significante prestatiewinst' kunnen verwachten. De Balanced-modus biedt volgens het bedrijf een compromis tussen beeldkwaliteit en de verwachte prestatiewinst, terwijl de beeldkwaliteit bij de Performance-optie 'vergelijkbaar' moet zijn met native met een grote prestatiewinst. De optionele Ultra Performance-modus is bedoeld om 'de ultieme prestatiewinst te bieden met behoud van een beeldkwaliteit die representatief is voor native rendering'.
Wat concrete prestaties betreft deelt AMD momenteel alleen nog een vergelijking tussen de Performance-modus en native 4k in de game Deathloop. Het getoonde voorbeeld claimt een prestatieverbetering van 53 naar 101fps, wat neerkomt op ongeveer 90 procent. Meer details worden vooralsnog niet gedeeld, hoewel de fabrikant ook vergelijkingen tussen de beeldkwaliteit in de Quality-, Balanced- en Performance-modi toont. Net als XeSS, is FSR 2.0 echter nog niet uit. Het moet dus nog blijken of deze claims in de praktijk kloppen.
AMD FSR 2.0-kwaliteitsmodi | |||
---|---|---|---|
Modus | Schaalactor | Renderschaal | Renderresolutie voor upscaling naar 4k |
Quality | 1,5x | 67% | 2560x1440 pixels |
Balanced | 1,7x | 59% | 2259x1270 pixels |
Performance | 2,0x | 50% | 1920x1080 pixels |
Ultra Performance (optioneel) |
3,0x | 33% | 1280x720 pixels |
Compatibiliteit, beschikbaarheid en integratie in games
Net als XeSS, is FSR 2.0 open source en crossplatform. Daarmee zal de techniek ook werken op videokaarten van andere fabrikanten. AMD geeft wel aan dat FSR 2.0 meer rekenkracht vergt dan de eerste versie van FidelityFX Super Resolution, vanwege de complexere berekeningen die komen kijken bij temporal upscaling en het algoritme dat AMD daarvoor hanteert.
Volgens het bedrijf is de techniek onder meer geschikt voor zijn Radeon RX 590 met Polaris-gpu, naast veel RDNA- en RDNA2-kaarten. Voor Nvidia is FSR 2.0 geschikt voor bepaalde kaarten met Pascal-gpu, naast de Turing- en Ampere-generaties. Of en hoe de komende Arc-videokaarten van Intel ondersteund zullen worden, is nog niet bekend, hoewel het aannemelijk is dat deze wel overweg kunnen met FSR 2.0.
'Uitgangsniveau' hardware voor AMD FidelityFX Super Resolution 2.0 | ||
---|---|---|
Targetresolutie | AMD | Nvidia |
3840x2160 pixels | Radeon RX 6700 XT Radeon RX 5700 (En hoger) |
GeForce RTX 3070 GeForce RTX 2070 (En hoger) |
2560x1440 pixels | Radeon RX 6600 Radeon RX 5600 Radeon RX Vega-serie (En hoger) |
GeForce RTX 3060 GeForce RTX 2060 GeForce GTX 1080 (En hoger) |
1920x1080 pixels | Radeon RX 6500 XT Radeon RX 590 (En hoger) |
GeForce GTX 16-serie GeForce GTX 1070 (En hoger) |
Ontwikkelaars moeten ondersteuning voor FSR 2.0 handmatig toevoegen aan hun games, net als bij DLSS, XeSS en FSR 1.0. De integratietijd daarvoor verschilt volgens AMD per scenario. Bij games die al DLSS 2 ondersteunen, moet het 'minder dan drie dagen' duren om FSR 2.0-ondersteuning toe te voegen. Ook integratie in Unreal Engine 4- en 5-games moet relatief snel gaan via een FSR 2.0-plug-in. Bij games die geen ondersteuning hebben voor decoupled game- en renderresoluties of motionvectoren, duurt integratie vier weken of langer, verwacht AMD.
AMD brengt FSR 2.0 in dit kwartaal uit als een api, waarmee ontwikkelaars aan de slag kunnen met de techniek. De broncodes worden dan ook via GitHub vrijgegeven. FSR 2.0 krijgt ondersteuning voor DirectX 12 en Vulkan. AMD spreekt ook over een Unreal Engine-plug-in voor versie 4.26 of nieuwer, net als DLSS en XeSS. Over een Unity-plug-in wordt momenteel nog niet gesproken, maar FSR 1.0 is al wel beschikbaar voor die engine. Ontwikkelaars kunnen FSR 2.0 in de toekomst ook implementeren in Xbox-games. Daarvoor is al een devkit beschikbaar, maar het is niet bekend wanneer de eerste FSR 2.0-games voor de Xbox daadwerkelijk uitkomen.
Vooralsnog is bekend dat de tweede versie van FSR beschikbaar komt in twee games; dit kwartaal krijgt Deathloop van Arkane Studios ondersteuning voor FSR 2.0. Forspoken van Luminous Productions zal bij release in oktober de opschaaltechniek ook ondersteunen. AMD zegt later dit kwartaal met meer informatie te komen.