S RTX 4000 přichází Nvidia DLSS 3. Nová generace AI upscalingu generuje snímky, obchází limit CPU

22. 9. 2022

Sdílet

 Autor: Nvidia
Nová generace grafik Nvidia přináší také novou generaci AI upscalingu DLSS 3. Ten teď umí doslova znásobit snímkové frekvence. Generuje totiž nové snímky sám od sebe bez ohledu na hru. Je to vlastně obdoba interpolace snímků v televizích. Když Nvidia slibuje až 4× vyšší výkon, je to právě s tímto trikem.

V úterý představila Nvidia dlouho vyhlížené nové grafiky GeForce s architekturou Ada Lovelace a 4nm výrobním procesem. Slibuje u nich nárůsty výkonu ve výši až „2–4ד. Jde samozřejmě jen o oficiální benchmarky, takže je asi na místě opatrnost. Zdá se, že ty největší nárůsty jsou totiž dílem upscalingu DLSS. Nvidia totiž speciálně pro GeForce RTX 4000 uvádí jeho novou generaci DLSS 3. Ta je schopná masivního zvýšení FPS, ale má to háčky.

DLSS 3 je nové rozšíření DLSS 2.x, herního upscalingu založeného na AI interpolaci a temporální rekonstrukci (mimochodem, proti použití slova upscaling se objevovaly protesty, ale stojí za pozornost, že Nvidia nyní také o DLSS mluví jako o „DLSS Super Resolution“). Jde o rozšíření dost zásadní, které do DLSS 2.x přidává další způsob či rovinu interpolace.

Princip DLSS 2.x jsme probírali zde, v krátkosti jde o kombinaci spatiálního upscalingu, který provádí neuronová síť (toto je odlišnost proti jinak obdobnému FSR 2.x od AMD, které má konvenční škálovací algoritmus) a temporální rekonstrukce, která pomocí kompenzace pohybu na základě pohybových vektorů získaných z enginu hry dokáže temporálně „dát dohromady“ detail z několika po sobě jdoucích snímků. Jak ukazuje nejen DLSS 2.x, ale i FSR 2.x, toto temporální „zrekonstruování“ či zlepšení detailů má velmi dobrý efekt a dokáže kvalitu posunout výrazně výš, než co je možné obyčejným spatiálním škálováním (FSR 1.0DLSS 1.0).

how nvidia dlss 2 works Princip fungování DLSS 2.0 (zdroj: Nvidia)

Novinka DLSS 3: Frame Generation

DLSS 3 dělá další krok jiným směrem mimo samotný upscaling – zatímco ten zvyšuje rozlišení jednotlivých snímků, DLSS 3 přidává pohybovou interpolaci a zvýšení snímkové frekvence skrze generování nových, kompletně interpolovaných snímků. Pro vyjasnění – smyslem i všech předchozích metod upscalingu ve hrách je zvýšení snímkové frekvence, ale ty toho dosahovaly tím, že vykreslováním na nižším rozlišení snižují výrazně zátěž GPU. GPU proto snímky kompletuje v kratším čase, a dokáže jich proto za sekundu vykreslit více – výsledkem jsou vyšší FPS.

Generování snímků, které dělá DLSS 3, je něco jiného. Tento filtr vezme vykreslené snímky a vedle nich sám vygeneruje („domyslí si“) další snímky, které přidá k těm původním, takže máte vyšší snímkovou frekvenci. Je v tom dost zásadní rozdíl. U běžného upscalingu je každý snímek produktem enginu hry, který pro něj vypočítal, jak mají vypadat všechny efekty (včetně třeba osvětlení, různých záblesků a podobných komplikovanějších změn mezi snímky), ale také jak se mají které objekty hýbat (letící střely), a je v něm zohledněna informace o tom, co hráči dělají.

