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

DAN Cases A4-SFX | AMD Ryzen 7 9800X3D | Thermalright AXP90-X47 Full Copper |
INNO3D GeForce RTX 4070 Ti SUPER 16GB Twin X2 | Kingston 32GB (2x16GB) DDR5 6000MHz CL30 | ASUS ROG Strix B650E-I Gaming WIFI | Samsung 960 EVO 1TB | Corsair SF-600

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: I9 10900KF -Kylare: Arctic Freezer 360 - Moderkort: ASRock Velozita Z590 PG.
GPU: RX 9070 XT Reaper @2 st 120mm cf-v12hp hydro dynamic fläktar. 👍
RAM: 32GB DDR4 3466 MHz Ballistix Elite. 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: Asus TUF 1000w Gold Atx 3.1. 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

Ryzen 7 7800X3D | ASUS TUF Gaming B650-Plus WIFI | Kingston 32GB (2x16GB) DDR5 6GT/s CL30 FURY Beast | Kingston Fury Renegade M.2 NVMe SSD Gen 4 2TB | MSI RTX 4060 8GB | Fractal Design Define S | MSI MPG A850G 850W | Thermalright Phantom Spirit 120 SE | Windows 11 Pro | AOC 27" AGON AG276QZD2 OLED QHD 240 Hz

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 290 PRO G9, i3 14100, 8GB DDR4, Intel X520-DA2
🐳🐧: AMD R5 3600 | Google Coral.ai | ASRock X570D4U-2L2T | Silverstone CS381 | 80GB DDR4 | 8 HDD BTRFS RAID1
⌨️🎮#1: R7 5700X3D | RTX 4070 | Acer XF270HUA | 96GB @ 3600 | MSI X570 MPG GAMING EDGE
⌨️🎮#2: i5 12400F | RTX 2080 LC | Huawei GT 27 | 16GB @ 3600 | MSI B760M-P DDR4 | CORSAIR C70
🎞🎶: 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 | 96gb DDR5 6000 | Ryzen 9950X3D | 5090
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