Variable Rate Shading i spel som saknar inbyggt stöd

Permalänk
Medlem

Variable Rate Shading i spel som saknar inbyggt stöd

För en tid sedan fick D3D12 stöd för variable rate shading (VRS), en teknik som möjliggör att olika delar av bilden kan beräknas med olika kvalitetsgrader. För mer information rekommenderar jag er att läsa Sweclockers artikel.

Jag har utökat Triangelplockaren med funktionalitet att applicera samt visualisera bildbaserad (image-based) VRS i befintliga spel. Den färdigrenderade frame-bilden analyseras och resultatet används därefter för att påverka hur VRS-inställningarna ska vara nästkommande frame. Utfallet av analysen är en bild som indikerar huruvida området ska få VRS 1X1, 2X2 (mörkgult i filmklippen) eller 4X4 (ljusgult i filmklippen). För att få ökad prestanda måste analyssteget gå relativt fort, annars riskerar den eventuella prestandavisten att utebli.

Så här långt har två testprogramvaror använts, Tom Clancy's The Division och Battlefield V. Ingen av dem har inbyggt stöd för bildbaserad VRS. Prestandavinsten kan variera rejält beroende på hur speltillverkaren valt att rendera. Exempelvis är det mindre fördelaktigt om compute-pipelinen används för de tyngre ljus-beräkningarna, då VRS-effekten endast påverkar renderings-pipelinen.

Ta gärna en titt på filmklippen nedan (efter att Youtube färdigbehandlat dem till 4k-upplösning), de visar hur VRS kan användas för att relativt enkelt öka prestandan i befintliga spel som inte har inbyggt stöd för VRS. Spelen renderades alltid med upplösningen 3840x2160. De tröskelvärden som redovisas säger egentligen inte så mycket för er utan används internt i analyssteget, högre värde innebär högre acceptans och därmed ökad sannolikhet att grafikfel uppstår.

Tom Clancy's The Division
Nedan finner ni ett antal filmklipp från spelets benchmark samt ett klipp som visar starten av speldemot. Prestandaresultaten i filmklippen är inte desamma som fås då filminspelning är inaktivt. Därför redovisas även benchmark-resultat för respektive testfall då videoinspelning inte utförs.

Summering av prestandaresultaten
Utan VRS: avg FPS: 56,3 - typical FPS: 57,0
Med "VRS-låg": avg FPS: 61,1 - typical FPS: 61,4 - ~8-9% högre än utan VRS
Med "VRS-hög": avg FPS: 66,3 - typical FPS: 66,7 - ~17-18% högre än utan VRS
Med "VRS-kass-överallt": avg FPS: 76,4 - typical FPS: 76,8 - ~35-36% högre än utan VRS

Benchmark, VRS inaktiverat (referens)
Resultat utan videoinspelning: avg FPS: 56,3 - typical FPS: 57,0

Benchmark, VRS aktiverat med gränsvärde 3 för 4X4 och 16 för 2X2 (svårt att se några grafikfel)
Resultat utan videoinspelning: avg FPS: 61,1 - typical FPS: 61,4 - ~8-9% högre än utan VRS

VRS-visualisering:

Benchmark, VRS aktiverat med gränsvärde 8 för 4X4 och 25 för 2X2 (tydliga grafikfel uppstår)
Resultat utan videoinspelning: avg FPS: 66,3 - typical FPS: 66,7 - ~17-18% högre än utan VRS

VRS-visualisering:

Benchmark, VRS med 4X4 över hela skärmen (fel överallt, visar maximal VRS-effekt)
Resultat utan videoinspelning: avg FPS: 76,4 - typical FPS: 76,8 - ~35-36% högre än utan VRS

Gameplay, slår av och på VRS/VRS-visualisering vid flera tillfällen. Notera FPS-skillnaderna!

Battlefield V
Gameplay, slår av och på VRS/VRS-visualisering vid flera tillfällen.

