Grafiikkaputki - Graphics pipeline

Vuonna tietokonegrafiikkaa , eli tietokonegrafiikkaa putki , tekee putki  tai yksinkertaisesti  grafiikka putki , on käsitteellinen malli, joka kuvaa vaiheet a grafiikkajärjestelmä tarvitsee tehdä on  tehdä 3D kohtaus 2D näyttö. Kun 3D -malli on luotu, esimerkiksi videopelissä tai muussa 3D -tietokoneanimaatiossa, grafiikkaputki on prosessi, jolla tämä 3D -malli muutetaan tietokoneen näyttämäksi. Koska tähän toimenpiteeseen tarvittavat vaiheet riippuvat käytetystä ohjelmistosta ja laitteistosta sekä halutuista näyttöominaisuuksista, ei ole olemassa universaalia grafiikkaputkea, joka soveltuisi kaikkiin tapauksiin. Kuitenkin grafiikkasovellusten ohjelmointirajapinnat (API) , kuten Direct3D ja OpenGL, luotiin samanlaisten vaiheiden yhdistämiseksi ja tietyn laitteistokiihdyttimen grafiikkaputken ohjaamiseksi . Nämä sovellusliittymät tiivistävät taustalla olevan laitteiston ja estävät ohjelmoijaa kirjoittamasta koodia manipuloidakseen grafiikkalaitteiston kiihdyttimiä ( AMD / Intel / NVIDIA jne.).

Grafiikkaputken mallia käytetään yleensä reaaliaikaisessa renderöinnissä. Usein suurin osa putkilinjan vaiheista toteutetaan laitteistossa, mikä mahdollistaa erityiset optimoinnit . Termiä "putkilinja" käytetään samassa merkityksessä kuin prosessoreiden putkilinjaa: putkilinjan yksittäiset vaiheet kulkevat rinnakkain niin kauan kuin missä tahansa vaiheessa on tarvittava.

Konsepti

3D putki tarkoitetaan yleensä yleisin tietokoneen 3d nimeltään 3D polygoni-mallinnus , erillinen raytracing ja raycasting . Uudelleenlähetyksessä säde on peräisin kameran sijaintipaikasta, ja jos kyseinen säde osuu pintaan, sen pinnan väri ja valaistus , jossa säteen osuma lasketaan. 3D -monikulmioesityksessä tapahtuu päinvastoin - kameran näkyvyysalue lasketaan ja sitten säteet luodaan jokaisen pinnan jokaisesta osasta kameran näkökulmasta ja jäljitetään kameraan.

Rakenne

Grafiikkaputki voidaan jakaa kolmeen pääosaan: Sovellus, Geometria ja Rasterointi.

Grafiikkaputki 2 fi.svg

Sovellus

Sovellusvaihe suoritetaan pääprosessorin ( CPU ) ohjelmistolla. Sovellusvaiheen aikana kohtaukseen tehdään muutoksia tarpeen mukaan, esimerkiksi käyttäjän vuorovaikutuksella syöttölaitteiden avulla tai animaation aikana. Uusi kohtaus kaikkine alkeineen , yleensä kolmioineen, viivoineen ja pisteineen, siirtyy sitten seuraavaan vaiheeseen.

Nykyaikaisessa pelimoottorissa , kuten Unity , ohjelmoija käsittelee lähes yksinomaan sovellusvaihetta ja käyttää korkean tason kieltä, kuten C# , toisin kuin C tai C ++ .

Esimerkkejä tehtävistä, joita tyypillisesti tehdään sovelluksen vaiheessa ovat törmäyksen havaitseminen , animaatio, morphing, ja kiihtyvyys tekniikoita käyttäen spatiaalista osa-järjestelmiä, kuten Quadtrees tai Octrees . Niitä käytetään myös vähentämään tiettynä aikana tarvittavan päämuistin määrää. Nykyaikaisen tietokonepelin "maailma" on paljon suurempi kuin se, joka mahtuu muistiin kerralla.

Geometria

Geometriavaihe ( Geometry -putkilinjalla ), joka vastaa suurimmasta osasta operaatioita monikulmioilla ja niiden kärkipisteillä ( Vertex -putkilinjalla ), voidaan jakaa seuraaviin viiteen tehtävään. Se riippuu siitä, miten nämä tehtävät on järjestetty varsinaisiksi rinnakkaisiksi vaiheiksi.