DLSS 3 vyrábí snímky navíc nezávisle na enginu hry, jde o post-processing. Podle popisu Nvidie je základem proud snímků ze hry, které jsou upscalovány pomocí DLSS 2.x, tedy s temporální rekonstrukcí. Poté přichází na řadu nová vrstva přidaná v DLSS 3, nazvaná Frame Generation nebo také Optical Multi Frame Generation. Používá techniku optical flow a generuje nový snímek tak, že porovná dva po sobě jdoucí snímky (přesněji, těch z minulosti lze využít víc, ale budoucí bude asi jen jeden) a odhadne, jak by měl vypadat mezisnímek mezi nimi na základě toho, co ví o pohybu objektů.

nvidia dlss 3 motion optical flow estimation DLSS 3 při generování snímků kombinuje vektory komunikované hrou s vektory nalezenými technikou Optical Flow pro lepší kvalitu (zdroj: Nvidia)

Jsou opět využity pohybové vektory ze hry, ale algoritmus Optical Flow zřejmě také samostatně analyzuje snímky a hledá pohybové vektory sám empiricky (je to proto, že to může předejít některým chybám v obraze, když pohybové vektory získané z enginu hry nejsou zcela správné).

Vygenerovaný mezisnímek aproximuje, kde by měly pohybující se objekty být a jak by měly vypadat v mezičase mezi stavem zachyceným oběma reálnými snímky. Je jasné, že u složitějšího, nepravidelného pohybu nebo třeba těch světelných efektů nemusí takový odhad být spolehlivý. Odhadování obsahu snímku místo reálného výpočtu a vykreslování logicky musí mít svoje negativa, chybějící informace je chybějící informace.

how nvidia dlss 3 works Princip fungování DLSS 3 (zdroj: Nvidia)

Tímto způsobem může DLSS 3 tedy přímo zdvojnásobit snímkovou frekvenci, ale teoreticky i třeba ztrojnásobit a zečtyřnásobit, protože tomuto filtru můžete dát za úkol aproximovat více mezifází mezi reálně vykreslenými snímky. Ovšem je tu jeden háček. Tyto snímky vznikají čistě na úrovni filtru DLSS 3, není v nich zohledněno samotné dění ve hře. DLSS 3 pracuje jen s obrazovými daty a pohybovou informací jednotlivých snímků, které má jako vstup. Engine hry a vstupy či akce hráčů nemohou přímo ovlivnit obsah interpolovaných snímků, pro ně tato informace prostě není. Vzniká tím nepřesnost. Pokud například hráč vystřelí v nejnovějším reálně vykresleném snímku a ve snímku před tím ještě žádná stopa po výstřelu jeho zbraně vidět není, DLSS 3 při generování snímku vloženého mezi ně může udělat to, že v generovaném mezisnímku bude již výstřel napůl vidět, protože došlo ke zprůměrování.

nvidia dlss 3 reconstructs pixels DLSS 3 přidává ke generování nových pixelů při upscalingu ještě generovaní (domýšlení) úplně nových snímků interpolací ze sousedních. V tomto případu GPU reálně vykreslilo jen osminu pixelů proti finálnímu aproximovanému výsledku (zdroj: Nvidia)

Frame Generation v podstatě znáte z televizorů

Pokud vám toto celé něco připomíná: je to prakticky přesný ekvivalent techniky „Motion Interpolation“, kterou používají běžně televize pro zvýšení snímkové frekvence videa za účelem vyšší plynulosti pohybu (ale také často za cenu zhoršené kvality detailů). DLSS 3 by podle všeho mělo být to samé. I když je rozdíl v tom, odkud se bere informace o pohybových vektorech, které jsou pro generování snímků použité. Televize si je musí najít čistě analýzou videa (tedy technikou Optical Flow), DLSS 3 používá Optical Flow a zároveň je získává z enginu hry.

