Geometri -motor i spel -GPU: nytta och drift

Geometri -motor i spel -GPU: er

Tredimensionell grafik har funnits med oss ​​i två decennier och med den har även GPU: erna ansvarat för att generera dem och skicka dem till skärmen på våra bildskärmar. Idag är de extremt komplexa bitar som består av olika element, vissa nya, andra har varit inne i åratal. Den vi kommer att täcka i den här artikeln är Geometry Engine.

När grafiken i realtid går framåt, så gör GPU: erna och med det verkar nya problem vara lösta eller gamla förstoras. Det betyder att gamla lösningar inte längre är effektiva och att nya måste skapas. Den nya generationen grafik kommer inte bara att baseras på Ray Tracing, utan på en avsevärd ökning av scenens geometri. Det är här Geometry Engine kommer in, en viktig del att förbättra GPU effektivitet i detta nya paradigm.

Lite historia för att rensa upp förvirringen

den

Historiskt sett hänvisade Geometry Engine eller geometri -motorn till hårdvaran som ansvarar för att utföra manipulationsprocesserna för scengeometrin som uppstår före rasterisering. Det vill säga innan trianglarna som utgör den tredimensionella scenen har omvandlats till pixelfragment.

Den första Geometry Engine var Jim Clarks hjärnskap i början av 1980 -talet och var början på den legendariska Silicon Graphics. Tack vare denna innovation var det möjligt att flytta 3D -scenmanipulation från minidatorer till arbetsstationer som var en bråkdel av den förstnämnda storleken och kostnaden.

Det var inte förrän i slutet av 90 -talet som 3D -spel började bli populära, men de första 3D -korten saknade en Geometry Engine och förlitade sig på CPU makt att beräkna scengeometri. Det var inte förrän PC -lanseringen av den första NVIDIA GeForce att GE var helt integrerad i ett grafikkrets. Kallas för T&L av NVIDIA -marknadsföring.

Under åren och Shaders ankomst har Geometry Engine som en hårdvara bytts ut helt och nu är det Shader Units som tar hand om det. Denna förändring inträffade från DirectX 10, när Geometry Engine som hårdvara försvann från NVIDIA och AMD GPU: er, men nyligen har dess betydelse tagits av en ny typ av enhet som ingår i de mest avancerade arkitekturerna och om det är vad vi kommer att prata om i den här artikeln.

Den primitiva monteraren

Hörn Primitivas Fragmentos

Element i en tredimensionell spelscen återges med hjälp av trianglar för att komponera de olika elementen i scenen, som består av hörn. Nu är det första steget i den grafiska pipelinen efter att kommandoprocessorn har läst skärmlistan Vertex Shader och dess namn beror på att det som det gör är att arbeta med hörn och det gör det inte med primitiv eller trianglar så oberoende .

Det är en enhet som heter Primitive Assembler som ansvarar för att förena dessa hörn, inte bara för att skapa trianglar, utan för att rekonstruera de olika modellerna som utgör scenen genom att förena sina olika hörn tillsammans. Primitive Assembler är ett fast funktionsstycke i alla GPU: er som utför denna funktion automatiskt utan att det behövs koddeltagande i skärmlistan. Enkelt och enkelt, allt som körs på Vertex Shader -scenen inom 3D -pipeline skickas till Primitive Assembler och därifrån till nästa process i etappen.

Tessellation

Om det finns en tessellationsenhet i GPU: n, som är ansvarig för att dela upp hörnen, kör Primitive Assembler strax efter tessellationsprocessen, eftersom den nya konfigurationen av hörnen kräver andra fackberäkningar än de hörn som kommer att utgöra olika delar av scenen.

Clipper och borttagning av överflödig geometri

Culling Geometry Engine