Geometry -putki fi.svg

Määritelmät

Vertex (monikko: kärjet) on piste maailmassa. Monia pisteitä käytetään pintojen liittämiseen. Erikoistapauksissa pistepilvet piirretään suoraan, mutta tämä on edelleen poikkeus.

Kolmio on yleisin geometrinen primitiivi tietokonegrafiikan. Sen määrittävät sen kolme kärkeä ja normaali vektori - normaali vektori osoittaa kolmion etupuolen ja on vektori, joka on kohtisuorassa pintaan nähden. Kolmio voidaan varustaa värillä tai tekstuurilla (kuva "liimattu" sen päälle). Kolmioita pidetään parempina kuin suorakulmioita, koska kolme pistettä ovat aina yhdellä tasolla .

Maailman koordinaattijärjestelmä

Maailman koordinaattijärjestelmä on koordinaattijärjestelmä, johon virtuaalimaailma luodaan. Tämän pitäisi täyttää muutamia ehtoja, jotta seuraavaa matematiikkaa voidaan soveltaa helposti:

  • Sen on oltava suorakulmainen suorakulmainen koordinaattijärjestelmä, jossa kaikki akselit on skaalattu tasaisesti.

Miten koordinaattijärjestelmän yksikkö määritellään, jää kehittäjän tehtäväksi. Onko järjestelmän yksikkövektori siis todellisuudessa yhden metrin tai Ångströmin mukainen, riippuu sovelluksesta.

Esimerkki: Jos aiomme kehittää lentosimulaattorin, voimme valita maailman koordinaattijärjestelmän siten, että lähtöpaikka on maan keskellä ja yksikön arvoksi asetetaan yksi metri. Lisäksi helpottaaksemme viittaamista todellisuuteen määrittelemme, että X -akselin tulisi leikata päiväntasaaja nollameridiaanilla ja Z -akseli kulkee napojen läpi. Oikeakätisessä järjestelmässä Y-akseli kulkee 90 ° itäisen pituuspiirin läpi (jossain Intian valtamerellä ). Nyt meillä on koordinaattijärjestelmä, joka kuvaa jokaisen maapallon pisteen kolmiulotteisilla suorakulmaisilla koordinaateilla . Tässä koordinaattijärjestelmässä mallinnamme nyt maailman, vuorten, laaksojen ja valtamerien periaatteita.
Huomautus: Tietokonegeometrian lisäksi maapallolle käytetään maantieteellisiä koordinaatteja eli leveys- ja pituuspiirejä sekä korkeuksia merenpinnan yläpuolella. Arvioitu muuntaminen - jos ei oteta huomioon sitä tosiasiaa, että maa ei ole tarkka pallo - on yksinkertainen:
jossa R = maan säde [6.378.137m], leveys = leveysaste, pituus = pituusaste, hasl = korkeus merenpinnan yläpuolella.
Kaikki seuraavat esimerkit pätevät oikeakätisessä järjestelmässä. Jos kyseessä on vasenkätinen järjestelmä, merkkejä on ehkä vaihdettava.

Kohtauksen sisältämät esineet (talot, puut, autot) on usein suunniteltu omaan objekti- koordinaatistoonsa (jota kutsutaan myös mallikoordinaattijärjestelmäksi tai paikalliseksi koordinaattijärjestelmäksi) yksinkertaisemman mallinnuksen vuoksi. Jotta nämä objektit voidaan määrittää koko kohtauksen maailman koordinaattijärjestelmän tai maailmanlaajuisen koordinaattijärjestelmän koordinaateille, objektikoordinaatit muunnetaan kääntämällä, kiertämällä tai skaalaamalla. Tämä tehdään kertomalla vastaavat muunnosmatriisit . Lisäksi yhdestä esineestä voidaan muodostaa useita eri tavalla muunnettuja kopioita, esimerkiksi metsä puusta; Tätä tekniikkaa kutsutaan instanssiksi.

Jotta voisimme sijoittaa lentokonemallin maailmaan, määritämme ensin neljä matriisia. Koska työskentelemme kolmiulotteisessa avaruudessa, tarvitsemme laskelmissamme neljäulotteisia homogeenisia matriiseja .

