En ständig dragkamp för såväl spelutvecklare som datoranvändare är den mellan bästa möjliga bildkvalitet, via upplösning och grafiska inställningar, och bästa möjliga prestanda. Det finns en myriad av knep och lösningar för att nå en bra balans, med allt från dynamisk upplösningsskalning till kantutjämningstekniker. En leverantörsoberoende teknik som letar sig in i allt från datorer till spelkonsoler är något som kallas Variable Rate Shading (VRS).

Bildkvalitet med användaren i fokus

En grundläggande princip för hur grafik visas är att grafikdelens shader-enheter ansvarar för att beräkna färgen för de pixlar som ska visas upp på en ansluten skärm. En bild som ska färgsättas i upplösningen 1 920 × 1 080 pixlar kräver att grafikkortets shader-enheter beräknar färgen för strax under 2,1 miljoner pixlar. En utvecklare som färgsätter dessa pixlar skapar dock något som kallas shading rate, vilket är kvalitetsinställningar för block av pixlar.

3dmark-vrs-feature-test-screenshot-vrs-off.jpg

3dmark med VRS-funktionen avstängd.

3dmark-vrs-feature-test-screenshot-vrs-on.jpg

3dmark med VRS-funktionen aktiverad.

3dmark-vrs-feature-test-screenshot-vrs-visualizer.jpg

Här renderas scenens blå del med låg kvalitet, grön del med mediumkvalitet och röd del med hög bildkvalitet.

3dmark-vrs-feature-tier2-vrs-on.jpg

Scenen innehåller skuggade partier som inte behöver samma detaljgrad som resten av bilden.

3dmark-vrs-feature-tier2-visualizer.jpg

Här illustrerar mörka färgtoner de delar som renderas med lägre bildkvalitet.

Högre shading rate medför bättre bildkvalitet, men också större påfrestning på hårdvaran och därmed prestanda. Traditionellt sett appliceras denna kvalitetsgrad på samtliga pixlar på skärmen, även på de som liknar varandra eller befinner sig i utkanten av spelarens synfält. Att alla pixlar inte är likvärdiga ligger till grund för Variable Rate Shading (VRS), en teknik för flexibel styrning av bildkvalitet som är en del av Microsofts utvecklargränssnitt DirectX 12.

Med VRS får utvecklare möjlighet att styra balansen mellan bildkvalitet och prestanda genom att exempelvis sänka shading rate för pixlar som befinner sig i skugga eller mörka partier i bildens periferi, men även att höja shading rate för de delar av bilden som är synlig för spelaren. DirectX 12 ger utvecklare tillgång till olika nivåer av VRS, där nivån beror på stödet i hårdvaran.

Olika VRS-nivåer

Med Tier 1 kan utvecklaren definiera kvalitetsnivåer för ett grafikanrop (eng. draw), vilket exempelvis kan handla om bakgrundsbilden i en scen där bakgrundens bildkvalitet inte är lika viktig som förgrunden. Tier 1 stöds av samtliga moderna grafikkort. Med Tier 2 kan utvecklaren istället definiera olika kvalitetsnivåer per grafikanrop, vilket i samma exempel gör det möjligt att höja kvalitetsnivån i de delar av bakgrunden som är viktigare än andra. Tier 2 kräver specifikt stöd i hårdvaran.

Den hårdvara som stöder Tier 2-nivån kan utnyttja två olika varianter av tekniken – screenspace image och Per-primitive. I korthet går screenspace image ut på att utvecklaren anger en referensbild som används för att bestämma vilka delar av en scen som är viktiga och mindre viktiga. I ett FPS-spel kan tekniken användas för att höja kvalitetsnivån runt muspekaren, och sänka nivån i periferin.

Tekniken Per-primitive syftar på att utvecklaren kan kontrollera bildkvaliteten på finmaskig nivå, närmare bestämt per triangel som ska ritas upp. Det kan exempelvis användas för att styra kvalitetsnivån efter djupet i bilden. I en scen som använder skärpedjup (eng. depth-of-field) kan Per-primitive användas för att sänka shader rate för en viss del av de trianglar som befinner sig "längre bak" i bilden.

Uppläggen för shader rate-strukturer

