Közel sem csak egy Lánczos algoritmus a FidelityFX Super Resolution

Ha csak a tradicionális Lánczos alkalmazása elég lenne, akkor sok-sok éve léteznének hasonló eljárások a játékokban.

Az általunk is tesztelt FidelityFX Super Resolution eljárásnak az előző hónap közepén vált publikussá a forráskódja, amelyről szintén beszámoltunk. Különösebb fejlemény az AMD megoldásával kapcsolatban nincs, de Alexander Battaglia, a Digital Foundry újságírója a Twitteren azt állítja, hogy az NVIDIA meghajtójában lehet kérni Lánczos algoritmusra épülő skálázást, és mivel a FidelityFX Super Resolution Lánczos algoritmusra épül, így az NVIDIA felhasználók elérhetik ezt a technológiát minden játékban.

A probléma a fenti állítással, hogy nem fedi teljesen a valóságot, de rengeteg média átvette, pedig a forráskód elérhetősége miatt nyugodtan utána lehetett volna nézni annak, hogy mi történik az AMD eljárásán belül. Sőt, a vállalat a FidelityFX Super Resolution kiadása után több fejlesztői előadást is tartott, amelyen belül részletesen elmagyarázták, hogy mennyi különbség van a Lánczos algoritmushoz viszonyítva, de ne rohanjunk ennyire előre.

Kezdjük azzal, hogy a mai grafikus meghajtókban ténylegesen van egy olyan opció, hogy GPU skálázás. Ezt a modernebb AMD és NVIDIA hardverek régóta támogatják, és lényegében egy speciális részegységről van szó a kijelzőmotorokban, amibe az érintett cégek fixfunkciós formában implementálták a Lánczos  algoritmust. Ennek a célja az, hogy ha egy monitor nem rendelkezik beépített skálázóval, akkor a GPU meg tudja helyette oldani a skálázást, így a natív felbontás alatti képet is jelentős torzulások nélkül ki lehet rakni a teljes kijelzőre. Egyszerű problémára, tehát egy egyszerű megoldást kínálnak a gyártók, noha manapság azért igen ritka az a megjelenítő, amely ne tartalmazna gyárilag skálázót, de elvétve előfordul, és a GPU-k kijelzőmotorjába implementált skálázóblokkok a mai tranzisztorszámok mellett elhanyagolható költségnek tekinthetők. Persze ezeknek így is rengeteg limitációjuk van, tehát még a GPU-kat fejlesztő cégek szerint is célszerűbb az adott monitor skálázóját használni, mert azt konkrétan kijelzőspecifikusan tervezik. De jobb híján ott a menekülőút a GPU-kban, évek óta lassan mindegyikben, nem csak az NVIDIA megoldásaiban.

Persze adódhat a kérdés, hogy ha az AMD GPU-iban is van ilyen skálázó, akkor miért nem ezt használják a FidelityFX Super Resolutionre? Nos, ez a hardver közel sem ugyanarra a problémára reflektál, amit a FidelityFX Super Resolution megoldani hivatott. Persze megoldható az AMD-nél is a GPU-s skálázás a Radeon Software-ből, amire lehet kérni egy Radeon Image Sharpening élesítést, ahogy az NVIDIA-nál is van GPU-s skálázás a meghajtóban egy másik élesítő eljárással. Ezek ugyan jobb minőséget kínálnak az élesítés által, mintha szimplán kirakná a kijelző a natívnál alacsonyabb felbontású képet, de megközelítőleg sem tudják előállítani azt a minőséget, amit a FidelityFX Super Resolution.