Ensinnäkin tarvitsemme kolme kiertomatriisia , nimittäin yhden kullekin lentokoneen kolmelle akselille (pystyakseli, poikittaisakseli, pitkittäisakseli).

X -akselin ympärillä (määritellään yleensä pitkittäisakseliksi kohteen koordinaattijärjestelmässä)

Y -akselin ympärillä (määritellään yleensä poikittaisakseliksi objektikoordinaattijärjestelmässä)

Z -akselin ympärillä (yleensä määritetty pystysuoraksi akseliksi objektikoordinaattijärjestelmässä)

Käytämme myös käännöksen matriisi, joka liikkuu lentokoneen haluttuun kohtaan maailmassamme: .

Huomautus : Yllä olevat matriisit on siirretty suhteessa artikkelin kiertomatriisiin . Katso selitys miksi.

Nyt voisimme laskea lentokoneen pisteiden sijainnin maailman koordinaateissa kertomalla jokainen piste peräkkäin näillä neljällä matriisilla. Koska matriisin kertominen vektorilla on melko kallista (aikaa vievää), yleensä siirrytään toiseen polkuun ja ensin kerrotaan neljä matriisia yhteen. Kahden matriisin kertolasku on vielä kalliimpaa, mutta se on suoritettava vain kerran koko objektille. Kertolaskut ja ovat vastaavia. Tämän jälkeen tuloksena olevaa matriisia voitaisiin soveltaa pisteisiin. Käytännössä pisteiden kertomista ei kuitenkaan vielä käytetä, mutta kameramatriisit - katso alla - määritetään ensin.

Tässä esimerkissä ylhäältä, kuitenkin, käännös on määritettävä hieman eri tavalla, koska yhteinen merkitys ylös - lukuun ottamatta pohjoisnavan - ei vastaa meidän määritelmän positiivisen Z-akselin ja sen vuoksi malli on myös käännetyssä maan keskipisteen ympärillä: Ensimmäinen askel työntää mallin alkuperän oikeaan korkeuteen maan pinnan yläpuolelle, minkä jälkeen sitä käännetään leveys- ja pituusasteiden mukaan.

Matriisien käyttöjärjestys on tärkeä, koska matriisin kertolasku ei ole kommutoiva . Tämä pätee myös kolmeen kiertoon, kuten esimerkki osoittaa: Piste (1, 0, 0) sijaitsee X-akselilla, jos sitä pyöritetään ensin 90 ° X- ja sitten Y-akselin ympäri , se päätyy Z -akselille (pyöriminen X -akselin ympäri ei vaikuta akselin pisteeseen). Jos toisaalta yksi pyörii ensin Y -akselin ja sitten X -akselin ympäri, tuloksena oleva piste sijaitsee Y -akselilla. Sekvenssi itsessään on mielivaltainen, kunhan se on aina sama. Sekvenssi, jossa on x, sitten y, sitten z (rulla, nousu, suunta) on usein intuitiivisin, koska pyöriminen saa kompassin suunnan samaan suuntaan "nenän" kanssa.

Näiden matriisien määrittämiseen on myös kaksi tapaa riippuen siitä, haluatko käyttää sarake- tai rivivektoreita. Eri grafiikkakirjastoilla on täällä erilaiset mieltymykset. OpenGL suosii sarakevektoreita, DirectX -rivivektoreita. Päätös määrittää, miltä puolelta pistevektorit kerrotaan muunnosmatriiseilla. Pylväsvektoreille kertolasku suoritetaan oikealta, eli missä v out ja v in ovat 4x1 sarakevektoria. Matriisien ketjutus tapahtuu myös oikealta vasemmalle, eli esimerkiksi ensin pyöriessä ja sitten vaihdettaessa.

Rivivektoreiden tapauksessa tämä toimii täsmälleen päinvastoin. Kertolasku tapahtuu nyt vasemmalta kuten 1x4-riviset vektorit, ja ketjutus tapahtuu silloin, kun myös ensin pyöritetään ja siirrytään. Yllä esitetyt matriisit ovat voimassa toisessa tapauksessa, kun taas sarakevektoreiden matriisit transponoidaan. Sääntö on voimassa, mikä vektorien kertomiseen tarkoittaa, että voit vaihtaa kertolaskua siirtämällä matriisin.