Det finns kanske inte så mycket att diskutera kring detta, men förhoppningsvis kan det leda till att fler hobby- och proffsutvecklare anammar tekniken. Mitt mål är att arbeta vidare något med analyslogiken och landa någonstans där prestandanvinsten blir runt 10-15% utan att större grafikfel uppstår.

Kika gärna på fler videoklipp längre ner i tråden: Mortal Kombat 11, Metro Exodus och FIFA 18.

Visa signatur

Lärare i spelutveckling (BTH) som tycker om att tugga trianglar

Permalänk
Lyxfällan 🎮

Det här är fantastiskt roligt och intressant att läsa/titta på! Om du har tid och möjlighet får du gärna berätta om hur mycket arbete det varit med att få in VRS-stöd i titlar utan det, hur stabilt stödet är och dina planer om projektet. Grymt kul, kan bli så att vi lyfter in en av dina videos i vår artikel om ämnet

Visa signatur

"We're with the press, hired geeks!"
Raoul Duke, Fear n' Loathing in Las Vegas

Permalänk
Medlem

Grymt! Häftigt att det går att göra som "efterhäng" på befintliga spel. Superintressant

Visa signatur

Core i7 7700K | Titan X (Pascal) | MSI 270I Gaming Pro Carbon | 32 GiB Corsair Vengeance LPX @3000MHz | Samsung 960 EVO 1TB

Permalänk
Medlem

Intressant! Framförallt hade det varit intessant och se hur mycket man kan förbättra prestanden i VR spel med denna tekniken.

Permalänk
Inaktiv

Spännande! Dock inget som lär fungera med 1080Ti förmodar jag.

Permalänk
Medlem

Extremt bra jobbat! Hade jag bara kunnat använda det i PUBG rakt upp och ner? Måste man starta binären från ditt program eller hookar den på automagiskt på något sätt?

Visa signatur

Hur många datorer är för många?

Permalänk
Medlem
Skrivet av swecoder:

För en tid sedan fick D3D12 stöd för variable rate shading (VRS), en teknik som möjliggör att olika delar av bilden kan beräknas med olika kvalitetsgrader. För mer information rekommenderar jag er att läsa Sweclockers artikel.

Jag har utökat Triangelplockaren med funktionalitet att applicera samt visualisera bildbaserad (image-based) VRS i befintliga spel. Den färdigrenderade frame-bilden analyseras och resultatet används därefter för att påverka hur VRS-inställningarna ska vara nästkommande frame. Utfallet av analysen är en bild som indikerar huruvida området ska få VRS 1X1, 2X2 (mörkgult i filmklippen) eller 4X4 (ljusgult i filmklippen). För att få ökad prestanda måste analyssteget gå relativt fort, annars riskerar den eventuella prestandavisten att utebli.

Så här långt har två testprogramvaror använts, Tom Clancy's The Division och Battlefield V. Ingen av dem har inbyggt stöd för bildbaserad VRS. Prestandavinsten kan variera rejält beroende på hur speltillverkaren valt att rendera. Exempelvis är det mindre fördelaktigt om compute-pipelinen används för de tyngre ljus-beräkningarna, då VRS-effekten endast påverkar renderings-pipelinen.

Ta gärna en titt på filmklippen nedan (efter att Youtube färdigbehandlat dem till 4k-upplösning), de visar hur VRS kan användas för att relativt enkelt öka prestandan i befintliga spel som inte har inbyggt stöd för VRS. Spelen renderades alltid med upplösningen 3840x2160. De tröskelvärden som redovisas säger egentligen inte så mycket för er utan används internt i analyssteget, högre värde innebär högre acceptans och därmed ökad sannolikhet att grafikfel uppstår.

Tom Clancy's The Division
Nedan finner ni ett antal filmklipp från spelets benchmark samt ett klipp som visar starten av speldemot. Prestandaresultaten i filmklippen är inte desamma som fås då filminspelning är inaktivt. Därför redovisas även benchmark-resultat för respektive testfall då videoinspelning inte utförs.

