Geometriamoottori pelien GPU: ssa: hyödyllisyys ja käyttö

Geometriamoottori pelien grafiikkasuorittimissa

Kolmiulotteinen grafiikka on ollut kanssamme kaksi vuosikymmentä ja sen myötä myös grafiikkasuorittimet, jotka ovat vastuussa niiden tuottamisesta ja lähettämisestä monitoriemme näyttöön. Nykyään ne ovat erittäin monimutkaisia ​​kappaleita, jotka koostuvat erilaisista elementeistä, jotkut uudet, toiset ovat olleet sisällä vuosia. Tässä artikkelissa käsitellään Geometria -moottoria.

Reaaliaikaisen grafiikan edetessä myös grafiikkasuorittimet ja sen myötä uudet ongelmat näyttävät ratkaistulta tai vanhat suurennetaan. Tämä tarkoittaa, että vanhat ratkaisut eivät ole enää tehokkaita ja uusia on luotava. Uuden sukupolven grafiikka ei perustu ainoastaan ​​Ray Tracing -järjestelmään, vaan myös kohtauksen geometrian huomattavaan kasvuun. Tässä Geometry Engine tulee, olennainen osa parannettavaksi GPU tehokkuutta tässä uudessa paradigmassa.

Hieman historiaa hämmennyksen poistamiseksi

kuolla

Geometriamoottori tai geometriamoottori viittasi historiallisesti laitteistoon, joka vastaa kohtausgeometrian käsittelyprosessien suorittamisesta ennen rasteroitumista. Toisin sanoen ennen kuin kolmiulotteisen kohtauksen muodostavat kolmiot on muunnettu pikseleiksi.

Ensimmäinen Geometria -moottori oli Jim Clarkin aivoriihi 1980 -luvun alussa, ja se oli legendaarisen piigrafiikan alku. Tämän innovaation ansiosta 3D -kohtauskäsittely oli mahdollista siirtää minitietokoneista työasemiin, jotka olivat murto -osa edellisen koosta ja kustannuksista.

Vasta 90 -luvun lopulla 3D -pelit alkoivat tulla suosittuja, mutta ensimmäisistä 3D -korteista puuttui Geometry Engine ja ne perustuivat prosessori voimaa laskea kohtausgeometria. Se oli vasta ensimmäisen PC -julkaisun jälkeen NVIDIA GeForce, että GE oli täysin integroitu grafiikkapiiriin. NVIDIA -markkinointi kutsuu sitä T&L: ksi.

Vuosien ja Shadersin saapumisen myötä Geometry Engine on vaihdettu kokonaan laitteistoksi, ja nyt Shader -yksiköt huolehtivat siitä. Tämä muutos tapahtui DirectX 10: stä, kun Geometry Engine laitteistona katosi NVIDIA: sta ja AMD GPU: t, vaikka viime aikoina sen merkityksen on ottanut uudenlainen yksikkö, joka sisältyy edistyneimpiin arkkitehtuureihin, ja siitä puhumme tässä artikkelissa.

Alkukokoaja

Vertices Primitivas Fragmentos

Kolmiulotteisen pelikohtauksen elementit renderöidään kolmioiden avulla säveltämään eri kohtauksia, jotka koostuvat kärkipisteistä. Graafisen putkilinjan ensimmäinen vaihe sen jälkeen, kun komentoprosessori on lukenut näyttöluettelon, on Vertex Shader, ja sen nimi johtuu siitä, että se toimii pisteiden kanssa eikä se tee sitä primitiivien tai kolmioiden kanssa niin itsenäisesti .

Se on yksikkö nimeltä Primitive Assembler, joka vastaa näiden kärkipisteiden yhdistämisestä paitsi kolmioiden luomiseksi, myös rekonstruoimalla kohtauksen muodostavat eri mallit yhdistämällä niiden eri pisteet yhteen. Primitiivinen kokoonpano on kiinteä toiminto kaikissa GPU: ssa, jotka suorittavat tämän toiminnon automaattisesti ilman koodin osallistumista näyttöluetteloon. Tavallinen ja yksinkertainen, kaikki 3D -putkilinjan Vertex Shader -vaiheessa suoritettava lähetetään Primitive Assemblerille ja sieltä vaiheen seuraavaan prosessiin.

Tesselaatio

Jos GPU: ssa on tessellaatioyksikkö, joka vastaa pisteiden jakamisesta osiin, Primitive Assembler suoritetaan heti tessellaatioprosessin jälkeen, koska pisteiden uusi kokoonpano vaatii muita liittolaskelmia kuin ne pisteet, jotka muodostavat kohtauksen eri elementtejä.

Clipper ja ylimääräisen geometrian poistaminen

Geometriamoottori

Kolmiulotteisessa näkymässä on paljon graafisia primitiivejä tai kolmioita. Kaikki eivät kuitenkaan näy pelaajalle kussakin kehyksessä, ja siksi on poistettava kustakin kehyksestä kaikki näkymättömät geometriat ennen rasterointivaihetta. Koska jokainen kärkipiste, jota ei näy, mutta jota ei hylätä, on myöhemmin rasteroitava, kuvioitu ja vaikka se myöhemmin hylätään, koska piirustuksessa on toinen korkeampi prioriteetti.

