Hlavní navigace

Nvidia uvádí DLSS 2.0: nová verze AI upscalingu je temporální a nese mnohá vylepšení

24. 3. 2020

Sdílet

Nová verze DLSS je postavená na úplně novém základu se vylepšeným výkonem a kvalitou. Proti předchůdci využívá temporální stabilizace a bude nastavitelná.

V závěsu za odhalením DirectX 12 Ultimate, které už Nvidia podpouje v grafikách GeForce RTX 2000, má výrobce grafick GeForce ještě jednu novinku pro hráče. Ta se týká její upscalovací technologie DLSS, která zvyšuje snímkovou frekvenci her tím, že vykresluje na nižším rozlišení a potom používá upscaling na bázi neuronových sítí k vylepšení detailů. Tato technologie nyní dostává novou verzi DLSS 2.0, která je přepracovaná a výrazně mění svoje fungování proti tomu, co DLSS nabízelo dosud, a díky tomu by se měla zlepšit výsledná kvalita. Pro připomenutí, DLSS Nvidia oznámila při odhalení Turingu, i když v praxi se tato technologie poprvé ukázala až o něco málo později. Jejímu fungování v první verzi jsme se věnovali v tomto článku.

Co je DLSS 1.0

V krátkosti princip spočívá v tom, že hra je renderována v rozlišení nižším než nativním (Při 1440p například jenom na Full HD), ale potom je použitý upscaling. Na rozdíl od běžného je ale v něm použita speciálně natrénovaná neuronová síť. Jde o klasický upscaling jednotlivých snímků, ovšem neuronová síť, která ho provádí, byla speciálně natrénovaná na míru konkrétní hře, která DLSS používá. To Nvidia dělá tak, že používá korpus snímků ze hry na daném vstupním rozlišení a k nim stejný snímek ve vysokém rozlišení s aplikovaným vyhlazováním MSAA. Neuronová síť se pak trénuje podle toho kritéria, aby produkovala ze snímků v nízkém rozlišení něco, co se dle použitých matematických metrik co nejvíce podobá onomu vysoce kvalitnímu snímku.

Tento přístup v závislosti na návrhu algoritmu a charakteru sítě dokáže produkovat ostrý obraz bez typických projevů upscalingu jako je neostrost, ringing a aliasing (viditelné „kostičky“). DLSS přitom dokáže zastoupit i samostatný antialiasing navíc a odstranit aliasing, který již byl ve vstupu, což je zajímavý přínos. Ale toto lze říci hádání vyšší kvality z nižšího rozlišení nemůže přirozeně dělat zázraky a úplně přesně trefit detail, který by snímek na vyšším rozlišení měl správně mít. Nelze ale říct, že by si neuronová síť dokázala z tréningu kompletně pamatovat, jaké textuře v nízkém rozlišení přesně odpovídá jaká textura z rozlišení vyššího a tato data z informací uložených v sobě nějak vytáhnout. Spíše bychom DLSS měli chápat jako algoritmus typu Super Resolution, který je trénováním vyladěný pro co nejlepší skóre podobnosti speciálně na obrazovém obsahu hry, na kterou bude aplikován.

Pokročilý upscaling tohoto stylu také produkuje své vlastní artefakty, může vzniknout nepřirozený vzhled hran, deformace drobných detailů či pravidelných struktur nebo rozmazání jemného detailu textur (vzorek tkaniny, zrnitý vzhled). Lze to možná připodobnit k efektům, které dělá digitální vylepšování obrazu ve fotoaparátech a foťácích mobilů, které potlačují nedokonalosti, ale přinášejí i různé vlastní nešvary (dost viditelné je to často na vegetaci, s níž si filtry typicky moc nevědí rady).

DLSS 2:0: kompletně nový design s pokročilejším fungováním

Každopádně proti fungování DLSS 1.0 (či 1.x, protože u jednotlivých her se systém vyvíjel a lišil), jak ho popisuje výše odkazovaný článek, přináší DLSS 2.0 rozsáhlé změny. A to jak funkčně z pohledu uživatele, tak pod kapotou. Nvidia uvádí, že neuronová síť, která ho tvoří, je úplně nová proti té, která tvořila DLSS 1.x. To bude mít dopady na výkon, který má být až 2× lepší. Významné je, že u sítě pro DLSS 2.0 díky tomu Nvidia dosáhla menší režii, která byla dřív pro nízká rozlišení dost významná. DLSS 1.x se u nich proto často moc nevyplácelo, neboť běh upscalingu spotřeboval signifikantní část z ušetřeného výkonu, čímž se výsledný zisk stal relativně malým.