Obecně tyto vygenerované mezisnímky mají výhodu toho, že učiní pohyb ve hře plynulejší, což bude mít význam, zejména pokud začínáte s hodně nízkou snímkovou frekvencí. Protože ale jsou nezávislé na samotném běhu hry, nejsou plnohodnotné z hlediska interaktivity a toho, aby hráč byl plně sladěný s děním ve hře. Proto se dá čekat, že tato metoda zvýšení snímkové frekvence nebude moc vhodná do rychlých soutěžních her a esports. V těch vám nejde o to, aby pohyb byl hezky plynulý (ale ne nutně správně odpovídající realitě kvůli tomu, že je odhadnutý…), ale abyste viděli akce soupeřů co nejdříve a dokázali na vše co nejrychleji reagovat. V tom může DLSS 3 být i rušivé tím, že generované snímky nemají vazbu na dění ve hře.

Nevýhoda vygenerovaných snímků je obecně také v tom, že v nich mohou být artefakty, deformace a vůbec různý nepořádek kvůli nedokonalosti predikce Optical Flow a obecně toho, že někdy mohou chybět data (problém je například měnící se zákryt objektů a pozadí). Pokud byste si reálné a generované snímky porovnávali na screenshotu, mohou asi ty generované vypadat nepřirozeně. V pohybu se to má tendenci ztrácet, protože se vám horší interpolované snímky slijí s kvalitními „legitimními“, ale je to něco, co je dobré si pamatovat. Rozhodně nelze říci, že snímková frekvence zdvojnásobená pomocí tohoto druhu generování snímků je něco kvalitativně stejného s tím, kdybyste měli stejné FPS se všemi snímky reálnými.

Poznámka: když zde probíráme možné problémy a nevýhody DLSS 3, bavíme se na teoretické rovině a o tom, co lze říct od stolu na základě technických principů této technologie. Jak se povede realizace v praxi a do jaké míry se podaří negativa omezit či schovat, nebo do jaké míry naopak budou viditelná, to zatím nelze vědět. DLSS 3 ještě nebylo reálně vyzkoušeno a analyzováno.

Kdy je přínos: limitace CPU a plynulý pohyb

Nvidia demonstrovala DLSS 3 na Microsoft Flight Simulatoru, což je možná dobrá indikace toho, kde DLSS 3 může být přínosné. Tento letecký simulátor je velmi náročný na CPU, a pokud byste ho chtěli hrát na vysoké snímkové frekvenci, máte kvůli limitaci na straně procesoru prostě smůlu. DLSS 3 má tu důležitou vlastnost, že ale „bottleneck“ na CPU obchází. DLSS 2.x vám v této situaci nepomůže, protože GPU nemůže vykreslit víc snímků, ať už má kolik chce volného výkonu, jelikož mu to nestíhající CPU nedovoluje. Ale DLSS 3 jednoduše po CPU nechce žádnou práci navíc a „vymyslí“ si další snímky samo od sebe. Nvidia v úterý ukázala demo, kde DLSS 3 díky tomuto prakticky přesně zdvojnásobilo snímkovou frekvenci Flight Simulatoru – tím, jak se mezi reálné snímky vyprodukované hrou vložily ty externě „domyšlené“.

Je třeba říct, že Flight Simulator je případ, kdy jsou všechny pohyby velmi plynulé a změny spíše pomalé, protože letadlo ve vzduchu nedělá nějaké náhlé cukavé pohyby, nevynořují se kolem něj najednou nečekané objekty (ovšem pokud byste začali nepravidelně hýbat kamerou, tak tu tento případ máte) ani najednou nic kolem nevybuchuje a nelétají střely a laserové paprsky (tedy aspoň doufám, že se nepletu a hra nemá i režim leteckého boje).

Demo Nvidie ovšem také obsahovalo jen velmi klidný let a je možné, že kdybyste letadlo dostali do nějaké divoké vývrtky, už by DLSS 3 mohlo ukazovat větší slabiny v interpolaci. Toto demo každopádně berte spíš jako ideální případ, raději nečekejte, že to bude takto bezproblémové ve všech hrách. Asi ještě více než u DLSS 1.0 a 2.x je třeba počkat na reálné testování a zkušenosti.

nvidia dlss 3 innovation Nvidia DLSS 3 (zdroj: Nvidia)

Nevýhoda: DLSS 3 zvýší latenci hry

