Mesh Shader är en teknik som börjat få allt större fäste i spelbranschen. Tekniken öppnar upp för märkbart bättre prestanda i speltitlar genom att erbjuda ny funktionalitet jämfört med traditionella shaders. Låt oss gå igenom vad den nya tekniken faktiskt gör!
Dagens shaders
Spelvärldar som vi känner till dem börjar ofta som en gigantisk samling trianglar. Dessa kan ses som ett slags skelett utvecklare senare klär i texturer och färger för att ge oss de spelvärldar vi kommit att älska. En triangels kanter kallas på engelska för “vertex” och en vertex shaders uppgift är då att ta en vertex 3D-position till 2D-utrymmet på en skärm och skicka allt vidare för att få nästa lager behandling.
Moderna spel använder ofta inte så pass många trianglar att de ställer till det för prestandan. Oftast ligger belastningen som kommer från vertex, tessellation och geometri-shaders långt under alla andra beräkningar som måste utföras för att ett spel ska visas på våra skärmar. Trots detta är vertex shaders något opraktiska i Direct3D. Detta är för att spelmotorerna måste behandla dessa trianglar innan någonting annat kan utföras. Minst sagt opraktiskt med tanke på hur många av dessa trianglar inte ens är en del av något vi ser i spelen.
Vertex shaders kan tas bort innan grafikkortet ens får uppgiften att börja behandla dem eller efter att trianglarna fått vertex shaders applicerade. Då modern datorhårdvara är så pass bra på parallella beräkningsuppgifter blir vertex shaders med sina begränsningar i princip bara ett hinder efter ett tag. Detta tack vare det ökande kravet på antalet trianglar i ett spel då man konstant eftersträvar mer realism i grafiken.
Här är så kallade “compute shaders” mer anpassade för modern hårdvara då dessa kan läsa vad som lagrats på grafikminnet, göra små förändringar och sedan skriva över det som lagrats med ny information. Dessvärre kan compute shaders inte skapa trianglar på egen hand. Vilket innebär att man behöver använda dessa tillsammans med vertex shaders.
Mesh Shader: två för en
Vad en mesh shader är kan egentligen summeras väldigt snabbt. Tänk en compute shader som också kan skapa de tidigare nämnda trianglar som vertex shaders står för. Detta innebär att informationen inte behöver ta omvägen genom grafikminnet vilket betyder att man kan få ordentliga prestandavinster.
Istället för en vertex shader som förblir vad den blivit tillsagd att vara kan en mesh shader använda sig av några enstaka kilobyte videominne och RAM för att pumpa ut upp till 256 trianglar på egen hand. Dessa upp till 256 trianglar stora klumpar är helt oberoende av varandra och kan således framställas samtidigt. En mesh shader kan göra sig av med alla typer av shaders som läggs på varandra för att skapa en yta i ett spel. Den ersätter då vertex shaders, geometri-shaders och tessellation-shaders på en och samma gång. Tack vare detta har spelutvecklare nya metoder för att skapa geometri för objekt och karaktärer i spel.
En mesh shader är alltså kort och gott en mycket mer effektiv teknik än vad som oftast används i dagsläget. Mesh shaders kan låta spelutvecklare fylla sina speltitlar med ännu fler trianglar vilket kan resultera i ännu högre detaljrikedom och på så vis snyggare grafik.
Varför får mesh shaders så lite uppmärksamhet?
Varför har inte mesh shaders blivit en riktigt snackis då om de nu är så pass bra? Det finns ett par anledningar till detta. För det första måste ett grafikkort ha hårdvarustöd för mesh shaders. Nvidia introducerade stöd för tekniken med arkitekturen Turing som lanserades 2018 och AMD har endast haft stöd för mesh shaders sedan lanseringen av RDNA 2. Det rör sig alltså om relativt ny hårdvara som krävs för att tekniken ska kunna användas.
Vi får också räkna in spelkonsoler i ekvationen. Både Xbox Series X/S och Playstation 5 har teoretiskt sett stöd för att beräkna en mesh shader. Däremot använder sig Sony av ett eget grafikgränssnitt. Något som då resulterar i att spelutvecklare helt enkelt inte kan utveckla ett spel med mesh shaders och förvänta sig att det fungerar lika bra på Xbox, Playstation och PC. Då försäljningssiffror väger tyngre än ögongodis har tekniken fått mindre uppmärksamhet av utvecklare som skapar spel för samtliga plattformar.
Det tar helt enkelt tid för nya tekniker att anammas av marknaden. Ser vi till andra tekniker som hårdvaruaccelererad raytracing och modern bilduppskalning är det dock en annan femma. Den visuella uppgraderingen raytracing kan bistå med är så pass stor att tekniken fick enormt mycket uppmärksamhet när det först började användas i speltitlar. Detsamma gäller prestandavinsterna tekniker som DLSS och FSR kan stå för. Trots att ingen av dessa tekniker fungerade smärtfritt till en början. Raytracing är i skrivande stund fortfarande något många får vara väldigt selektiva med tack vare hur tungdrivet det kan vara.