Kompilering av Shaders för DX12 eller Vulkan, den stora elefanten i rummet.

Permalänk
Hjälpsam

Kompilering av Shaders för DX12 eller Vulkan, den stora elefanten i rummet.

Jag har inte förstått hur krävande detta är, det blev smärtsamt tydligt för Horizon Zero Dawn, där man tvingas att kompilera allt innan man börjar spela, samma sak för Borderlands 3, om man kör med DX12.

Ett vanligt knep för att komma ifrån detta, är att bara kompilera de viktigaste först, för att sedan kompilera i bakgrunden medan men spelar, men där kan resultatet bli stutter och hack första halvtimmen, inte så kul det heller.

Några reflektioner.

  • Tester; om man testar med ett spel i DX12, under det att Shaders kompilerar, är risken stor att resultatet blir sämre och missvisande.

  • Minne; DX12 kommer kräva mer minne, i alla fall delvis för att ha plats för denna kompilering.

  • Kärnor; det är en fördel med flera kärnor här, det ger kraft över till kompilering.

  • 100% CPU usage; det behöver inte betyda att din CPU inte mäktar med spelet, det kan betyda att dess lediga kapacitet, går åt att kompilera Shaders.

  • DX12 vs DX11; du tycker att spelet funkar sämre under DX12, men det kan bero på att du bara testar under det att Shaders kompilerar, efteråt kan det flyta bättre.

  • DX12 vs DX11 igen; i fallet Borderlands 3, trodde många att spelet kraschat, eftersom man enbart såg Claptrap dansa, i vad som kändes som en evighet, medan de kompilerade, numera finns det en "progress bar".

  • Vulkan; samma problem där, man slipper inte undan.

Nu skall det understrykas, att det är enbart är första gången, eller efter byte av drivrutin man behöver kompilera om.

Mer i detta forum.
https://forum.beyond3d.com/threads/shader-complilation-on-pc-...

Permalänk
Medlem

@Ratatosk: Intressant. Antar att denna tråden kommer växa med tiden.

Spelar The Legend of Zelda: Breath of the Wild på PC genom Cemu. Där måste alla shaders kompilera före spelet startar och även en tid in i spelet. Så i början kan det det vara lite stuttering.

Permalänk
Hjälpsam

Såg nu att en vanlig metod är att kompilera snabbt utan optimeringar, för att sedan kompilera med optimeringar i bakgrunden medan man spelar.
Nästa gång man startar spelet, laddas då de Shaders som är optimerade.

En orsak till att man inte gjorde så för HZD kan vara att det kommer från PS5 och för en konsol behövs ingen kompilering av speldatorn, sådant har redan gjorts och behöver bara göras en gång eftersom hårdvara och drivrutiner är identiska.

Men en fråga som dyker upp igen, hur påverkar sådant här testandet?

edit
En trevlig liten blog om detta.

https://www.yosoygames.com.ar/wp/2020/08/a-little-clarificati...

edit 2
En lösning vore en liten dialogruta när man startar spelet.

Dina Shaders för detta spel är inte optimerade, detta tar ganska lång tid. Optimerade Shaders ökar prestandan. Vill du; * Spela nu, du kommer att få frågan om du vill optimera Shaders efter det att du slutat spela. * Spela nu och optimera Shaders medan du spelar. Detta kan påverka spelet negativt de första 10-20 minuterna. * Optimera dem nu, innan du spelar. Du kan använda datorn till annat, under tiden de optimeras. [OK] [Avbryt]

Permalänk
Hjälpsam

En bra genomgång av de beslut man tvingas ta.

https://gpuopen.com/learn/porting-detroit-1/