DLSS 3 bude mít ještě jednu nevýhodu (vedle toho, že generované snímky jsou „slepé“ vzhledem k dění ve hře), kterou už jste možná vytušili, byť jsme se jí ještě nedotkli. DLSS 3 totiž bude zhoršovat latenci hry, což DLSS 2.x ani DLSS 1.0 nedělá (nebo ne nutně). To je jinak další důvod, proč spíš nečekáme, že bude výrazně užitečné v rychlých akčních hrách a multiplayeru.

Důvodem je to, že nový snímek je generován z minimálně dvou po sobě následujících a je vložen mezi ně. V případě, že vkládáte jeden umělý snímek mezi dva reálné, tedy nastává tato situace: po sobě jde 1. reálný snímek, pak jde „1,5tý“ vygenerovaný snímek, poté je zobrazen 2. reálný snímek. Pokud by byly všechny snímky reálné, lze je na monitoru zobrazit hned po jejich dokončení. Při DLSS 3 ale můžete ale snímek 1.5 zobrazit až v momentě, kdy GPU dokončí reálný snímek 2 (navíc je ještě třeba nějaký čas na dokončení generování). Nový reálný snímek tedy může být zobrazen až se zpožděním, protože v momentě, kdy je připraven, je ještě nutné nejdřív ukázat jeho „vymyšleného“ předchůdce. DLSS 3 tedy potřebuje mít frontu snímků zpracovávaných dopředu a toto zvyšuje latenci. Minimálně o trvání toho jednoho snímku (a čas potřebný na generování).

To znamená, že všechny reakce hry na vaše vstupy či na akce vašich protivníků se vám na monitoru s DLSS 3 zobrazí o trochu později. Při hraní vždy nějakou latenci máte, takže nemusí nutně jít o „showstopper“. Latenci může vytvářet vstupní zařízení a zpracování podnětů ve hře, fyzikální výpočty a vykreslování (míra záleží na tom, zda používáte V-Sync a adaptivní obnovování) a pak na input lagu elektroniky monitoru a ještě i na odezvě pixelů panelu. Toto vše se sčítá a DLSS 3 za některých okolností nemusí přidat tolik milisekund, že by to enormně vadilo. Jenže v poslední době se firmy snaží aspoň pro rychlé soutěžní hry tyto latence zkracovat a eliminovat (u Nvidie technologie Reflex), zatímco DLSS 3 jde opačným směrem.

nvidia reflex dlss 3 system latency pipeline DLSS 3 potřebuje bufferovat snímky ve frontě, takže přidává latenci navíc proti běžnému vykreslování v nativním rozlišení nebo s DLSS 2.x. Na tomto slajdu sice Nvidia ukazuje, jak ho lze používat bez toho, aby hra měla vlastní render queue, ale to je možné i bez DLSS 3. A slajd vám už neříká to, že při použití DLSS 3 je třeba nová fronta snímků tvořících vstup pro interpolaci ne na úrovni hry, ale v GPU a jeho ovladači. A ta vždy latenci zhorší (zdroj: Nvidia)

Nvidia sdělila, že DLSS 3 má integrovanou technologii Reflex za účelem co možná nejnižší latence. Ale role Reflexu může být nanejvýš pokusit se, aby zhoršení latence bylo co možná nejmenší (ne větší, než je nutné). Neznamená to, že se onen negativní efekt nutnosti bufferovat aspoň jeden budoucí snímek pro interpolaci předchozího podařilo obejít (to by nemělo být možné). Z výše ukázaného slajdu se zdá, že když Nvidia mluví o integraci Reflexu, má tím ve skutečnosti na mysli eliminování Render Queue uvnitř samotné hry, ale to je zcela ortogonální věc, která může být aplikována na hru i bez DLSS 3 a Nvidia se tím také chlubila, když Reflex poprvé uvedla dávno před DLSS 3. Výše ukázaný slajd naopak poněkud zamlčuje buffer snímků, který DLSS 3 potřebuje ve fázi, která je na slajdu označená jako GPU a která je pravým důvodem vzniku latence navíc.