Summering av prestandaresultaten
Utan VRS: avg FPS: 56,3 - typical FPS: 57,0
Med "VRS-låg": avg FPS: 61,1 - typical FPS: 61,4 - ~8-9% högre än utan VRS
Med "VRS-hög": avg FPS: 66,3 - typical FPS: 66,7 - ~17-18% högre än utan VRS
Med "VRS-kass-överallt": avg FPS: 76,4 - typical FPS: 76,8 - ~35-36% högre än utan VRS

Benchmark, VRS inaktiverat (referens)
Resultat utan videoinspelning: avg FPS: 56,3 - typical FPS: 57,0
https://youtu.be/dsnM9bNES_g?t=0

Benchmark, VRS aktiverat med gränsvärde 3 för 4X4 och 16 för 2X2 (svårt att se några grafikfel)
Resultat utan videoinspelning: avg FPS: 61,1 - typical FPS: 61,4 - ~8-9% högre än utan VRS
https://youtu.be/dsnM9bNES_g?t=158

VRS-visualisering:
https://youtu.be/dsnM9bNES_g?t=290

Benchmark, VRS aktiverat med gränsvärde 8 för 4X4 och 25 för 2X2 (tydliga grafikfel uppstår)
Resultat utan videoinspelning: avg FPS: 66,3 - typical FPS: 66,7 - ~17-18% högre än utan VRS
https://youtu.be/dsnM9bNES_g?t=430

VRS-visualisering:
https://youtu.be/dsnM9bNES_g?t=565

Benchmark, VRS med 4X4 över hela skärmen (fel överallt, visar maximal VRS-effekt)
Resultat utan videoinspelning: avg FPS: 76,4 - typical FPS: 76,8 - ~35-36% högre än utan VRS
https://youtu.be/dsnM9bNES_g?t=700

Gameplay, slår av och på VRS/VRS-visualisering vid flera tillfällen. Notera FPS-skillnaderna!
https://youtu.be/IlpUyTokbq4

Battlefield V
Gameplay, slår av och på VRS/VRS-visualisering vid flera tillfällen.

https://youtu.be/d2SXCX6_FOo

Det finns kanske inte så mycket att diskutera kring detta, men förhoppningsvis kan det leda till att fler hobby- och proffsutvecklare anammar tekniken. Mitt mål är att arbeta vidare något med analyslogiken och landa någonstans där prestandanvinsten blir runt 10-15% utan att större grafikfel uppstår.

Ser ju riktigt lovande ut! Duktigt jobbat!

Har du någon forskning på om det även går att nyttja på Linux-baserade OS via ex. Vulkan API?
Det vore rätt intressant att få någon indikation på det just p.g.a. hur dåligt optimerade spel kan vara för just den plattformen.

Gissar på att tekniken i DX12 som du refererar till motsvarar denna funktionalitet hos Vulkan:

https://www.khronos.org/registry/vulkan/specs/1.2-extensions/...

Visa signatur

Tower: ace Battle IV | CPU AMD Phenom II X2 BE unlocked 4cores@3,2GHz | RAM 8GB DDR2@800MHz | MB ASUS M4A785-M | GFK AMD Radeon HD 6850 1GB | HDD Kingston SSD Now 60GB (/) Seagate 2TB(/home) | OS Ubuntu 20.04 LTS
-Numera titulerad: "dator-hipster" då jag har en AMD GPU och dessutom kör Linux.

Permalänk
Medlem

Ser ju väldigt bra ut i videon. Skulle man kunna använda det för att nå ett frametime-mål?
Tex "sänk kvalitet tills frametime <= 8.55ms"? för att exempelvis försöka hålla 117 fps alltid i 4k.

Permalänk
Medlem

Bravo 👍🙌

Visa signatur