Ennek az oka, hogy a FidelityFX Super Resolution nem csak egy szimpla Lánczos felskálázó, jóval bonyolultabb annál. Egyrészt a Lánczos algoritmus fixfunkciós hardverrel eléggé realitás, de compute shaderrel már közel sem annyira, mert relatíve sok speciális műveletet (szinuszfüggvény, reciprok, négyzetgyök) kell hozzá végezni. Ezekben a műveletekben a GPU-k általánosan rendkívül lassúak, mivel nem a fő ALU-kon futnak, hanem kis számú speciális ALU-kon. Nem véletlen, hogy a FidelityFX Super Resolution lecserélte a Lánczos algoritmus közelítésre használt egyenletét egy olyanra, amely csak alapműveleteket alkalmaz. Ezzel ugyan a pontosság némileg csökken, de az eredeti algoritmus teljesítménye sokszorosára nő, és ezen jó 20-30-szoros tempóelőnyt kell érteni. Erre konkrétan azért volt szükség, mert a Lánczos skálázóalgoritmus az említett módosítás nélkül eléggé lassan futna a mai GPU-kon, ha compute shaderben lenne implementálva. Sok hardveren a valós idejű feldolgozás sem lenne elérhető, anélkül pedig értelmetlen a felskálázás. Egy videónál még vállalható, hogy komolyabb késleltetése van a számításnak, de egy interaktív játéknál egyszerűen nem fér bele, egyáltalán nem adna jó élményt.

A FidelityFX Super Resolution tehát egyrészt több nagyságrenddel gyorsítja a Lánczos algoritmus teljesítményét, másrészt van egy másik tényező is, ami fontos, ez pedig a képminőség. Bár a Lánczos egy kiváló általános skálázóalgoritmusnak számít, megvannak a maga nyűgjei. Többek között úgynevezett ringing képhibákat generál a működése során, amelyek felfoghatók lágy szellemképnek a képen található élek mentén. Emiatt az AMD EASU (Edge-Adaptive Spatial Upsampling) algoritmusa nemcsak egy gyors felskálázó, hanem egyben egy élrekonstruáló megoldás is. Ezért van az, hogy a FidelityFX Super Resolutionre egyáltalán nem jellemző a ringing képhiba, szemben a tradicionális Lánczos algoritmussal. És itt a válasz arra, hogy miért nem használja az AMD a GPU-ba épített skálázóblokkot; nem tudja megadni azt a képminőséget, amit a FidelityFX Super Resolution előállít, mert megközelítőleg sem végez olyan pontos munkát. De ezzel önmagában nincs semmi baj, mert nem is erre tervezték az érintett célhardvert a GPU-n belül.


[+]

A EASU algoritmussal történő felskálázás után a FidelityFX Super Resolution még végez egy élesítést is, méghozzá az RCAS (Robust Contrast-Adaptive Sharpening) algoritmussal. Ez sem ugyanaz, mint a FidelityFX CAS (Contrast-Adaptive Sharpening) vagy a RIS (Radeon Image Sharpening). Itt is a minőség a lényeg, mert a normál, akár meghajtóba épített élesítési megoldások arra vannak tervezve, hogy a natív felbontást élesítsék, és el is mondható róluk, hogy viszonylag kis teljesítmény befektetésével hoznak jó eredményt, méghozzá anélkül, hogy az élesítés elkezdené úgymond olajfestményszerűvé tenni a végső képet. Persze működnek natívnál kisebb felbontáson is, de a probléma jellege ilyenkor némileg más, amire az AMD egy alternatív élesítési eljárást tervezett. Ennek a teljesítményigénye ugyan jóval nagyobb, mint például az eredeti CAS algoritmusé, de felskálázott tartalommal sokkal jobb munkát végez. Viszont nem biztos, hogy kedvez ez az robusztusabb élesítési megoldás a játékokban használt a HUD-nak, vagy akár bizonyos, utófeldolgozással létrehozott effekteknek. Ebből különösebb gond azért nincs, mert a FidelityFX Super Resolutiont a feldolgozási futószalagon a tone mapping után érdemes beépíteni, és később ajánlott hozzáadni a képhez azokat az effekteket és képi elemeket, amelyeken nem garantált az eljárás jó működése.

Összességében lehet a meghajtókon belül élesítést kérni, GPU-s skálázást is, de olyan megoldást nem, amilyen például a FidelityFX Super Resolution. Ezt sajnos a játékokba kell integrálni, hogy igazán jól működjön, alternatív lehetőség nincs. Ha lenne, akkor az AMD és az NVIDIA már rég beépített volna valami hasonlót az eszközillesztőkbe. Ugyanakkor maga a probléma a jelenlegi képi leképezés mellett, külsőleg erőltetett eljárásokkal megoldhatatlan.

Azóta történt

Előzmények

Hirdetés