Geometri -motor i gaming -GPU'er: værktøj og drift

Geometri -motor i gaming -GPU'er

Tredimensionel grafik har været med os i to årtier og med det også GPU'erne, der har ansvaret for at generere dem og sende dem til skærmen på vores skærme. I dag er de ekstremt komplekse stykker, der består af forskellige elementer, nogle nye, andre har været inde i årevis. Den, vi vil dække i denne artikel, er Geometry Engine.

Efterhånden som grafikken i realtid går fremad, gør GPU'erne det også, og nye problemer ser ud til at være løst, eller de gamle forstørres. Det betyder, at gamle løsninger ikke længere er effektive, og at der skal oprettes nye. Den nye generation af grafik vil ikke kun være baseret på Ray Tracing, men på en betydelig stigning i scenens geometri. Det er her Geometry Engine kommer ind, et vigtigt stykke at forbedre GPU effektivitet i dette nye paradigme.

Lidt historie for at opklare forvirring

dø

Historisk henviste Geometry Engine eller geometri -motoren til den hardware, der var ansvarlig for at udføre manipulationsprocesserne i scene -geometrien, der opstår før rasterisering. Det vil sige, før trekanterne, der udgør den tredimensionelle scene, er blevet konverteret til pixelfragmenter.

Den første geometri -motor var Jim Clarks tankegang i begyndelsen af ​​1980'erne og var begyndelsen på den legendariske Silicon Graphics. Takket være denne innovation var det muligt at flytte 3D -scenemanipulation fra minicomputere til arbejdsstationer, der var en brøkdel af førstnævnte størrelse og omkostninger.

Det var først i slutningen af ​​90'erne, at 3D -spil begyndte at blive populære, men de første 3D -kort manglede en Geometry Engine og stolede på CPU magt til at beregne scene geometri. Det var ikke før pc -lanceringen af ​​den første NVIDIA GeForce, at GE var fuldt integreret i en grafikchip. Bliver døbt T&L af NVIDIA marketing.

I årenes løb og ankomsten af ​​Shaders er Geometry Engine som et stykke hardware blevet fuldstændig udskiftet, og nu er det Shader Units, der tager sig af det. Denne ændring skete fra DirectX 10, da Geometry Engine som hardware forsvandt fra NVIDIA og AMD GPU'er, selvom dets betydning for nylig er blevet taget af en ny type enhed, der er inkluderet i de mest avancerede arkitekturer, og om det, er det, vi vil tale om i denne artikel.

Den primitive montør

Hjørner Primitivas Fragmentos

Elementer i en tredimensionel spilscene gengives ved hjælp af trekanter til at sammensætte de forskellige elementer i scenen, der består af hjørner. Nu er den første fase af den grafiske pipeline, efter at kommandoprocessoren har læst skærmlisten, Vertex Shader, og dens navn skyldes, at det, det gør, er at arbejde med hjørner, og det gør det ikke med primitiver eller trekanter, så uafhængige .

Det er en enhed kaldet Primitive Assembler, der har ansvaret for at forbinde disse hjørner, ikke kun for at skabe trekanter, men for at rekonstruere de forskellige modeller, der udgør scenen ved at forbinde deres forskellige hjørner. Primitive Assembler er et fast funktionsstykke i alle GPU'er, der udfører denne funktion automatisk uden behov for kodedeltagelse på skærmlisten. Almindeligt og enkelt, alt, hvad der kører på Vertex Shader -scenen inden for 3D -rørledningen, sendes til Primitive Assembler og derfra til den næste proces i fasen.

Tesselation

I tilfælde af at der er en tessellationsenhed i GPU'en, som er ansvarlig for at opdele hjørnerne, kører Primitive Assembler lige efter tessellationsprocessen, da den nye konfiguration af hjørnerne kræver andre fagforeningsberegninger end de hjørner, der udgør forskellige elementer i scenen.

Clipper og fjernelse af overflødig geometri

Culling Geometri Engine

I en tredimensionel scene er der en masse grafiske primitiver eller trekanter i scenen. Imidlertid er ikke alle dem synlige for spilleren i hver ramme, og derfor er det nødvendigt at kassere al den ikke-synlige geometri i rammen inden rasteriseringsfasen. Da hvert toppunkt, der ikke ses, men som ikke kasseres, er et, der senere vil blive rasteriseret, struktureret, og selvom det senere bliver kasseret, fordi der er en anden pixel med højere prioritet ved tegning.