I en tredimensionell scen finns det många grafiska primitiv eller trianglar i scenen. Men alla är inte synliga för spelaren i varje bildruta och därför är det nödvändigt att kasta bort all osynlig geometri i varje ram innan rasteriseringssteget. Eftersom varje hörnpunkt som inte syns, men som inte kastas är en som senare rastreras, textureras och även om den senare kasseras eftersom det finns en annan pixel med högre prioritet vid ritning.

Anledningen? Tänk på att inom den traditionella 3D -pipelinen utförs en Vertex Shader för varje hörn i scenen, men en Pixel Shader för varje hörn och antalet pixlar per triangel är vanligtvis en storleksordning större. Det är därför det är viktigt att utesluta geometri som inte syns i scenen. För detta används två algoritmer:

  • Den första detekterar hörnen utanför spelarens synfält och kallas View Frustum Culling.
  • Den andra eliminerar istället de som finns inom synfältet, men som döljs av andra större och närmare element och kallas Back Face Culling.

Nu kan Culling-processen också utföras genom en fast funktion och vad den gör är att helt eliminera trianglarna och till och med icke-synliga objekt. Men vad händer när ett objekt är delvis synligt? Tja, beroende på hur hårdvaran implementeras, eliminerar den inte eller eliminerar objektet helt.

Vad är Geometry Engine i en aktuell GPU?

LOD Mesh Shading Geometry Engine

När problemen i Primitive Assembler och Clipper har förklarats måste vi prata om vad Geometry Engine är, vilket inte är mer än en ny maskinvara som samlar samma funktioner som Primitive Assembler och Clipper, men med en större precision. Eftersom den har förmågan att eliminera överflödig geometri men på toppunktsnivå. Det betyder att om ett objekt är delvis utanför skärmen eller inte är helt dolt, så är det att ta bort de icke-synliga hörnen och bygga om endast den synliga delen.

Det andra verktyget för Geometry Engine har att göra med skapandet av detaljnivån för objekten i scenen, där dessa har olika detaljeringsnivåer, detaljeringsnivåer eller LOD på engelska, beroende på avståndet. Geometry Engine har förmågan att intelligent ta bort icke-synliga hörn baserat på avstånd och därmed behålla objektets ursprungliga form. Tänk på det som en tessellation i omvänd riktning, där du istället för att öka antalet hörn för att generera detaljer, det du gör är att minska dem.

Detta är också viktigt inför över-tessellationsproblemet, det måste beaktas att när hörnen är tessellerade har GPU: n inte bevis på sin verkliga position i ramutrymmet, så det uppstår ett problem som uppstår över-tessellationen. Vilket är att GPU beräknar fler hörn i objekt på avståndet som inte syns, men vars data finns där. Geometri -motorn som har tillgång till informationen om scenens geometri kan enkelt eliminera dem. Låt oss inte glömma att den traditionella Clipper bara tar bort det som är ur bilden eller dolt.

Geometry Engine i den nya DX12 Ultimate pipeline

DX12 Ultimate

Med DirectX 12 Ultimate ändras delen av 3D -rörledningen innan rasterisering helt, eftersom en bra del av funktionerna går från att utföras via en fast funktion till att göra det i Shader -enheterna i GPU: n. Till exempel kommer tesselleringen att nå en punkt som kommer att upphöra att utföras i en fast funktionsenhet för att passera till nämnda enheter och därför kommer enheten att försvinna.

När det gäller Geometry Engine försvinner detta inte, men det är den enda som har tillgång till informationen om hur hörnen är anslutna till varandra. Varje algoritm som innebär att du får tillgång till listan över scengeometri innebär att du måste gå igenom Geometry Engine, som är den som styr listan över hörn och deras relationer med varandra.

Blickar vi framåt är en av de saker vi kommer att se skapandet av BVH -strukturer för Ray Tracing från GPU: n, den hårdvara som kommer att utvecklas för denna uppgift är Geometry Engine. Som idag har tillgång till L2 -cachen i GPU, där informationen om hörnen lagras tillfälligt. Mängden minne inuti GPU: n förväntas öka avsevärt under de följande åren.