Traversal Shaders, mitä ne ovat ja mitä sovelluksia sillä on GPU:ssa

Traversal Shaders

DirectX 8:n ilmestymisen jälkeen uusien varjostimien määrä on kasvanut ajan myötä, seuraavaksi luetteloon sisällytetyt ovat nimeltään Traversal Shaders, jotka liittyvät edistymiseen kohti käyttöönottoa tauolla, mutta ilman säteen jäljitysjarrua. pelejä. Katsotaan, mistä se koostuu ja mitä parannuksia se tuo peleihin suorituskyvyn suhteen.

Traversal Shaders on yksi kahdesta filosofiasta, joiden tarkoituksena on asettaa ongelma paikkatietorakenteen polulle Ray Tracingissa, joka koostuu Shader-ohjelmien käytöstä näkymää edustavan paikkatietorakenteen läpi kulkemiseen sen sijaan, että käytetään erikoistuneita tai omistettuja tietoja. laitteisto.

Ensinnäkin, muistetaan mikä Shader on

Esim. funcionamiento shader

Ohjelmistoissa tunnemme puhekielessä Shaderina ohjelman, joka toimii ytimen ytimillä GPU, joilla on erilaiset nimet valmistajasta riippuen. Niin AMD kutsuu näitä laitteiston osia Radeonissa tietokoneyksiköiksi, NVIDIA kutsuu niitä Stream Multiprocessoreiksi tai SM:ksi GeForcessa ja Intel antaa heille ARC-nimissä nämä yksiköt Xe Core.

Joten varjostin itsessään on ohjelmisto, joka toimii yhdessä niistä yksiköistä, jotka toimivat hyvin lähellä a prosessori, ero on siinä, että Shader on ohjelma, joka toimii graafisella primitiivillä eri vaiheissa renderöinnin liukuhihnassa: kärjet, primitiivit, kolmiot, sirpaleet tai pikselit. Vaikka nämä luokat eivät olekaan muuta kuin tekemiämme abstraktioita, Shader-yksikölle kaikki on dataa, mikä tarkoittaa, että ne voivat suorittaa kaikenlaisia ​​ohjelmia.

Joten miksi et käyttäisi prosessoria? No, johtuen siitä, että on ongelmia, että GPU:t, jotka on suunniteltu toimimaan rinnakkain, toimivat paljon paremmin tiettyjen kontekstien ratkaisemisessa kuin mitä CPU tekee, ja samalla tavalla se tapahtuu GPU: n tapauksessa.

Microsoft, DirectX Ray Tracing ja sen varjostimet

Microsoft DirectX 12 Ray Tracing

Kun Redmond ensimmäisen kerran puhui säteenseurannan käyttöönotosta Games Developer Conferencessa vuonna 2018, NVIDIA RTX 20:n julkaisuun oli jäljellä muutama kuukausi, ja tuolloin ei ollut täysin tiedossa, ainakin julkisesti, että On yksiköitä kiihdytettäväksi. Ray Tracing, kuten NVIDIAn RT Cores ja AMD:n Ray Acceleration Units.

Mikä oli Microsoftonko ehdotus laajentaa sen multimediasovellusliittymää? No, lisää sarja lisävaiheita, jotka on määritelty seuraavassa kaaviossa:

Etapas DXR

Kaavion ymmärtäminen on helppoa:

  • Siniset lohkot ovat varjostusohjelmia, jotka toimivat GPU-tasolla.
  • Vihreät lohkot suoritetaan prosessorissa, ohjaimessa, yhdessä GPU:n kanssa.
  • Harmaat timantit ovat olosuhteita, joita voi esiintyä salaman kulkiessa kohtauksen läpi.

Tässä kaaviossa on elementti, jota ei ole sisällytetty, ja se on toistaiseksi yksi suurimmista ongelmista, jotka liittyvät Säteen jäljitykseen: kiihtyvyysrakenteen polku. Ja mikä tuo on? Olemme puhuneet siitä säteenseuranta-opetusohjelmissamme, mutta muistaminen ei koskaan tee pahaa.

Tietorakenteet nopeuttamaan säteen jäljitystä

Árbol BVH

Säteenseuranta-algoritmien nopeuttamiseksi ja siten nopeammaksi suorittamiseksi kartoitetaan kohteiden sijainti kohtauksessa tietorakenteessa, joka on muotoiltu binääripuun kaltaiseksi kuin GPU. olisi mentävä.

Jotta ymmärtäisit tietorakenteen läpikäymisen prosessin, aloitetaan koko kohtausta edustavasta juuresta, joka on määritelty tasoilla viimeiselle tasolle asti. Jokaisella tasolla tehdään pyyntö RT Corelle tai vastaavalle yksikölle laskea, onko risteys, jos sellainen on, se menee alas seuraavalle tasolle, jos ei ole, polku pysähtyy kokonaan. Tätä tehdään puun päähän asti, jolloin sädelaatikon leikkausta ei enää tehdä ja säde-polygoni -leikkaus suoritetaan.