V tomto by DLSS 2.0 mělo být flexibilnější a díky menší režii se vyplácet i na nízkých rozlišeních. Podle Nvidie díky tomuto bude možná DLSS 2.0 používat na všech grafikách GeForce RTX ve všech rozlišeních, zatímco první generace technologie měla v tomto omezení.

Nvidia uvedeni DLSS 2 0 prezentace NV 14 13 DLSS 2.0 přináší řadu zlepšení

Už není nutné trénování pro každou hru

Druhá zásadní věc je, že tato síť bude univerzální, nebude trénovaná úzce na konkrétní hru. To bylo problematické kvůli indeterminismu her a dalším problémům, kdy se například chování měnilo dle rozlišení. Nvidia si teď místo předchozího systému vytvořila zvláštní generický model určený jen pro trénování DLSS 2.0, který je deterministický a navržený právě pro trénování tohoto upscaleru (které mimochodem probíhá na snímcích s rozlišením 16K). Stejný model by pak měl být aplikovaný na všechny hry (a chovat se tedy podobně).

Neznamená to ovšem ještě, že by DLSS jako filtr bylo možná použít globálně (například vynutit v ovladačích) na jakoukoliv hru. Implementace DLSS 2.0 pořád bude potřebovat určité zapojení do hry a interakci s jejími buffery, takže pořád bude na vývojářích, zda DLSS 2.0 přidají a pokud to neudělají, máte smůlu. Ale integrace do hry by nyní měla být mnohem snazší, takže by se pro ni snad měli rozhodovat častěji a technologie dostupná v mnohem více hrách.

Nvidia uvedeni DLSS 2 0 prezentace control nvidia dlss 2 0 comparison 001 01 Srovnání původního DLSS a DLSS 2.0 ve hře Control (Zdroj: Nvidia)

Upcaling už využívá temporální stabilizaci

Třetí změna je vůbec nejzávažnější a technologicky nejzajímavější. DLSS 2.0 přidává temporální filtrování. Nvidia v konferenci k DLSS 2.0 potvrdila, že DLSS 1.x fungovalo jako čistě „spatiální“ (spatial, v řeči video technologií se někdy říká „2D“) filtr, který funguje na úrovni jednoho izolovaného snímku/obrázku jako klasický upscaler, a to na úrovni bitmapy, ne na úrovni objektů scény (toto bylo také potvrzeno, čímž se vyvrací některé nerealistické dohady o fungování DLSS z minulosti). Čistě spatiální fungování ovšem mohlo vytvářet temporální artefakty, kdy se objekt mezi snímky nepřirozeně mění a dostanete blikání, chvění či podobné vady (flickering, shimmering).

DLSS 2.0 toto řeší přidáním temporálního filtrování, což slibuje značně lepší kvalitu. Neuronová síť pořád funguje na úrovni snímků (bitmap), ale jako vstup používá několik po sobě následujících snímků, z nichž může vytěžit data pro daný objekt a tím vytvořit temporálně stabilizovaný výsledek. Toto teoreticky může vést k určitému rozmazání (pokud znáte temporální odšumovače, jde o podobný princip), ale současně se akumulováním/zprůměrováním dat z několika snímků dá detail zkvalitnit, protože do výsledného pixelu dostanete ze sousedních snímků (například n-1, n-2) i detail, který třeba v vstupním snímku (n) už byl samplingem při vykreslování částečně potlačen.

Nvidia uvedeni DLSS 2 0 prezentace nvidia dlss 2 0 architecture 21 DLSS 2.0 proti první generaci zapojuje jako zdroj i temporální sousedy aktuálního snímku (Zdroj: Nvidia)

Zde je samozřejmě kritické, aby temporální filtrování zohlednilo pohyb ve scéně (aby byla použitá ztv. motion compensation), což Nvidia dělá. Pro kompenzací pohybu jsou použité pohybové vektory, takže temporální kombinování by mělo používat správné části sousedního obrazu. Tyto pohybové vektory by měly být přímo produkt vykreslování na rozdíl situace při aplikace podobného filtru na video, kde je musí nějaký algoritmus zvlášť vyhledávat. Závislost na vektorech ze hry také bude jeden z důvodů, proč DLSS 2.0 pořád bude potřebovat nějakou asistenci ze stran vývojářů hry.