Mielenkiintoista tässä matriisiketjutuksessa on, että jokainen tällainen muunnos määrittelee uuden koordinaattijärjestelmän. Tätä voidaan pidentää halutulla tavalla. Esimerkiksi lentokoneen potkuri voi olla erillinen malli, joka sijoitetaan sitten kääntämällä lentokoneen nenään. Tämä käännös tarvitsee vain kuvata siirtymistä mallikoordinaattijärjestelmästä potkurin koordinaattijärjestelmään. Koko lentokoneen piirtämiseksi ensin määritetään ilma -aluksen muunnosmatriisi, pisteet muunnetaan ja sitten potkurimallimatriisi kerrotaan lentokoneen matriisiin ja sitten potkuripisteet muunnetaan.

Tällä tavalla laskettua matriisia kutsutaan myös maailmanmatriisiksi . Se on määritettävä jokaiselle maailman objektille ennen renderöintiä. Sovellus voi tehdä muutoksia tähän, esimerkiksi muuttaa lentokoneen sijaintia nopeuden mukaan jokaisen kehyksen jälkeen.

Kameran muutos

Image
Vasen: virtuaalisen katseluohjelman (kameran) sijainti ja suunta käyttäjän määrittelemänä. Oikea: Kohteiden sijoittaminen kameran muutoksen jälkeen. Vaaleanharmaa alue on näkyvä tilavuus.

Kohde määrittelee esineiden lisäksi myös virtuaalikameran tai katseluohjelman, joka ilmaisee näkymän sijainnin ja suunnan, johon näyte renderoidaan. Kohtaus muuttuu siten, että kamera on lähtökohdassaan Z -akselia pitkin. Tuloksena olevaa koordinaattijärjestelmää kutsutaan kameran koordinaattijärjestelmäksi ja muunnosta kameran muunnokseksi tai View Transformationiksi .

Näkymämatriisi määritetään yleensä kameran asennosta, kohdepisteestä (missä kamera näyttää) ja "ylös vektorista" ("ylös" katsojan näkökulmasta). Kolme ensimmäistä apuvektoria vaaditaan:
Zaxis = normal(cameraPosition - cameraTarget)
Xaxis = normal(cross(cameraUpVector, Zaxis))
Yaxis = cross(Zaxis, Xaxis )
Normaalilla (v) = vektorin v normalisointi;
risti (v1, v2) = v1: n ja v2: n ristitulo .
Lopuksi matriisi:
pisteellä (v1, v2) = pisteiden tulo v1 ja v2.

Projektio

3D projektio vaihe muuntaa näkymä taltio kuution ulkopuolelle koordinaatit (-1, -1, 0) ja (1, 1, 1); Joskus käytetään myös muita tavoitemääriä. Tätä vaihetta kutsutaan projektioksi , vaikka se muuntaa tilavuuden toiseksi tilavuudeksi, koska syntyneet Z-koordinaatit eivät tallennu kuvaan, vaan niitä käytetään vain Z-puskuroinnissa myöhemmässä rasterointivaiheessa. On perspektiivikuva , joka on keskeinen uloke käytetään. Esitettävien kohteiden määrän rajoittamiseksi käytetään kahta leikkuutasoa. Visuaalinen tilavuus on siis katkaistu pyramidi ( frustum ). Rinnakkais- tai ortogonaalista projisointia käytetään esimerkiksi teknisissä esityksissä, koska sen etuna on, että kaikki objektitilan rinnakkaisuudet ovat myös yhdensuuntaisia ​​kuvatilassa ja että pinnat ja tilavuudet ovat samankokoisia riippumatta etäisyydestä katsojasta . Kartat käyttävät esimerkiksi ortogonaalista heijastusta (ns. Ortofoto ), mutta maisemakuvia ei voida käyttää tällä tavalla - vaikka ne voidaan teknisesti renderoida, ne näyttävät niin vääristyneiltä, ​​ettemme voi käyttää niitä. Perspektiivikartoitusmatriisin laskentakaava on seuraava:

Jossa h = pinnasänky (fieldOfView / 2.0) (kameran aukon kulma); w = h / formatRatio (kohdekuvan kuvasuhde); lähellä = Pienin näkyvissä oleva etäisyys; far = Pisin näkyvyys.

