Intel uvádí Retro Scaling na GPU pro staré hry. Update: už i v ovladačích pro Linux

9. 9. 2019

Sdílet

Aktualizováno 9. 9. 2019:

Článek jsme aktualizovali, funkce retro škálování pro historické hry se totiž nakonec dostává i do ovladačů pro Linux. Nové informace najdete na konci, následuje původní text z 2. 9. 2019:

Intel také uvádí Retro Scaling pro staré hry. Má integer i nearest neighbor škálování

Minulý měsíc vydávala Nvidia tzv. Gamescom ovladač pro grafické karty GeForce s několika většími novinkami (podrobně jsme o tom psali zde). Jednou z nich byl tzv. integer scaling, tedy škálování prostým zvětšením pixelů třeba na blok 2×2 nebo 3×3 bodů, aby se zachovala „kostičkovatost“. Tuto novinku oznámil už před Nvidií (dokonce ještě na jaře) pro své grafiky Intel, ovšem byl předběhnut s vydáním její implementace. Ovšem ne o moc dlouho, nyní totiž tuto možnost oficiálně uvádí i Intel, zřejmě i s o něco většími možnostmi.

Integer scaling na integrovaných grafikách Intelu je možné používat s novým ovladačem verze 25.20.100.7155, který můžete stahovat zde. Jak už jsme rozebírali minule, tato metoda zvětšení obrazu vlastně bez interpolace je přínosná pro zachování vzhledu starých her a pixelové grafiky s nízkým rozlišením, které by jinak byly rozmazané nebo trpěly artefakty.

Pokud ale chcete z nějakého důvodu třeba na 4K obrazovce zobrazit FullHD obraz přesně tak, jak by vypadla na panelu s rozlišením 1920 × 1080 bodů a bez vyhlazení/škálování, lze tuto volbu použít i pro tento účel. Možná by se to mohlo hodit i třeba tehdy, pokud má nějaká aplikace rozbité škálování uživatelského rozhraní s DPI a potřebujete ji provozovat, jako byste 4K monitor neměli.

Albion scaling demo Ilustrační ukázka efektu integer scalingu na složitější grafice (Albion). Vlevo integer upscaling 3×, vlevo bilineární upscaling. Pozor, snímky jsou pořízené na DOSBoxu, nikoliv pomocí ovladačů Intelu. Bilineární interpolace obraz vyhlazuje, ale také rozmazává, kdežto s integer scalingem zůstává ostrý a jsou lépe vidět detaily pixelové grafiky. Pro plnou velikost rozklikněte, škálování snímku v prohlížeči totiž rozdíly smazává.

Integer Scaling

Tento druh škálování má Intel zřejmě i něco pokročilejší než Nvidia – což může být tím, že na přípravu měl víc času, pokud tedy Nvidia reagovala na jeho oznámení o pracích na této funkci a nedělala na tomto škálování nezávisle už předtím (to nevíme). Ovladače Intelu nabízejí jednak čistě celočíselné škálování, tedy ono zvětšení pixelů na blok 2×2, 3×3, 4×4 a tak dále. Zde jste ale vázaní na určité výsledné rozlišení, které nemusí sedět na vaší obrazovku. Například z 640 × 480 se dostanete 1280 × 960 bodů, ale okolo vám na displeji s rozlišením 1920 × 1080 bodů zbudou černé pruhy. Nelze také překročit rozlišení obrazovky, tedy zvětšit na Full HD monitoru touto metodou obraz z 800 × 600 na 1600 × 1200.

Intel Integer Scaling 1024x768 IS Ukázka Integer Scalingu z rozlišení 1024x768 na 4K. Celočíselné škálování nemůže vyplnit obrazovku, protože pracuje jen v poměrech 2×, 3× a tak dále

Nearest Neigbor

Intel proto přidal také možnost použít zvětšení typu „nearest neighbor“, které má stejný efekt (celočíselné škálování je vlastně jeho speciálním případem), ale má volně měnitelné výstupní rozlišení. Také tento režim zachovává „kostičkovost“ vstupu a tím ostrost grafiky ve starých hrách. Funguje tak, že ve výstupním zvětšeném obrazu je každý bod vytvořen místo obvyklé lineární nebo kubické interpolace ze vzorků (bodů) originálu blízkých dané pozici výstupního bodu prostě zkopírováním toho vzorku originálu, který vychází této pozici nejblíž. Výsledkem je hrubý kostičkovaný obraz, který ale není přesným zvětšením jako při integer škálování, protože některé originální body se stanou většími, některé zase menšími, podle toho, jak ono kritérium blízkosti zrovna vyšlo. Například diagonální čára tedy může vypadat nepravidelně zubatá.

Algoritmus Nearest Neighbor („NN“ oproti „IS“ pro integer scaling) tedy dovolí škálovat obraz tak, aby bylo využito plné rozlišení monitoru, nebo aby alespoň černé pruhy byly jenom po stranách a ne nahoře a dole, když je hra například v poměru 4:3, ale máte širokoúhlý monitor.