Toto samozřejmě nemusí vždy fungovat bez chyby, tyto algoritmy se asi pořád někdy mohou splést. Všimněte si, že zde Nvidia trochu změnila strategii. U původního DLSS bylo původně zdůrazňováno, že neprodukuje rozmazání jako vyhlazování TAA (díky spatiálnímu fungování), kde to ale bylo způsobeno právě nedokonalým (nebo někdy možná i žádným?) zohledněním pohybových vektorů. Přidáním temporálního fungování ovšem DLSS 2.0 přináší stejný princip. Ovšem je možné – respektive v to doufáme – že DLSS bude umět pohyb ve scéně podchytit lépe než obvyklé implementace TAA, takže by tyto artefakty neměly být tak časté. Způsob využití temporálních dat by snad mě být sofistikovanější a více rekonstruovat a méně prostě jen zprůměrovávat (a tím rozmazávat).

Nvidia uvedeni DLSS 2 0 prezentace control nvidia dlss 2 0 comparison 002 02 Srovnání původního DLSS a DLSS 2.0 ve hře Control (Zdroj: Nvidia)

Exkurz: Jak to bylo s temporálním DLSS u hry Control?

Zde je třeba udělat malou odbočku ke hře Control, o které jsme loni psali – její implementace DLSS také měla jako novinku temporální stabilizaci, ačkoliv Nvidia nyní specifikovala, že DLSS 1.x je spatiální upscaler a temporální filtrování bude novinka DLSS 2.0. Toto bylo vysvětleno: Control je podle Nvidie výjimka, protože její upscaler přes svoje označení ve skutečnosti nebyl přímo DLSS. Fungoval skutečně temporálně a jde de fakto o předchůdce technologie DLSS 2.0. Ale ve skutečnosti implementace nepoužívala neuronovou síť, šlo o konvenčnější temporální stabilizaci (zřejmě i s pohybovými vektory, bez nich by to bylo hned poznat) implementovanou pouze na shaderech – podle Nvidie DLSS v Control nepoužívalo tensor jádra. Naopak DLSS 2.0 běží na tensor jádrech (což také znamená, že bude potřebovat grafiku GeForce RTX 2000).

Nvidia uvedeni DLSS 2 0 prezentace NV 21 18 Ukázka DLSS 2.0 ve hře Control, vlevo snímek v nativním rozlišení bez DLSS (Zdroj: Nvidia)

Control jinak patchem dostane podporu pro toto nové DLSS 2.0. To by mělo dosahovat při stejném nebo jen mírně nižším výkonu lepší kvality. Nebo případně při nastavení na nižší stupeň stejnou kvalitu s vyšším výkonem. Například některé problematické scény jako například ventilátory s točícími se lopatkami za mříží ve hře původní „DLSS“ nezvládalo a produkovalo chyby, kdežto DLSS 2.0 by v nich mělo být o dost lepší.

Nvidia uvedeni DLSS 2 0 prezentace control nvidia dlss 2 0 comparison 004 04 Srovnání původního tzv. DLSS a DLSS 2.0 ve hře Control, zcela nahoře snímek zcela bez DLSS. Rotoující ventilátor měl s původním DLSS rozbitý obraz (Zdroj: Nvidia)

Konfigurovatelná kvalita obrazu/výkon

DLSS 2.0 bude také konfigurovatelné, jak právě padlo ve ohledně hry DLSS, půjde ale o univerzální vlastnost. Filtr bude mít nastavení Quality, Balanced a Performance, u kterých bude různá úroveň kompromisu mezi vyšší snímkovou frekvencí a obrazovou kvalitou. Hráč si tedy bude moci zvolit podle svých preferencí. Nastavení Balanced by zřejmě mělo dělat upscaling s faktorem 2×, Performance s faktorem rovnou 4×. Na screenshotech, které vidíte v galerii, Nvidia používá nejvyšší kvalitu (u té použitý poměr upscalingu neznáme).

