DLSS dostává temporální fungování
Nvidia uvádí, že do Control se dostaly některé funkce, které Nvidia měla zatím jenom v experimentálním stádiu. V blogpostu k těmto změnám (kde mimochodem také DLSS přirovnává k tzv. Super Resolution algoritmům pro upscaling videa) není příliš mnoho technických podrobností, ale zdá se, že Nvidia do DLSS přidává temporální stabilizaci, zatímco v předchozích titulech je DLSS zřejmě „spatiální“ filtr (tedy fungující vždy izolovaně na jednom snímku).
Temporální fungování je odpověď na určité problémy, které má upscaling prováděný jen v na úrovni jednoho snímku tehdy, pokud se obraz hýbá. Upscaling obecně má riziko určité nestability výstupu, čímž se míní, že relativně drobné odlišnosti ve vstupu mohou způsobit zesílenou variabilitu v upscalovaném obrazu. Například pohybující se objekt může kvůli této nestabilitě v po sobě následujících snímcích vést k různě vypadající interpolaci, byť v originále se nijak zvlášť nemění.
Je to proto, že upscaling vždy pracuje jen s jedním snímkem izolovaně a jednotlivé instance si nemohou obrazně řečeno „srovnat výsledky“ pro jednotlivé snímky. Výsledkem mohou být efekty, kdy se objekt trošku mění, pulzuje nebo vytváří podobné nepříjemné jevy, které se dostavují například u objektů pomalu plynule se pohybujících po obrazovce. Nejsilnější je tento efekt u ostře vykreslených předmětů, nebo geometrických obrazců, ale způsobuje ho i šum v obraze. Anglicky se někdy mluví o shimmeringu nebo flickeringu.
Ovšem se zapojením temporálního rozměru, tedy přihlédnutím k sousedním snímkům, se tomuto efektu dá předejít (obrazně řečeno si nyní instance DLSS zpracovávající jednotlivé snímky mohou výsledek porovnat a sladit). Jak to přesně funguje není sděleno, ale pravděpodobně zde dochází k určitému vyhlazení objektů pomocí temporálního filtrování/stabilizování jejich detailů. Toto zprůměrování se při filtrování videa často používá k potlačení šumu, ale zde by paradoxně mohlo obnovovat detaily, které spatiální DLSS rozmazávalo. A to díky tomu, že temporální algoritmus je může najít v po sobě následujících snímcích, a tím je zachovat coby detail, zatímco spatiální algoritmus je může považovat za šum a odstranit je.
DLSS v Control
Nvidia tento původně experimentální algoritmus (respektive soustavu algoritmů a neuronových sítí) upravila a zjednodušila, aby mu k běhu stačilo menší množství výkonu, dostupné při hraní hry na GPU Turing, což umožnilo ho použít v upscalingu DLSS. A Control je asi zatím první hra, která tuto novou verzi má.
Nvidia efekt tohoto temporálního stabilizování ve hře Control ukazuje na následujícím videu při upscalování hry vykreslované v rozlišení 1280 × 720 na rozlišení 1920 × 1080 bodů. Proti běžnému škálování snímků v enginu (kdy by měl asi být použitý nějaký standardní algoritmus) vlevo je na videu vpravo upscaling pomocí DLSS s temporální stabilizací. Rozdíl je vidět třeba na pohybujícím se culíku nebo na liniích dlažby (to jsou ty geometrické obrazce).
Rozdíl je sice ukázán proti normálnímu upscalingu v enginu hry, ale onu temporální nestabilitu by asi vykazovalo i spatiální DLSS. Typicky totiž právě sofistikované a relativně agresivní algoritmy, které neprovádějí jenom běžné škálování, ale také interpolují a ostří jako DLSS, vytváří větší rozdíly na výstupu proti vstupu, takže také mohou vést k větším nesouhlasu (temporální nestabilitě) mezi jednotlivými snímky. Nová verze s temporálním fungováním ovšem proti tomuto bude odolná.
Pro kvalitu by toto mělo být docela plus, i když tensor jádra a případně shadery, pokud jsou použité, možná budou mít víc práce (temporální filtrování by mělo používat pohybové vektory, není to tedy plně jednoduchá věc). Je zde také asi možnost, že se s takovýmito filtry trošku zvýší latence hry, protože bude potřebovat pro fungování buffer snímků. Při temporálním zpracování videa se typicky používá jeden následující a jeden předcházející sousední snímek, což by vedlo k lagu navíc. Nvidia by teoreticky místo toho mohla používat třeba dva snímky z minulosti, což by se tomuto vyhnulo, ale asi zase bylo méně spolehlivé.
Galerie: starší forma DLSS ve hře Anthem, 4K snímky
Pro další zlepšení je pořád prostor
Nvidia uvádí, že toto temporální vyhlazování či stabilizování není úplně všemocné a v některých situacích může selhávat. Zatímco by mělo dobře sedět situaci, kdy se po scéně pohybují nějaké objekty, při jejich transformování to už tak dobře fungovat nebude – například plameny nebo jiskry kompenzace pohybu a temporální filtrování moc dobře nepodchytí, což lze vidět na hodně změněném vzhledu na následujícím videu od Nvidie (tipuji, že další podobné případy by mohla být blikající světla nebo záblesky a měnící se barvou světla).
https://www.nvidia.com/content/dam/en-zz/Solutions/geforce/news/dlss-control-and-beyond/control-fire-1080p-vs-nvidia-dlss-2019-08-28.mp4
Nicméně toto by se možná dalo dál vylepšit nějakou adaptivností, kdy by se temporální vyhlazování v určitých případech nepoužilo a části obrazu tohoto typu byly zpracovány čistě spatiálně. Tento problém není nic nového, objevuje se třeba i při temporálním filtrování video. Nvidia každopádně uvádí, že na kvalitě upscalingu (Super Resolution) pomocí neuronových sítí bude dál pracovat, a to asi nejen pro DLSS, ale i pro další aplikace.
Referenční experimentální model, na kterém je temporální DLSS založeno, má mnohem vyšší kvalitu, ale asi při tom vyžaduje vyrazně vyšší hardwarové prostředky a nefungoval by v reálném čase. Ovšem se zvyšujícím se výkonem by se mu postupně příští generace mohlo trochu přibližovat. Pro ilustraci Nvidia vytvořila další video (jde o demo Unreal Enginu 4), kde máte vlevo temporální upscaling pomocí zjednodušené verze z Control („Image Processing Algorithm“) a vpravo pomocí onoho experimentálního modelu („AI Research Model“), který má mnohem lepší podání poletujících jisker, kdežto DLSS je bohužel dost vyhlazuje. Máme to sice filtrováno skrz kompresi Youtube, která také podobný detail má tendenci decimovat, ale rozdíl je docela velký.