Intel Nearest Neighbor Scaling 1024x768 NN Škálování Nearest Neighbor z 1024x768 dovoluje jakýkoliv faktora tak může vyplnit celou obrazovku (nebo zde aspoň vertikální rozměr, pro zachování poměru stran)

Použití této metody škáluje celý obraz operačního systému, takže z technických důvodů je jako nejnižší rozlišení, které ovladač Intelu nabízí pro vstup, zvoleno 640 × 480, protože s ničím nižším Windows nepočítají. Ovšem přes tvorbu custom rozlišení lze nastavit i pouze 320 × 200. Pro správné použití tohoto škálování je každopádně nutné hrát v režimu celé obrazovky, ne v okně. Kromě toho je zde také to omezení, že při použití těchto škálování podle Intelu není podporováno dotekové ovládání.

Novinka je pouze pro procesory Ice Lake

A stejně jako u Nvidie je také tato možnost svázána jen s nejnovější technologií GPU. Obě metody škálování fungují jenom na nových notebookových procesorech Ice Lake s 10nm výrobním procesem a architekturou Gen11. Na desktopových integrovaných GPU nebo se 14nm procesory Comet Lake a dalšími to tedy používat nelze.

Prezentace architektury procesoru Intel Ice Lake neboli Sunny Cove 01 Prezentace architektury procesoru Intel Ice Lake neboli Sunny Cove

V ovládacím panelu jako Retro Scaling

Toto škálování se dá aktivovat přepínačem v novém ovládacím centru GPU Intel. Možnost je v globálních nastaveních jako „Retro Scaling“. Přímo na tomto místě nejí možné vybrat mezi integer scalingem a metodou neareast neighbor, takže někde jinde by zřejmě mělo být možná nastavit, zda si přejete exaktnější režim s celočíselnými faktory škálování, nebo raději co největší rozlišení/velikost obrazu.

U volby je ještě podmožnost nastavit „Fixed Width“ nebo „Scaled Width“. První možnost by měla znamenat, že při nearest neighbor algoritmu se šířka (na 16:9 monitoru) ponechá tak, aby odpovídala poměru stran vstupu (typicky 4:3) a po stranách budou černé pruhy, zatímco vertikálně se vyplní celá obrazovka. Scaled Width zřejmě obraz roztáhne, aby byla vyplněna celá šířka. To ovšem obraz deformuje, slečny ve hrách budou širší, z kruhů ovály, a tak podobně.

Ovladaci panel Intel retro scaling Nastavení Retro Scaling v ovládacím centru GPU Intel

Alternativa je softwarové škálování přes emulátory

Kvůli uvedeným komplikacím asi také může být výhodnější spolehnout se pro škálování podobného obsahu a her na emulátory a nepoužívat škálování celého OS a pracovní plochy. Pokud je škálování aplikované jen na aplikaci emulátoru jako je DOSBox nebo třeba WinUAE, je to asi pružnější a můžete hrát i v okně. A zároveň emulátory umí řešit také třeba problém korekce poměru stran. Například zmíněné rozlišení 320 × 200 má totiž být zobrazeno s poměrem stran 4:3, ale samotný obraz má poměr 3:2, body tedy na CRT monitorech nebyly čtvercové, ale obdélníkové (jako u DVD a SD televizního videa). Změna poměru stran by měla být možná při použití nearest neighbor škálování. Ale nevím, jestli s tím Intel počítá, protože to vypadá, že algoritmus je nastaven tak, aby zachoval poměr stran vstupu, nebo naopak vyplnil celou šířku, což zase poměr stran porušuje.

Na druhou stranu, pokud hrajete hru, kterou spouštíte přímo z Windows a ne přes nějaký emulátor, pak budete potřebovat toto škálování přes grafickou kartu a tudíž je to užitečná novinka.

ICTS24

Aktualizováno 9. 9. 2019: Retro Scaling bude i pro Linux

Tato novinka se původně týkala jen ovladačů pro platformu Windows. Ovšem web Phoronix teď informuje, že Intel toto retro škálování přinese i na platformě Linux, kde ho bude možné využít s otevřenými ovladači i915 pro integrovaná GPU Intel. Stejně jako na Windows jsou podporovaná jen GPU s architekturou Gen11 (Ice Lake). To, že jde o hardwarovou implementaci tohoto škálování, potvrzuje malá velikost patche, který podporu přidává, má jen 130 řádků.

Podle Phoronixu se tento kód už pravděpodobně nestihne dostat do vydání Linuxu 5.4, zřejmě bude směřovat do jádra 5.5, jehož vydání je naplánováno někdy na začátek roku 2020.

Galerie: Grafická architektura Intel Gen11 (Ice Lake, Lakefield, Elkhart Lake)