Jos olet ollut oivaltava, olet huomannut, että edellisen osion kaaviossa varjostintyyppien joukossa on leikkauspisteet, mutta ei niitä, jotka ovat vastuussa BVH-puun ylittämisestä, toisin sanoen niiden ylittämisestä, vaikka se on ymmärsi, että tämän tehtävän suorittavat yksiköiden varjostimet, vaikka sille ei ole olemassa tiettyä varjostajatyyppiä.

Traversal Shaders, mitä ne ovat ja mikä on niiden alkuperä?

DirectX Ray Tracing -dokumentaatiosta löydämme tulevien joukossa ns. Traversal Shaderit, jotka tullaan lisäämään jatkossa Ray Tracingin valmistukseen Microsoft API:n myöhemmässä versiossa, mutta parasta on laittaa itsemme. tilanteessa.

Tietorakenteen läpikulkuharjoitus tähän asti huolimatta siitä, että se on Shader-ohjelma, tämä on yleinen ja sitä ohjaa grafiikkaohjain, joten ohjelmoijien ei tarvitse tehdä mitään, koska on hyvin selvää, että traversal shader Se antaa sovelluskoodin ohjaus käy läpi prosessin, jossa datarakenteen läpi kulkee solmu solmulta.

Ja mitä hyötyä tästä on suorituskyvylle? Pääasia on, että voimme määritellä skenaarioita, joissa yksi tai useampi säde hylätään ennen risteyksen tekemistä, mikä ei ole tällä hetkellä mahdollista. Hyvin selkeä esimerkki olisi kamerasta hyvin kaukana olevat kohteet, joissa valaistuksen yksityiskohtia ei voida arvostaa yhtä hyvin kuin lähietäisyydeltä. On otettava huomioon, että Redmond API:n nykyisessä versiossa voimme määrittää epäsuoran valaistuksen suhteen, lähettääkö kohde säteitä vai ei Ray Generation Shaderin kautta, mutta emme voi luoda skenaarioita, joissa voimme sulkea pois säteet lentämällä. varsinkin etäisyyden kanssa.

Traversal Shaders rakentaa paikkatietorakenne

Traversal Shaders

Intelin grafiikan tuotekehitysdivisioona esitteli vuonna 2020 asiakirjan nimeltä Laiska kiihtyvyysrakenteiden rakentaminen läpikulkuvarjostimilla ja ne teistä, jotka hallitsevat vähän Shakespearen kieltä, ovat päättäneet, että se koostuu samojen paikkatietorakenteiden rakentamisesta käyttämällä Traversal Shaders -toimintoja. Joten näitä ei voida käyttää vain radan ohjaamiseen, vaan myös sen rakentamiseen.

Ensimmäinen asia, joka erottuu, on Lazy Build, jonka voisimme kääntää koulutukseksi rakentamiseksi pienellä vaivalla. Ja mistä se koostuu? No, tämä tekniikka pyrkii siihen, että tietorakenteen rakennusaika lyhenee. Tätä varten se perustuu aikaisempiin tietoihin aiemmista kehyksistä, jotka on lisätty näkyvyysalgoritmiin, ja jos tämä vaikuttaa hämmentävältä, määritellään mitä näkyvyys tarkoittaa, kun puhumme 3D-renderöimisestä.

Näkyvyys

Meidän on lähdettävä siitä periaatteesta, että kun GPU renderöi, se laskee näkyvyyden avaruuden pisteen ja ensimmäisen näkyvän pinnan välillä tiettyyn suuntaan tai yksinkertaistaen: näkyvyys kahden elementin välillä. Ennen kuin jatkamme, meidän on otettava huomioon yksi asia, tätä lukiessasi olet varmasti kuvitellut katsovasi kahta esinettä. No, asia ei ole niin, puhumme siitä, kuinka yksi kohde näkisi toisen, jos se näkisi, mutta yksinkertaisimmasta määritelmästä se viittaa kameraan, joka on näkymä, josta renderöimme.

Hybridirenderöinnissä, jossa rasterointi yhdistetään säteenseurantaan, jota nyt käytetään kaikissa peleissä, kameran näkyvyyttä ei lasketa mainitusta algoritmista, vaan pikemminkin rasterialgoritmista. Tulevaisuudessa ajatuksena on, että näkyvyys kameran suhteen tehdään Ray Tracingistä, jotta näiden tietojen avulla GPU rakentaa koko kohtauksen tietorakenteen Traversal Shadersin kautta.