Technika Variable Rate nebo Adaptive Shading se vynořila jako jedno z architektonických zlepšení – nebo přesněji nových funkcí – architektury Nvidia Turing. Tato funkce umožňuje snížit kvalitu shaderů v části obrazu a počítat je například jen pro každý druhý nebo čtvrtý pixel. Hry by díky tomu mohly získat výkon navíc. To se vždy hodí a tento zlepšovák by se teď měl prosadit šířeji. Vyklube se z ní totiž standardní funkce DirectX 12, kterou by eventuálně měla podporovat také další GPU kromě Turingů od Nvidie.
Variable Rate Shading v DirectX 12
Tento týden u příležitosti GDC 2019 představil Microsoft Variable Rate Shading jako novou funkci grafického API DirectX 12. Kdy přesně se do něj tento update dostane, není jasné, ale nemělo by to asi trvat příliš dlouho. Na palubě jsou ale pro tuto změnu i velcí vývojáři her, například Activision, Ubisfot, Epic Games, Massive Entertainment, Io Interactive, zmíněn je i engine Unity.
Variable Rate Shading v rámci DirectX 12 bude umožňovat použití této výkon šetřící techniky několika různými způsoby. Vždy půjde o selektivní snížení „rozlišení“ shaderů (například výpočet efektu pro blok 2×2 pixelů místo jediného pixelu). Toto snížení kvality bude možné definovat 1) pro určitý konkrétní draw call; 2) v rámci jednoho draw callu pro jeho části podle masky („screenspace image“); 3) v rámci draw callu pro některé jeho primitivy. První případ, kde v jednom draw callu může být použita jenom jedna stejná úroveň kvality, se označuje jako Variable Rate Shading Tier 1. Oproti tomu druhé dvě granulárnější možnosti se označují jako Tier 2.
Snížení kvality tam, kde se to snese
Podpora na úrovni Tier 1 se dá využít například pro vykreslení objektů ve velké dálce nebo na pozadí, objektů zakrytých poloprůhledným objektem (takže nebude vidět nižší úroveň detailů). V separátním draw callu se pak může popředí vykreslit s plnou kvalitou.
Pokud hardware podporuje Tier 2, pak je možné pokročilejší využití. Program například může vygenerovat masku hran a aplikovat plnou kvalitu podle ní, přičemž v plochých oblastech se kvalita může snížit. Také foveated rendering by mohl pracovat pomocí takovéto masky. Tato maska se označuje „screenscape image“ a něco podobného dělá Nvidia s Turingem, kde je obraz rozdělen na bloky a ona variabilní kvalita se mění podle klasifikace těchto bloků.
Variabilita třetího typu, kdy se kvalita mění pro jednotlivé primitivy (trojúhelníky modelu), se pak dá využít třeba pro snížení kvality u vzdálenějších objektů scény (Microsoft uvádí jako příklad využití Motion Blur efektu, kdy takové objekty stejně budou rozmázlé). Vývojáři nicméně nebudou omezeni striktně na výběr jedné z těchto technik, bude je možné i navzájem kombinovat. Jejich použitím by se dalo získat až kolem 15–20 % výkonu navíc, přičemž při správné aplikaci by neměla viditelně utrpět kvalita. Určité demo toho efektu už lze najít například ve hře Wolfenstein II: The New Colossus, byť tam to ještě není ve standardizované formě.
Které grafiky to budou umět?
Variable Rate Shading by měly nyní umět grafiky Turing, kde by podpora měla být na úrovni Tier 2. Nebudou ale dlouho samotné. Microsoft prozradil, že Tier 2 budou umět také GPU architektury Gen11, která by měl Intel uvést na trh letos integrované v 10nm procesorech Ice Lake, Lakefield a Elkhart Lake.
U grafik AMD Radeon není zatím podpora známa. Nevím, zda by nebylo možné zpětně podporovat Tier 1 (není to potvrzené a blog Microsoftu nic takového nezmiňuje, i když se tento názor zdá se tu a tam objevil). Podpora se ale zřejmě objeví v některé z budoucích architektur, dost možná už rovnou s Tier 2. AMD totiž tuto techniku popisuje v některých svých patentových přihláškách. A také obecně platí, že součásti DirectX typicky výrobci GPU vždy implementují, dříve nebo později. Nebylo by tedy nějak šokující, pokud by se Variable Rate Shading objevil v GPU Navi, čímž by se podpora této funkce dostala do nových generací všech tří hlavních výrobců.