CPU: I7 7700k @ 4.6GHz - Noctua NH D15S - Asus ROG Strix Z270F Gaming.
GPU: RTX 3070TI @2 st 120mm cf-v12hp hydro dynamic fläktar. 👍
RAM: 32GB DDR4 3200MHz. HÅRDDISK: 4 st SSD, 2 Mekaniska.
MONITOR:1 Xiaomi MI 34"- 3440x1440 144Hz MONITOR:2 Optix MAG274R 27" 1080p 144Hz MONITOR/Tv:3 LG 47lv355n-ZB 47". Nätagg: Corsair Newton R2 1000W. Allt i ett Cooler Master CM Storm Stryker.

Permalänk
Medlem

Går det att köra det här fritt.
Eller måste utvecklarna implementera det i spelet?

Permalänk
Medlem
Skrivet av loevet:

Det här är fantastiskt roligt och intressant att läsa/titta på! Om du har tid och möjlighet får du gärna berätta om hur mycket arbete det varit med att få in VRS-stöd i titlar utan det, hur stabilt stödet är och dina planer om projektet. Grymt kul, kan bli så att vi lyfter in en av dina videos i vår artikel om ämnet

Tack, kul att du tycker det! Koden för Triangelplockaren var relativt redo för uppdraget, tog några timmar att få till detta grundläggande stöd. Stabiliteten beror helt på hur utvecklarna valt att rendera, ska kika på en del titlar den närmaste tiden. Kul om ni väljer att använda något av klippen Hann testa på ett annat spel lite snabbt:

Mortal Kombat 11, resultat med videoinspelning aktiverad
Utan VRS: avg FPS: 35
Med "VRS-låg": avg FPS: 39
Med "VRS-kass-överallt": avg FPS: 44

Referens:

VRS-låg:

VRS-visualisering:

VRS-kass-överallt:

Skrivet av anon5930:

Spännande! Dock inget som lär fungera med 1080Ti förmodar jag.

Tack! Nej, tyvärr krävs nyare kort.

Skrivet av kelthar:

Extremt bra jobbat! Hade jag bara kunnat använda det i PUBG rakt upp och ner? Måste man starta binären från ditt program eller hookar den på automagiskt på något sätt?

Tack! I teorin ja, men i praktiken kommer deras anti cheat-logik att slänga ut (och ev. banna) dig.

Skrivet av krigelkorren:

Ser ju riktigt lovande ut! Duktigt jobbat!

Har du någon forskning på om det även går att nyttja på Linux-baserade OS via ex. Vulkan API?
Det vore rätt intressant att få någon indikation på det just p.g.a. hur dåligt optimerade spel kan vara för just den plattformen.

Gissar på att tekniken i DX12 som du refererar till motsvarar denna funktionalitet hos Vulkan:

https://www.khronos.org/registry/vulkan/specs/1.2-extensions/...

Tack! Tyvärr, har inte tillräckligt djup kunskap kring Linux. Vulkan i Windows hade varit full möjligt. Jepp, shading rate image är högst troligen samma sak.

Skrivet av JBE:

Ser ju väldigt bra ut i videon. Skulle man kunna använda det för att nå ett frametime-mål?
Tex "sänk kvalitet tills frametime <= 8.55ms"? för att exempelvis försöka hålla 117 fps alltid i 4k.

Absolut, att påverka tröskelvärdena i en eller andra riktningen hade kunnat uppnå den effekten. Kul tanke!

Skrivet av Tripsen:

Går det att köra det här fritt.
Eller måste utvecklarna implementera det i spelet?

För bäst resultat bör utvecklarna implementera det i spelet direkt. Jag har inte full insikt i deras logik och därför finns risken att inför grafikfel som hade kunnat undvikas med full insyn.

Visa signatur

Lärare i spelutveckling (BTH) som tycker om att tugga trianglar

Permalänk

Holy shit, du är en gud!

Kommer du släppa det här som mjukvara en vacker dag? Skulle lätt donera pengar för din insats.

Bra jobbat!

Visa signatur

Citera för svar!

Permalänk
Medlem

