Mesh Shaders på GPU: n för att förbättra grafiken i dina spel

Både NVIDIA och AMD har pratat om en teknik som heter Mesh Shaders, som är en av ramarna för visuell utveckling genom GPU: er under de kommande åren. Men vad är egentligen Mesh Shaders och vad är orsaken till deras existens? Vi förklarar det för dig tillsammans med förändringarna i grafikkortens hårdvara.

spelgrafik

Om vi ​​frågade spelutvecklare för 4K-konsoler och för PC om Ray Tracing är viktigare för framtiden eller förändringen i den "geometriska" delen av 3D-pipelinen, skulle många av dem inte veta vad de skulle säga. Mesh Shaders är en del av en utveckling i scenens geometri, vilket möjliggör mycket mer detaljerade objekt i spel.

Vad är en Shader?

Shaders sobre moteto

En Shader är ett program som drivs av en serie specialiserade enheter i GPU: erna som har möjlighet att köra program. Shaders skiljer sig från program som körs på en CPU av det faktum att de används för att manipulera attributen för en eller flera grafiska primitiver.

En grafisk primitiv kan vara en pixel, en topp eller en triangel om vi talar om 3D-rörledningen. Men en Shader kan också vara vad vi kallar en Compute Shader, som manipulerar vilken typ av data som helst, men som är oberoende av den grafiska pipelinen och används utanför den.

Enheterna som kör skuggprogrammen finns i alla GPU: er och idag finns det dussintals sådana i varje GPU, inklusive low-end. Eftersom en pixel, en triangel, en toppunkt eller kartan över ett protein inte är annat än data för en processor, är enheterna som används för att utföra dessa program desamma oavsett typ av skuggning.

Vad är Mesh Shaders?

Mesh Shaders

Begreppet Mesh Shaders börjar från att ge mångsidigheten hos Compute Shaders till de olika typerna av Shaders som används i det vi kallar World Space Pipeline i Pipeline 3D. Med andra ord: de som används för att manipulera scenens geometri.

För att förstå det måste man ta hänsyn till att det som skiljer en Compute Shader från resten av Shaders förutom Pixel Shader, är ingångsdata som de får för att manipulera och den utmatning som de avger. Idén med Mesh Shader är ingen annan än att förena alla grafiska Shaders som har att göra med manipuleringen av scenens geometri i en enda typ av Shader.

Det vill säga Mesh Shader förenar Vertex, Hull, Domain eller Geometry Shader i en enda typ av Shader-program. Eftersom det gör det möjligt för utvecklare att definiera in- och utmatningsparametrarna för skuggprogram med total frihet, vilket förutom att förenkla och omdefiniera World Space Pipeline också ger den större mångsidighet.

Meshlet-konceptet

DX12 Ultimate

3D-rörledningen kommer inte att modifieras, men hur du arbetar med scenens geometri i World Space Pipeline kommer att vara. För närvarande beräknas hela det geometriska nätet som utgör scenen unisont. Var och en av polygonerna på objekten som utgör scenen hänvisas till i skärmlistan som genereras av CPU: n och var och en av dem måste bearbetas i den ordning de har genererats i listan.

Så vi befinner oss med paradoxen om något som fungerar i serie i en GPU som är utformad för parallell beräkning av data. Lösningen? Tja, återuppfinna hur World Space Pipeline fungerar handlar om geometri, och det är här de så kallade Meshlets kommer in.

Mesh Shaders Meshlets

På samma sätt som en Chiplet är en mindre del av en Chip, är en Meshlet en mindre del av ett polygonnät. Dess funktion är väldigt enkel, istället för att ha I stället för att ha en enda lista för geometrin har vi flera små listor som bearbetas parallellt där varje del tar hand om en del av scenens månghörniga nät. Tack vare detta ökar förmågan att beräkna scenens geometri samtidigt som den blir mindre stel för programmerarna.

Eftersom Mesh Shaders kan fungera som vilken typ av skuggning som helst är det dessutom möjligt att arbeta i olika led i rörledningen med de olika Meshlets asynkront och till och med utföra dem i en annan ordning än den traditionella rörledningen om det behövs.

Amplification Shader

Amplification Shader

Amplification Shader är en typ av Shader-program som förekommer i rörledningen före Shaders. Även om de till skillnad från andra Shaders i 3D-pipelinen inte manipulerar någon form av primitiv grafik, förutom att de är helt valfria.

Dess funktion är att kontrollera utförandet av Mesh Shaders, det vill säga genom dem kan vi bestämma vilka Mesh Shaders som ska köras och vilka inte, i vilken ordning de ska göra det och de har förmågan att lägga till och ta bort data från Meshlets som manipulerar Mesh Shaders.

Utan Amplification Shaders genereras Meshlets geometriindex av CPU: n, med Amplification Shader kan dessa listor manipuleras från själva GPU: n. Detta gör det möjligt att generera scenarier där det är nödvändigt att lägga till eller ta bort geometri mycket lättare, såsom tessellation och Culling.

Vilka är fördelarna med Amplification och Mesh Shaders i spel?

Demo av Unreal Engine 5

Fördelarna de ger är flera, vi kommer att lista de mest kända:

  • De möjliggör eliminering av överflödig och därför inte synlig geometri utan att man behöver beräkna hela rörledningen.
  • De tillåter tessellering adaptivt, detta innebär att man kan välja graden av tessellering, vilket möjliggör extremt detaljerad modellering nära kameran.
  • Du kan dynamiskt generera geometri på olika detaljeringsnivåer utan att 3D-modellerare behöver göra flera versioner av samma modell för att göra det.
  • Förbättrar animeringen av objekt genom att ge mer mångsidighet när det gäller att manipulera geometri-relaterade skuggor.

Vi kommer att se dem alla implementerade i alla spel när DX12 Ultimate blir referens-API när vi utvecklar spel på PC. Detta kommer att leda till försvinnande av tekniker som användning av kartor över normaler och derivat för att representera ytor i lättnad och en högre detaljnivå.