Syy? Muista, että perinteisessä 3D -putkilinjassa Vertex Shader suoritetaan kullekin kohtauksen kulmakohdalle, mutta Pixel Shader kullekin pisteelle ja pikselien määrä kolmioa kohti on yleensä suuruusluokkaa suurempi. Siksi on tärkeää sulkea pois geometria, joka ei näy näytössä. Tätä varten käytetään kahta algoritmia:

  • Ensimmäinen tunnistaa pelaajan näkökentän ulkopuolella olevat kärkipisteet ja sitä kutsutaan View Frustum Cullingiksi.
  • Toinen poistaa sen sijaan ne, jotka ovat näkökentässä, mutta jotka ovat muiden suurempien ja lähempien elementtien piilossa ja jota kutsutaan selkäpuolen poistamiseksi.

Nyt Culling-prosessi voidaan suorittaa myös kiinteän toiminnon avulla, ja se poistaa kokonaan kolmiot ja jopa näkymättömät objektit. Mutta mitä tapahtuu, kun esine on osittain näkyvissä? Riippuen siitä, miten laitteisto on toteutettu, se ei poista sitä tai poista objektia kokonaan.

Mikä on geometrian moottori nykyisessä grafiikkasuorittimessa?

LOD Mesh Shading Geometry Engine

Kun Primitive Assemblerin ja Clipperin ongelmat on selitetty, meidän on puhuttava siitä, mitä Geometry Engine on, joka on vain uusi laitteisto, joka yhdistää samat ominaisuudet kuin Primitive Assembler ja Clipper, mutta suurempi tarkkuus. Koska sillä on kyky poistaa tarpeeton geometria, mutta pisteiden tasolla. Tämä tarkoittaa, että jos kohde on osittain näytön ulkopuolella tai sitä ei ole täysin piilotettu, se poistaa näkymättömät kärkipisteet ja rakentaa uudelleen vain näkyvän osan.

Geometriamoottorin toinen apuohjelma liittyy kohtauksen kohteiden luomiseen yksityiskohtien tasossa, jossa niillä on erilaiset yksityiskohdat, tasot yksityiskohdat tai englanniksi LOD etäisyyden mukaan. Geometriamoottori pystyy älykkäästi poistamaan näkymättömät pisteet etäisyyden perusteella ja säilyttämään siten kohteen alkuperäisen muodon. Ajattele sitä käänteisenä tessellaationa, jossa sen sijaan, että lisäät pisteiden määrää yksityiskohtien luomiseksi, vähennät niitä.

Tämä on tärkeää myös ylikuormitusongelman edessä, ja on otettava huomioon, että kun kärkipisteet tesselloidaan, GPU: lla ei ole todisteita niiden todellisesta sijainnista kehystilassa, joten syntyy ongelma, joka yliarvostusta. GPU laskee enemmän pisteitä etäisyydellä oleviin kohteisiin, joita ei näy, mutta joiden tiedot ovat siellä. Geometriamoottori, jolla on pääsy kohtauksen geometrian tietoihin, voi helposti poistaa ne. Älkäämme unohtako, että perinteinen Clipper poistaa vain sen, mikä on pois kuvasta tai piilotettu.

Geometriamoottori uudessa DX12 Ultimate -putkilinjassa

DX12 Ultimate

DirectX 12 Ultimate -järjestelmässä 3D -putkilinjan osa ennen rasterointia muuttuu kokonaan, koska suuri osa toiminnoista siirtyy suoritetusta kiinteän toiminnon kautta suorittamiseen GPU: n Shader -yksiköissä. Esimerkiksi tessellaatio saavuttaa kohdan, joka lakkaa suorittamasta kiinteässä toimintoyksikössä siirtyäkseen mainituille yksiköille ja siksi mainittu yksikkö katoaa.

Geometriamoottorin tapauksessa tämä ei katoa, mutta se on ainoa, jolla on pääsy tietoihin siitä, miten kärkipisteet on kytketty toisiinsa. Mikä tahansa algoritmi, joka sisältää pääsyn kohtausgeometrian luetteloon, tarkoittaa sitä, että on käytävä läpi geometrinen moottori, joka ohjaa kärkipisteluetteloa ja niiden suhteita toisiinsa.

Tulevaisuutta ajatellen yksi asioista, joita aiomme nähdä, on BVH -rakenteiden luominen Ray Tracingille GPU: sta, laitteisto, joka kehittyy tätä tehtävää varten, on Geometry Engine. Tällä hetkellä on pääsy GPU: n L2 -välimuistiin, jossa kärkipisteiden tiedot tallennetaan väliaikaisesti. GPU: n muistin määrän odotetaan kasvavan huomattavasti seuraavien vuosien aikana.