Vilka grymma kunskaper du besitter! Hur började intresset och hur har du lärt dig detta?

En annan fråga är om de olika Anti-cheat-mjukvarorna som främst följer med multiplayerspel detektar denna mjukvara?

Edit: Du hade ju visst redan svarat på Anti-cheat-problematiken. Så singleplayer-spel främst med andra ord

Visa signatur

Windows 11 Pro | Intel i7 8700 | ASUS Prime Z370-P | Corsair 16GB 3000MHz | ASUS GTX 1080 | Fractal Design Define S | Corsair RM750x | Hyper 212 EVO

Permalänk
Medlem

Vore bra att poängtera fetstilt för de som kanske är de värsta FPS-jägarna dvs. competetive-spelare att detta innebär en stor risk för eller garanterad ban.

Visa signatur

🛜🫀: HP ProDesk 400 G3, i5 6500, 8GB DDR4, Intel X520-DA2
🐳🐧: AMD R5 3600 | Google Coral.ai | ASRock X570D4U-2L2T | Silverstone CS381 | 80GB DDR4 | 8 HDD BTRFS RAID1
⌨️🎮: R9 3900X | RTX 2080 LC | Acer XF270HUA | 96GB @ 3200 | Prime B350-plus | Carbide 270R
🎞🎶: LG OLED55C8 | Epson TW3200 | Onkyo TX-NR646 | Infinity Reference 61/51 mk2 | Shield TV V2 | minhembio.com

Permalänk
Medlem

Grymt jobbat! Hade som en tidigare sagt lätt kunnat tänka mej donera ifall det görs tillgängligt.

Permalänk
Medlem
Skrivet av Megagurra:

Holy shit, du är en gud!

Kommer du släppa det här som mjukvara en vacker dag? Skulle lätt donera pengar för din insats.

Bra jobbat!

Skrivet av Moton:

Grymt jobbat! Hade som en tidigare sagt lätt kunnat tänka mej donera ifall det görs tillgängligt.

Tack för vänliga ord! Får se hur jag gör framöver, vill nog testa på några spel till innan någon kod lämnar bygget...

Skrivet av Joppis:

Vilka grymma kunskaper du besitter! Hur började intresset och hur har du lärt dig detta?

En annan fråga är om de olika Anti-cheat-mjukvarorna som främst följer med multiplayerspel detektar denna mjukvara?

Edit: Du hade ju visst redan svarat på Anti-cheat-problematiken. Så singleplayer-spel främst med andra ord

Tack! Jag har alltid varit intresserad av programmering och 3D-programmering i synnerhet. Arbetar som lärare inom spelutveckling på BTH och tanken med Triangelplockaren har hela tiden varit att kunna utvinna information ur "riktiga spel" och därmed få ökad spets i undervisningen. Det som står i textböckerna stämmer inte alltid överens med hur spel fungerar i verkligheten.

Skrivet av tuomi:

Vore bra att poängtera fetstilt för de som kanske är de värsta FPS-jägarna dvs. competetive-spelare att detta innebär en stor risk för eller garanterad ban.

Helt riktigt, om och när detta släpps blir det trippelfetstil på all sådan info. Mina privata konton (Battlefield V etc) får ta den risken tillsvidare.

Visa signatur

Lärare i spelutveckling (BTH) som tycker om att tugga trianglar

Permalänk
Medlem

Metro Exodus
Nedan finner ni ett antal filmklipp från spelets benchmark samt ett klipp som visar starten av enspelarkampanjen. Prestandaresultaten i filmklippen är inte desamma som fås då filminspelning är inaktivt. Därför redovisas även benchmark-resultat för respektive testfall då videoinspelning inte utförs. Samtliga körningar är med maxade inställningar (DXR inaktiverat dock) i 4k-upplösning.

Ännu ett spel där VRS har en märkbar prestandaeffekt.