Tyto faktory by asi ale měly zhruba platit pro počet pixelů, ne pro zvětšení v jedné ose (tj. 4× by snad mělo znamenat například 1920 × 1080 bodů škálovaných na 3840 × 2160 bodů a 2× by bylo 1920 × 1080 škálované na 2560 × 1440). Vysoký škálovací faktor má být použitelný právě díky pozitivnímu vlivu temporálního filtrování, ale počítám, že projevy 4× upscalingu třeba z 940 × 540 na 1920 × 1080 bodů by už mohly být poměrně dost viditelné.

První hry s DLSS 2.0 už jsou venku

Poprvé by mělo DLSS 2.0 být dostupné v Game Ready ovladačích grafik GeForce s číslem verze 445.75. Podpora bude ve zmíněné hře Control, kde ji vývojáři přidají do patche, který by se měl objevit během pár dní 26. března. Další hrou s oznámenou podporou je MechWarrior 5: Mercenaries, ke by patch měl již snad být dostupný v tento den. A DLSS 2.0 mělo být k mání už teď i ve Wolfenstein: Youngblood a v Deliver Us The Moon, v těchto by mělo být DLSS 2.0 také ihned. Podle Nvidie by postupně mělo následovat poměrně velké množství her, funkce bude podporována v Unreal Engine 4, což by mělo usnadnit začlenení do různých na něm založených titulů.

Nvidia uvedeni DLSS 2 0 prezentace NV 23 20 První hry podporující DLSS 2.0 (Zdroj: Nvidia)

Volba mezi nativním rozlišením a DLSS asi zůstane kontroverzní

DLSS 2.0 by tedy měla být zajímavým pokrokem vpřed, i když asi zůstane i kontroverzní. Podle Nvidie by měla opět produkovat lepší kvalitu, než jakou by měl obraz nativně na rozlišení, z kterého se upscaluje, ale v některých případech i lepší, než obraz nativně vykreslený na cílovém rozlišení. Toto ale bude asi stále problematické a asi nebude možné jednoznačně uzavřít, zda je obraz opravdu lepší.

Na jednu stranu by mohl skutečně být bez diskuse lepší v tom případě, kdy by například nativní 4K obraz měl kvůli způsobu vykreslení temporální shimmering, a DLSS 2.0 ze 1440p by ho díky temporálnímu zprůměrování dokázalo vyhladit. Ovšem současně bude pořád platit to, že DLSS coby upscaling pořád produkuje svoje artefakty a textury pravděpodobně pořád nebudou moci výt tak přirozené a věrné originálu jako při nativním rozlišení – to bychom jednoduše očekávali nemožné. Ve smyslu „Hi-Fi“ věrnosti by DLSS v tomho ohledu nikdy lepší být nemělo, pokud nativní obraz zrovna příhodně nevykazuje nějaký opravitelný temporální artefakt.

Nvidia uvedeni DLSS 2 0 prezentace deliver us the moon fortuna nvidia dlss comparison 003 v2 07 Ukázka DLSS 2.0 ve hře Deliver Us The Moon, nahoře snímek v nativním rozlišení bez DLSS. Zde by možná vymazaný/chybějící text na obrazovce měl být způsobený rozmazáním vlivem antialiasingu TAA, zatímco temporální filtr v DLSS 2.0 se mu zdá se dokázal vyhnout (Zdroj: Nvidia)

A je zde také obecné dileman, zda je skutečně lepší, když DLSS 2.0 například ve svém obraze vyprodukuje ostřejší (tedy uměle přiostřené) hrany/obrysy, než jaké bude mít nativní obraz. Na jedné straně to oku mnoha hráčů může vyhovovat, na druhé straně to může být považováno za odchylku od ideálního obrazu. A je pak zase otázka, zda výchozí nastavení hry produkuje ideální obraz, nebo je z nějakého důvodu jeho kvalita zhoršená a je tedy co opravovat... Toto zejména asi bude aspekt, u kterého se množství lidí nikdy na přínosnosti  DLSS (2.0) neshodne, protože budou mít odlišné výchozí postoje k této otázce.

Zdroje: Nvidia (1, 2, 3, 4)

Galerie: AI upscaling DLSS 2.0: srovnání kvality a výkonu dle Nvidie

Videa Nvidie ukazující DLSS 2.0 ve hrách:

WT100