Pienin ja suurin etäisyys on annettava tässä, koska toisaalta tämä etäisyys on jaettu kohtauksen skaalauksen saavuttamiseksi (kauempana olevat kohteet ovat pienempiä perspektiivikuvassa kuin lähellä olevat kohteet) ja toisaalta skaalata Z-arvot alueelle 0..1 Z-puskurin täyttämiseksi . Tämän puskurin resoluutio on usein vain 16 bittiä, minkä vuoksi lähi- ja kauko -arvot on valittava huolellisesti. Liian suuri ero lähellä ja kaukana -arvon välillä johtaa ns. Z-taisteluun Z-puskurin alhaisen resoluution vuoksi. Kaavasta voidaan myös nähdä, että lähellä oleva arvo ei voi olla 0, koska tämä piste on projektion keskipiste. Tässä vaiheessa ei ole kuvaa.

Täydellisyyden vuoksi rinnakkaisprojektion kaava (ortogonaalinen projektio):

w = kohdekuution leveys (mitat maailman koordinaattijärjestelmän yksiköissä); H = w / formatRatio (kohdekuvan kuvasuhde); lähellä = Pienin näkyvissä oleva etäisyys; far = Pisin näkyvyys.

Tehokkuussyistä kamera ja heijastusmatriisi yhdistetään yleensä muunnosmatriisiksi siten, että kameran koordinaattijärjestelmä jätetään pois. Tuloksena oleva matriisi on yleensä sama yhdelle kuvalle, kun taas maailman matriisi näyttää erilaiselta kullekin objektille. Käytännössä näkymä ja projisointi lasketaan siis esiasetuksella siten, että vain maailmanmatriisia on mukautettava näytön aikana. Kuitenkin monimutkaisemmat muunnokset, kuten pisteiden sekoittaminen, ovat mahdollisia. Vapaasti ohjelmoitavat geometrian varjostimet, jotka muuttavat geometriaa, voidaan myös suorittaa.

Todellisessa renderointivaiheessa lasketaan maailmanmatriisi * kameramatriisi * -projisointimatriisi ja sitä sovelletaan lopulta jokaiseen pisteeseen. Siten kaikkien kohteiden pisteet siirretään suoraan näytön koordinaatistoon (ainakin melkein akselien arvoalue on edelleen -1..1 näkyvälle alueelle, katso osio "Ikkunanäkymä-muunnos").

Valaistus

Usein kohtaus sisältää valonlähteitä, jotka on sijoitettu eri paikkoihin, jotta esineiden valaistus näyttää realistisemmalta. Tässä tapauksessa tekstuurin vahvistustekijä lasketaan kullekin pisteelle valonlähteiden ja vastaavaan kolmioon liittyvien materiaalin ominaisuuksien perusteella. Myöhemmässä rasterointivaiheessa kolmion kärkipisteet interpoloidaan sen pinnan yli. Yleisvalaistus (ympäristön valo) kohdistetaan kaikkiin pintoihin. Se on kohtauksen hajanainen ja siten suunnasta riippumaton kirkkaus. Aurinko on suunnattu valonlähde, jonka voidaan olettaa olevan äärettömän kaukana. Auringon pintaan aiheuttama valaistus määritetään muodostamalla suuntavektorin skalaarituote auringosta ja pinnan normaali vektori. Jos arvo on negatiivinen, pinta on aurinkoon päin.

Leikkaus

Image
Primitiivien leikkaaminen kuutiota vasten. Sininen kolmio hylätään, kun oranssi kolmio leikataan, jolloin syntyy kaksi uutta kärkeä
Image
Frustum

Vain primitiivit, jotka ovat visuaalisen äänenvoimakkuuden sisällä, on todella rapistettava (piirrettävä). Tämä visuaalinen tilavuus määritellään frustumin sisäpuoleksi, pyramidin muotoiseksi muodoksi, jonka yläosa on katkaistu. Primitiivit, jotka ovat täysin visuaalisen äänenvoimakkuuden ulkopuolella, hylätään; Tätä kutsutaan frustum cullingiksi . Muita teurastusmenetelmiä, kuten takapinnan leikkaus, joka vähentää harkittavien primitiivien määrää, voidaan teoriassa suorittaa missä tahansa grafiikkaputken vaiheessa. Primitiivit, jotka ovat vain osittain kuution sisällä, on leikattava kuutiota vasten. Edellisen projisointivaiheen etuna on, että leikkaus tapahtuu aina samaa kuutiota vastaan. Vain visuaalisen äänenvoimakkuuden sisällä olevat, mahdollisesti leikatut primitiivit välitetään viimeiseen vaiheeseen.