Grunden? Husk, at inden for den traditionelle 3D -pipeline udføres en Vertex Shader for hvert toppunkt i scenen, men en Pixel Shader for hvert toppunkt og antallet af pixels pr. Trekant er normalt en størrelsesorden større. Derfor er det vigtigt at udelukke geometri, der ikke er synlig i scenen. Til dette bruges to algoritmer:

  • Den første registrerer hjørnerne uden for spillerens synsfelt og kaldes View Frustum Culling.
  • Det andet eliminerer i stedet dem, der er inden for synsfeltet, men som er skjult af andre større og tættere elementer og kaldes Back Face Culling.

Nu kan Culling-processen også udføres gennem en fast funktion, og hvad den gør er helt at fjerne trekanterne og endda ikke-synlige objekter. Men hvad sker der, når et objekt er delvist synligt? Afhængigt af hvordan hardwaren er implementeret, eliminerer den det ikke eller fjerner objektet fuldstændigt.

Hvad er Geometry Engine i en nuværende GPU?

LOD Mesh Shading Geometri Engine

Når problemerne i Primitive Assembler og Clipper er blevet forklaret, skal vi tale om, hvad Geometry Engine er, hvilket ikke er andet end et nyt stykke hardware, der samler de samme muligheder som Primitive Assembler og Clipper, men med en større præcision. Da den har evnen til at eliminere overflødig geometri, men på toppunktsniveau. Det betyder, at hvis et objekt er delvist uden for skærmen eller ikke er helt skjult, hvad det gør, er at fjerne de ikke-synlige hjørner og genopbygge kun den synlige del.

Den anden nytteværdi af Geometry Engine har at gøre med oprettelsen i detaljeringsniveauet for objekterne i scenen, hvor disse har forskellige detaljeringsniveauer, detaljeringsniveauer eller LOD på engelsk, afhængigt af afstanden. Geometri-motoren har evnen til intelligent at fjerne ikke-synlige hjørner baseret på afstand og dermed bevare objektets oprindelige form. Tænk på det som en tessellation omvendt, hvor du i stedet for at øge antallet af hjørner for at generere detaljer, er at reducere dem.

Dette er også vigtigt i lyset af over-tessellationsproblemet, det skal tages i betragtning, at når hjørnerne er tessellerede, har GPU'en ikke bevis på deres reelle position i rummets rum, så der opstår et problem, som er over-tessellationen. Hvilket er, at GPU’en beregner flere hjørner i objekter i den afstand, der ikke ses, men hvis data er der. Geometri -motoren, der har adgang til informationerne om scenens geometri, kan let fjerne dem. Lad os ikke glemme, at den traditionelle Clipper kun fjerner det, der er ude af billedet eller skjult.

Geometry Engine i den nye DX12 Ultimate pipeline

DX12 Ultimate

Med DirectX 12 Ultimate ændres delen af ​​3D -rørledningen før rasterisering fuldstændigt, da en god del af funktionerne går fra at blive udført gennem en fast funktion til at gøre det i Shader -enhederne i GPU'en. For eksempel vil tesselleringen nå et punkt, der vil ophøre med at blive udført i en fast funktionsenhed for at passere til enhederne, og derfor vil denne enhed forsvinde.

I tilfælde af Geometry Engine forsvinder dette ikke, men det er den eneste, der har adgang til oplysningerne om, hvordan hjørnerne er forbundet med hinanden. Enhver algoritme, der involverer adgang til listen over scenegeometri, betyder, at man skal gå gennem Geometry Engine, som er den, der styrer listen over hjørner og deres forhold til hinanden.

Når vi ser fremad, er en af ​​de ting, vi skal se, oprettelsen af ​​BVH -strukturer til Ray Tracing fra GPU'en, det stykke hardware, der vil udvikle sig til denne opgave, er Geometry Engine. Som i dag har adgang til L2 -cachen i GPU'en, hvor informationerne om hjørnerne gemmes midlertidigt. Mængden af ​​hukommelse inde i GPU'en forventes at stige betydeligt i de følgende år.