Teoreticky by se dala použít jiná metoda generování (reprojection), kde se pohyb v novém snímku odhaduje ze dvou či více pouze minulých snímků, ale ta je více náchylná na chyby a podle popisu Nvidie v DLSS 3 použita není právě ve prospěch interpolace mezi budoucím a minulým (minulými) snímky, která bude častěji bližší realitě (Nvidia hovoří o generování mezisnímků, nikoliv o odhadu příštího snímku).

DLSS 3 bude exkluzivně jen pro GeForce RTX 4000

Zatímco předchozí generace DLSS mají jen ten požadavek, že GPU musí obsahovat Tensor jádra (musí tedy jít o GeForce RTX 2000 nebo RTX 3000), u DLSS 3 je to jinak – tato technologie bude dostupná exkluzivně jen majitelům nové generace grafik s architekturou Ada Lovelace. Mělo by to být proto, že jejich čtvrtá generace Tensor jader má speciální akcelerátor pro techniku Optical Flow (Ada Optical Flow Accelerator), který není ve starších generacích.

Aktualizace: jak jste upozornili v komentářích, toto není přesné. Předchozí generace grafik (už od Turingu / GeForce RTX 2000) také obsahovaly jednotky Optical Flow Accelerator. Jenže jejich schopnosti byly nižší, takže Nvidia pro DLSS 3 vyžaduje novější verzi existující v generaci GPU Ada. Podle tohoto má Optical Flow Accelerator architektury Ada 2,5× vyšší výkon a o 15 % lepší kvalitu výsledku.

Teoreticky je asi možné, aby Nvidia vyvinula alternativní algoritmus běžící více genericky („softwarově“) i na předchozích generacích grafik, ale asi by to bylo s výkonnostním úbytkem (a možná s horší věrností generovaných snímků), takže by přínos byl nižší. Podle Nvidie speciální akcelerátor zrychluje operace používané v algoritmu generujícím snímky dvojnásobně. Prozatím není známo nic o tom, že by se „softwarová“ alternativa chystala, takže počítejte s tím, že DLSS 3 bude jen a pouze pro nové karty GeForce RTX 4000.

Podporu plánuje dost her

Otestovat, jak užitečné generování „vymyšlených“ snímků bude, umožní poměrně dost her, Nvidia uvádí, že jich má být víc než 35 (a další samozřejmě budou či mohou přibýt později). Vedle her jsou to i kreativní aplikace (Nvidia Omniverse), herní enginy (Unreal 4 & 5, Unity) nebo technologická dema (Nvidia Racer RTX). Podpora na straně ovladačů by měla být dostupná hned 12. 10. při vydání GeForce RTX 4090.

Hry a aplikace do nichž přijde podpora DLSS 3 Hry a aplikace, do nichž přijde podpora DLSS 3 (zdroj: Nvidia)

Nvidia použila DLSS 3 ve výkonnostních srovnáních

Je třeba upozornit ještě na jednu věc. Zdá se, že když Nvidia v úterý oznamovala výkon nových grafik, v řadě ukázaných benchmarků bylo DLSS 3 zahrnuté, takže hry získaly dvojnásobné FPS proti tomu, jak by běžely za stejných podmínek, jaké mají grafiky GeForce RTX 3000 (u nichž DLSS 3 použito nebylo). Toto však není reprezentativní srovnání. Ukazuje to potenciál DLSS 3, to ano (otázka je, jak je užitečný v praxi), ale ne samotný výkon GPU. Kvalita není stejná, jako kdyby byly všechny snímky reálné, proto tyto FPS navíc nelze zahrnout do srovnání výkonu.

geforce rtx 40 series gaming performance Takto Nvidia prezentovala nárůst výkonu nové generace grafik GeForce RTX 4000 proti předchozím kartám RTX 3000. Zdá se, že největší nárůsty jsou dané použitím DLSS 3 u grafik RTX 4000, zatímco u RTX 3000 použité není (zdroj: Nvidia)