Ikkuna-näkymän muutos

Image
Ikkuna-näkymä-muunnos

Jotta kuva voidaan lähettää mihin tahansa näytön kohdealueeseen (näkymäporttiin), on käytettävä toista muunnosta, ikkuna-näkymämuunnosta . Tämä on muutos, jota seuraa skaalaus. Tuloksena olevat koordinaatit ovat lähtölaitteen laitekoordinaatit. Näkymä sisältää 6 arvoa: ikkunan korkeus ja leveys pikseleinä, ikkunan vasen yläkulma ikkunakoordinaateissa (yleensä 0, 0) ja Z: n minimi- ja maksimiarvot (yleensä 0 ja 1).

Muodollisesti:
Jossa vp = Viewport; v = Piste projektion jälkeen

Nykyaikaisissa laitteistoissa suurin osa geometrian laskentavaiheista suoritetaan kärkien varjostimessa . Tämä on periaatteessa vapaasti ohjelmoitava, mutta yleensä suorittaa ainakin pisteiden muunnoksen ja valaistuslaskennan. DirectX -ohjelmointirajapinnassa mukautetun pistevarjostimen käyttö on välttämätöntä versiosta 10 alkaen, kun taas vanhemmissa versioissa on edelleen tavallinen varjostin.

Rasterointi

Rasterointivaihe on viimeinen vaihe ennen fragmenttien varjostinputkea, jolla kaikki primitiivit rasteroidaan . Rasterointivaiheessa jatkuvista primitiiveistä luodaan erillisiä fragmentteja.

Tässä grafiikkaputken vaiheessa ruudukkopisteitä kutsutaan myös fragmenteiksi paremman erottamiskyvyn vuoksi. Jokainen fragmentti vastaa yhtä pikseliä kehyspuskurissa ja tämä vastaa yhtä näytön pikseliä. Ne voivat olla värillisiä (ja mahdollisesti valaistuja). Lisäksi päällekkäisten monikulmioiden tapauksessa on tarpeen määrittää näkyvä, lähempänä tarkkailijafragmenttia. Tähän ns. Piilotetun pinnan määritykseen käytetään yleensä Z-puskuria . Fragmentin väri riippuu näkyvän primitiivin valaistuksesta, tekstuurista ja muista materiaaliominaisuuksista, ja se interpoloidaan usein käyttämällä kolmion kärkiominaisuuksia. Jos mahdollista, fragmenttien varjostin (kutsutaan myös Pixel Shaderiksi ) suoritetaan rasterointivaiheessa jokaiselle objektin fragmentille. Jos fragmentti on näkyvissä, se voidaan nyt sekoittaa kuvassa jo olevien väriarvojen kanssa, jos käytetään läpinäkyvyyttä tai moninäytteenottoa. Tässä vaiheessa yhdestä tai useammasta fragmentista tulee pikseli.

Jotta estettäisiin se, että käyttäjä näkee primitiivien asteittaisen rasteroinnin, tapahtuu kaksinkertainen puskurointi. Rasterointi suoritetaan erityisellä muistialueella. Kun kuva on kokonaan rasteroitu, se kopioidaan kuvamuistin näkyvälle alueelle.

Käänteinen

Kaikki käytetyt matriisit ovat ei -yksittäisiä ja siten käänteisiä . Koska kahden ei -singulaarisen matriisin kertominen luo toisen ei -singulaarisen matriisin, koko muunnosmatriisi on myös käänteinen. Käänteistä vaaditaan maailmankoordinaattien laskemiseksi uudelleen näytön koordinaateista - esimerkiksi hiiren osoittimen sijainnin määrittämiseksi napsautettua kohdetta. Koska näytöllä ja hiirellä on kuitenkin vain kaksi ulottuvuutta, kolmas on tuntematon. Siksi säde heijastetaan kohdistimen asemaan maailmaan ja sitten määritetään tämän säteen leikkauskohda maailman monikulmioiden kanssa.

Shader