Summering av prestandaresultaten
Utan VRS: avg FPS: 32,7 - max FPS: 45,4 - min FPS: 22,1
Med "VRS-låg": avg FPS: 37,9 (~16%) - max FPS: 55,9 - min FPS: 23,1
Med "VRS-kass-överallt": avg FPS: 42,4 (~30%) - max FPS: 60,7 - min FPS: 29,31

Benchmark, VRS inaktiverat (referens)

Benchmark, VRS aktiverat med gränsvärde 3 för 4X4 och 16 för 2X2 (svårt att se några grafikfel)

VRS-visualisering:

Benchmark, VRS med 4X4 över hela skärmen (fel överallt, visar maximal VRS-effekt)

Gameplay, slår av och på VRS/VRS-visualisering vid flera tillfällen. Notera FPS-skillnaderna!

Visa signatur

Lärare i spelutveckling (BTH) som tycker om att tugga trianglar

Permalänk
Medlem

FIFA 18 (demo-versionen)

Visa signatur

Lärare i spelutveckling (BTH) som tycker om att tugga trianglar

Permalänk
Medlem
Skrivet av swecoder:

Jag har alltid varit intresserad av programmering och 3D-programmering i synnerhet. Arbetar som lärare inom spelutveckling på BTH och tanken med Triangelplockaren har hela tiden varit att kunna utvinna information ur "riktiga spel" och därmed få ökad spets i undervisningen.

Ahhh, en fellow Karlskronit?

Visa signatur

Huvudriggen är en Gigabyte Aorus Xtreme | 128gb DDR5 6000 | Ryzen 7950X | 3080Ti
Utöver det är det för många datorer, boxar och servar för att lista :P

Permalänk
Medlem
Skrivet av swecoder:

Tack! I teorin ja, men i praktiken kommer deras anti cheat-logik att slänga ut (och ev. banna) dig.

Tack för att du nämner detta, som betatestare/support för ett onlinespel är det alltid tråkigt att förklara att dom har blivit av med sitt konto pga något okänd program hookad på och lämnat lite signaturer.

Visa signatur

i7 2600k | P8P67Deluxe | Noctua NH-D14 | KFA2 GTX1080 EXOC | Corsair 750W | Corsair Obsidian 800D | Dell U2412M
America's Army: Proving Grounds

Permalänk
Medlem
Skrivet av inquam:

Ahhh, en fellow Karlskronit?

Stämmer! Du fick mig att uppdatera min profil med lite mer info.

Visa signatur

Lärare i spelutveckling (BTH) som tycker om att tugga trianglar

Permalänk
Medlem

hade gärna sett högre framerate i red dead redemption 2

Permalänk
Medlem
Skrivet av Gehga:

hade gärna sett högre framerate i red dead redemption 2

Här kommer något högre framerate. Samtliga inställningar på max i 4K-upplösning. Jag tycker nog att VRS visar på god potential.

Klippet inleds med gameplay och avslutas med spelets inbyggda benchmark. Jag slår av och på VRS då och då, notera FPS-skillnaderna. Vid ett tillfälle (vid ca 2:00) höjs även tröskelvärdena så att hela skärmen blir "kass överallt", dvs VRS 4X4 över hela.

Visa signatur

Lärare i spelutveckling (BTH) som tycker om att tugga trianglar

Permalänk
Lyxfällan 🎮

Jag har uppdaterat VRS-artikeln med en referens till den här tråden och en illustrerande video. Tycker att så många som möjligt ska få chansen att se det här häftiga projektet

@inquam @swecoder vi är ju TRE karlskroniter här inne! Eller ja, växte upp i en liten by vid smålandsgränsen så det är hårfint om jag får kalla mig karlskronit. Men byhålan tillhör Karlskrona kommun i alla fall

Visa signatur

"We're with the press, hired geeks!"
Raoul Duke, Fear n' Loathing in Las Vegas

Permalänk
Inaktiv

Kan detta användas i VR-spel? Isf är jag sugen på att prova bencha ett par titlar Riktigt coolt projekt