Det finns ett flertal olika strukturer för shader rate-nivåer utvecklare kan välja att implementera. Den grundläggande är 1×1-nivån och här renderas de olika pixlarna oförändrat, vilket ger bäst bildkvalitet men också högst belastning på hårdvaran. Med 2×2 består blocket av två pixlar vertikalt och horisontellt, vilket belastar hårdvaran mindre samtidigt som det inte avviker allt för mycket sett till bildkvalitet.

Nvidia_2x1_2x2.jpg

Enligt samma upplägg innebär 4×4 att shaderprocessorer beräknar pixelblock som är fyra pixlar stora på höjden och bredden. Det ger ytterligare prestandavinster, med ytterligare försämring i bildkvalitet. Utvecklare kan också välja en kombination av dessa upplägg, där 2×1 eller 4×2 och vice versa slår an en balans mellan egenskaperna hos de olika nivåer de kombinerar. De olika kvalitetsnivåerna kan också blandas i olika delar av bilden.

Nvidia_VRS_grids_car_002.jpg

Nvidia illustrerar hur olika kombinationer av kvalitetsnivåer kan användas med VRS.

Tillämpningar i spel

Tidiga spel med stöd för VRS inkluderar bland annat Civilization VI och Wolfenstein II: The New Colossus. Microsoft demonstrerar vinsterna med VRS-stöd i form av just Civilization VI, där utvecklarna Firaxis experimenterat med både Tier 1- och Tier 2-nivåerna. Utvecklaren började med Tier 1, där stora grafiska objekt som hav renderades med lägre kvalitetsnivå (2×2) och små objekt som fordon, byggnader och gränssnittet renderades med normal kvalitetsnivå (1×1).

MS_DX12_VRS_Tier1.jpg

Tier 1-nivån av VRS används i Civilization VI, VRS är aktiverat för den vänstra halvan av bilden.

Med VRS Tier 1 anger Firaxis att 20 procent högre bilduppdatering uppnås utan tydligt försämrad bildkvalitet. I en illustration visar företaget också upp en bild där ena halvan av en scen i Civilization VI renderats med Tier 2-nivån och screenspace image-tekniken. Här höjdes kvalitetsnivån för de viktiga delarna av bilden, samtidigt som en prestandaförbättring om 14 procent noterades ställt mot ett rent 1×1-läge.

MS_DX12_VRS-Tier-2-ssimage.jpg

En illustration av hur delar av bilden renderas med lägre (blå färg) och högre (röd färg) shader rate.

Firaxis illustrerar också hur tekniken används för att välja ut vilka delar av bilden som får höjd- respektive sänkt kvalitetsnivå presentera i form av en visualiseringsbild. I denna markeras delar som får sänkt kvalitetsnivå (2×2) med blå färg medan delar med hög kvalitetsnivå (1×1) markeras med röd färg.

Status för VRS år 2020

Under våren år 2020 finns hårdvarustöd för VRS Tier 2 tillgängligt på marknaden i form av Nvidias Turing-arkitektur och Intels integrerade grafikarkitekturer från och med Gen11-grafiken i Ice Lake-processorerna.

Tekniken väntas även ta plats i Intels kommande Xe-arkitektur. För AMD tillkommer stöd för VRS Tier 2 i och med arkitekturen Radeon DNA 2 (RDNA 2), vilken dels tar plats i fristående grafikkort och dels i spelkonsolerna Playstation 5 och Xbox Series X i slutet av år 2020.

Variable Rate Shading stöds idag i gränssnitten DirectX 11, DirectX 12, Vulkan och OpenGL vilket innebär att tekniken stöds på bred front så snart företag adderat stöd för Tier 2 på hårdvarunivå. Med hjälp av VRS kommer alltså såväl datorer som spelkonsoler bättre kunna utnyttja tillgänglig beräkningskraft för att ge bra bildkvalitet där det är viktigt ur betraktarens synvinkel.

Finns det några andra tekniker relaterade till spelutveckling du vill läsa mer om? Lämna gärna förslag i kommentarerna!

Tvingat VRS-stöd med Triangelplockaren

SweClockers-medlemmen swecoder har bestyckat egna mjukvaruverktyget Triangelplockaren med möjligheten att aktivera stöd för VRS även i spel som inte stöder tekniken. Utöver att det demonstrerar de prestandamässiga vinsterna som kan fås trots att utvecklarna själva inte optimerat spelkoden för VRS kan verktyget också illustrera kvalitetsnivån i olika delar av bilden. Du kan läsa mer om projektet och se videodemonstrationer av Triangelplockaren i forumtråden.