Vaiheita on 11, joista jokainen on lueteltu tässä.  Vertex -varjostin ja 3D -koodi ovat panos animaatioon ja muutokseen.  Toinen vaihe on rungon shader, tesselation ja domain shader.  Kolmas vaihe on geometrian varjostin.  Neljäs vaihe on perspektiivimuutos.  Viides vaihe on leikkaus ja takapinnan leikkaaminen.  Kuudes vaihe on kolmion rasterointi, joka antaa tekstuurikoordinaatit.  Seitsemäs vaihe, tekstuurivälimuisti, alkaa erikseen ja ottaa tekstuurit syötteeksi.  Seitsemäs vaihe ja tekstuurikoordinaatit siirtyvät 8. vaiheeseen, tekstuurisuodatukseen.  Kuudennesta vaiheesta ja 8. vaiheen tuotoksesta, texels, siirrytään yhdeksänteen vaiheeseen, varhaiseen Z- ja pikselivarjostukseen, joka käyttää myös pikselivarjostinta.  Kymmenes vaihe on Z-testi, alfa-sekoitus ja anti-aliasing.  Sitten 11. vaihe on jälkikäsittely, joka lähettää takaisin puskuriin.

Klassiset näytönohjaimet ovat edelleen suhteellisen lähellä grafiikkaputkea. GPU: n kasvavien vaatimusten myötä rajoitukset poistettiin vähitellen joustavuuden lisäämiseksi. Nykyaikaiset näytönohjaimet käyttävät vapaasti ohjelmoitavaa, varjostimen ohjaamaa putkilinjaa, joka mahdollistaa suoran pääsyn yksittäisiin käsittelyvaiheisiin. Pääprosessorin vapauttamiseksi lisäkäsittelyvaiheet on siirretty putkilinjaan ja grafiikkasuorittimeen.

Tärkeimmät varjoyksiköt ovat pisteiden , geometrian ja pikselien varjostimet .

Unified Shader on otettu käyttöön hyödyntää kaikissa yksiköissä. Tämä antaa sinulle yhden suuren varjostinyksikön. Tarvittaessa allas on jaettu eri varjostinryhmiin. Siksi varjostintyyppien tiukka erottaminen ei ole enää hyödyllistä.

On myös mahdollista käyttää niin sanottua compute-shader -laitetta suorittamaan kaikki laskelmat GPU: n grafiikan näytöstä. Etuna on, että ne kulkevat hyvin rinnakkain, mutta niillä on rajoituksia. Näitä yleisiä laskelmia kutsutaan myös yleiskäyttöiseksi grafiikkaprosessointiyksiköiksi tai lyhyesti GPGPU : ksi.

Katso myös

Lähteet

  • Tomas Akenine-Möller, Eric Haines: Reaaliaikainen renderöinti. AK Peters, Natick, Massa 2002, ISBN  1-56881-182-9 .
  • Michael Bender, Manfred Brill: Tietokonegrafiikka: ein anwendungsorientiertes Lehrbuch. Hanser, München 2006, ISBN  3-446-40434-1 .
  • Fischer, Martin (2011-07-04). Pixel-Fabrik. Wie Grafikchips Spielewelten auf den Schirm zaubern . c't Magazin für Computer Technik. Heise Zeitschriften Verlag. s. 180. ISSN  0724-8679 .

Viitteet

  1. ^ "Grafiikkaputki" . Microsoft . 30 toukokuu 2018 . Haettu 15. kesäkuuta 2015 .
  2. ^ "Luento: Grafiikkaputki ja animaatio" . Arkistoitu alkuperäisestä 7. joulukuuta 2017 . Haettu 15. kesäkuuta 2015 .
  3. ^ Lawrence, Jason (22. lokakuuta 2012). "3D Polygon Rendering Pipeline" ( PDF ) . web.archive.org . Arkistoitu (PDF) alkuperäisestä 29.12.2016 . Haettu 2019-09-19 .
  4. ^ Tomas Akenine-Möller, Eric Haines: Real-Time Rendering , S. 11. ( PDF )
  5. ^ K. Nipp, D. Stoffer; Lineaarinen algebra ; v/d/f Hochschulverlag der ETH Zürich; Zürich 1998, ISBN  3-7281-2649-7 .

Ulkoiset linkit