Když Nvidia uváděla, že grafiky RTX 4000 budou i dvakrát až čtyřikrát rychlejší než předchůdci, ono čtyřikrát je jen díky použití DLSS 3. Tudíž toto spíš ignorujte a řiďte se jen údajem „2ד. I v tom je zřejmě započítáno DLSS, ale ne DLSS 3, takže srovnání s předchozí generací GPU by mělo být poctivé (ale zase nemusí faktor zrychlení s DLSS odpovídat výkonu v nativním rozlišení). Jsou to vše každopádně oficiální benchmarky, do kterých si Nvidia mohla vybrat ty nejlepší výsledky, takže je dost možné, že průměrný nárůst proti předchozí generaci může být níže. Jako obvykle počkejte na nezávislé testy.

geforce rtx 40 series nvidia dlss3 performance chart Nárůst výkonu s DLSS 3 na GeForce RTX 4090 podle Nvidie. Jde o kombinaci vlivu samotného upscalingu a generování nových snímků. Jde samozřejmě o oficiální marketingové benchmarky, takže je berte s obvyklou rezervou (zdroj: Nvidia)

Čím dál více interpolace versus reálné zvyšování detailů?

Je otázka, zda je toto správný směr vývoje her. Již DLSS použité jen k upscalingu snímků jde cestou zvýšení rozlišení, aniž by se zvyšovaly reálné detaily generované grafikou (zachraňuje to však temporální rekonstrukce v DLSS 2.0, která je skutečným zlepšením obrazu – byla by přínosem i bez upscalingu na nativním rozlišení – viz DLAA – byť lze argumentovat, že pak se vlastně jedná o typ TAA). Čím rychlejší režim DLSS (nebo konkurenčních obdob) používáte, tím méně detailů hra generuje a tím více pixelů je uměle ošizených upscalingem.

DLSS 3 to posouvá ještě dále, když aproximuje či supluje celé snímky kompletně místo toho, aby je hra opravdu zpracovala a vykreslila. V praxi to může zafungovat, ale má to negativní efekty, byť občas neznalým okem není snadné je okamžitě zpozorovat, jelikož nevíte, jak by měl snímek vypadat správně. A tudíž netušíte, že místo správného vzhledu scény či objektů koukáte na nedokonalou verzi s artefakty a chybami. Obraz her se tak s tímto trendem může stávat horším a horším, než by měl být, aniž byste si toho všimli.

nvidia dlss3 geforce rtx games Hry a aplikace, do nichž přijde podpora DLSS 3 (zdroj: Nvidia)

Možná se to dá přirovnat ke artefaktům, rozmazání a ztrátě detailů, které vznikají ve ztrátově komprimovaném videu (tedy v každém videu, protože nekomprimované video běžně nikdy nesledujete). Čím nižší bitrate video má, tím více těchto škod v něm je, ať už si to uvědomujete, nebo to vašim očím ušlo. Větší a větší podíl upscalingu a nyní i generování (interpolace, v řeči televizorů) celých snímků je podobná věc, jako by se pořád a pořád snižovala bitrate videa, které sledujete, což přináší zhoršující se kvalitu obrazu.

bitcoin_skoleni

Je to možná přirovnatelné k tomu, jak v digitálním TV vysílání docházelo či dochází k postupnému ukrajování bitrate. Je pak otázka, zda zvyšování rozlišení a snímkové frekvence má smysl, pokud pro video není dost bitů, a je proto rozmazané a zaartefaktované. (Možná by se dalo přirovnat i k digitální fotografii v mobilech, kde se často místo zlepšení optiky a schopnosti zachytit reálnou informaci místo toho fotka vylepšuje podobným digitálním „odhadováním“.) U her tímto upscalovacím a interpolovacím trendem může docházet k podobné věci, kdy se sice s DLSS/FSR/XeSS a generováním navýší rozlišení i snímková frekvence, ale jednotlivé snímky tím budou mít poškozenou vizuální kvalitu…

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