Direct3D 11

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 2. marraskuuta 2014 tarkistetusta versiosta . tarkastukset vaativat 34 muokkausta .

Direct3D 11 (D3D11) on osa Direct3D 10/10.1 : n seuraajan DirectX 11:n, Direct3D : n 11. version, sovellusohjelmointirajapintaa ( API ) .  Direct3D 11 tarjoaa ominaisuuksia, joiden avulla käyttöjärjestelmä ja sovellukset voivat olla vuorovaikutuksessa näytönohjainohjainten kanssa . Näitä ominaisuuksia ei ole sidottu seuraavaan Windows-käyttöjärjestelmään ( Windows 7 ), ja ne ovat saatavilla Windows Vistassa . Osittain D3D11 toimii Direct3D 9-10 -tason näytönohjaimissa .

Ensimmäiset esikatseluversiot ilmestyivät marraskuussa 2008. Virallinen lopullinen versio julkaistiin 22. lokakuuta 2009 osana Windows 7 -käyttöjärjestelmää . 28. lokakuuta 2009 DirectX 11 tuli virallisesti saataville Windows Vistalle ja Windows Server 2008 :lle lataamalla Windows Updaten kautta . [yksi]

Tesselaatio

D3D11 lisää renderointiliukulinjaan 3 lisävaihetta, joiden tarkoituksena on pintojen tehokas tessellointi .

D3D11 -liukuhihna sisältää kolme uutta vaihetta vertex- ja geometriavarjostusvaiheiden välillä . Kaksi niistä on ohjelmoitavia (rungon varjostin ja domain shader -vaiheet) ja yksi konfiguroitavissa (tessellaatiovaihe).

Esitetty putkilinja toimii pintatilojen määrittämillä ruudukoilla. D3D11:n tärkeimmät primitiivit ovat kolmiomaisia ​​ja neliömäisiä laikkuja. Jokaisen laastarin muoto määräytyy kontrollipisteiden lukumäärän mukaan. Vertex-varjostimessa nämä pisteet muunnetaan, nyljetään ja/tai muotoillaan peräkkäin.

Shell shader kutsutaan jokaiseen patchiin. Syötteenä käytetään vertex-varjostimen korjauspisteitä. Shell shaderillä on kaksi pääkäyttöä. Ensimmäinen (valinnainen) on keskeytyspisteiden muuntaminen esityksestä toiseen. Sen avulla voit esimerkiksi toteuttaa menetelmän, joka on esitetty artikkelissa Catmull-Clark Subdivision Surfaces with Bicubic Patches . Tämän varjostimen jälkeen ohjauspisteet lähetetään suoraan eteenpäin ohittaen tesselaattorin. Toinen käyttötarkoitus on sopivan tessellaatioparametrin laskeminen, joka sitten siirretään tessellaatiovaiheeseen. Tämä lähestymistapa mahdollistaa mukautuvan tesselloinnin, jota voidaan käyttää näkymästä riippuvien yksityiskohtatasojen (LOD) tapauksessa. Tesselointiparametri määritetään paikan jokaiselle pinnalle, ja se vaihtelee välillä 2–64. Tämä tarkoittaa, että kolmion (tai neliön muotoisen) paikan jokainen pinta voidaan jakaa 2 (tai enintään 64) pintaan.

Tesselaattorivaihetta edustaa kiinteä joukko funktioita (erittäin konfiguroitavissa), jotka käyttävät tessellaatioparametria jakaakseen korjaustiedoston useisiin kolmioihin tai neliöihin. Tesselaattorilla ei ole pääsyä keskeytyskohtiin - kaikki jakamispäätökset tehdään shell-varjostimesta välitettyjen konfiguraatio- ja tessellointiparametrien perusteella. Jokainen tessellaatiovaiheen jälkeinen kärkipiste välitetään toimialueen varjostimelle, ja vain parametrointikoordinaatit välitetään.

Domain Shader toimii kunkin kärkipisteen parametrointikoordinaateilla erikseen, vaikka koko korjaustiedoston muunnettuja ohjauspisteitä on mahdollista käyttää. Toimialueen varjostin lähettää kaikki tiedot kärjestä (sijainti, pintakoordinaatit jne.) geometriavarjostimelle (tai leikkausvaiheeseen, jos geometriavarjostajaa ei ole määritetty). Pohjimmiltaan se arvioi pinnan esityksen kussakin pisteessä. Tässä vaiheessa voidaan soveltaa siirtymän kartoitusmenetelmää.

Laske varjostimet ja järjestämätön muisti

Direct3D 11 esittelee uuden varjostintyypin, Compute Shaderin. Laskea varjostajaa kutsutaan säännölliseksi säikeryhmäksi. Virrat on jaettu ryhmiin. Jokaisella ryhmällä on 32 kt muistia, joka on jaettu ryhmän säikeiden kesken. Näin ryhmän säikeet voivat jakaa tuloksia ja parantaa suorituskykyään. Säikeet voivat myös lukea ja kirjoittaa satunnaisesti graafisiin resursseihin: tekstuurit, kärkitaulukot, renderöintikohteet. Nämä muistin haut ovat järjestämättömiä, vaikka eri käskyt synkronoidaan tarvittaessa.

Pikseli (fragmentti) varjostajat voivat myös lukea mielivaltaisesta osoitteesta, mikä mahdollistaa tietorakenteiden kirjoittamisen, joita voidaan sitten käyttää laskentavarjostimessa tai päinvastoin. On syytä huomata, että pikselivarjostimilla on aina ollut satunnainen lukuoikeus tekstuurihakujen kautta.

Laskevarjostimet voivat myös suorittaa operaatioita, kuten summa-aluetaulukoita, nopea Fourier-muunnos paljon nopeammin kuin aiemmin käytetyt menetelmät GPU:ssa. Tällä hetkellä Microsoft tutkii kirjastoja, jotka tarjoavat tällaisia ​​laskelmia. Microsoft uskoo, että algoritmit, kuten A-puskurin renderöinti ja säteenseuranta, voidaan myös toteuttaa tehokkaasti, mutta tällä hetkellä niiden tehokkuudesta ei ole todellista näyttöä.

Laskevarjostimen kutsuminen korvaa kaikki renderöintiliukulinjan vaiheet. On kuitenkin mahdollista sekoittaa laskentavarjostimia ja perinteistä renderöintiä käyttämällä niiden tuloksia. Esimerkiksi kuvankäsittely laskentavarjostimella renderöinnin jälkeen (voit ladata lisätietorakenteita).

Monisäikeinen renderöinti

D3D10 sallii renderöintikomentojen välittämisen vain yhdestä säikeestä (tällä hetkellä käytössä on erityinen monisäikeinen tila, mutta huonon suorituskyvyn vuoksi Microsoft ei suosittele sen käyttöä). Kuten tiedät, visualisointikomentojen lähettäminen Direct3D:n kautta edellyttää lisäsuorittimen laskentaresurssien käyttöä . Suorittimen ytimien määrän lisääntymisen vuoksi otetaan käyttöön tuki edistyneemmälle monisäikeistykselle, jotta tämä työ voidaan jakaa useiden säikeiden kesken ja tuottaa siten sen tehokkaammin.

Direct3D 11 mahdollistaa näyttöluetteloiden luomisen useista säikeistä ja niiden suorittamisen päärenderöintisäikeestä. Lisäksi resurssit luova laite on poistettu renderöintikomentoja lähettävästä kontekstista. Tämä mahdollistaa resurssien luomisen asynkronisesti. Viivästettyjä konteksteja käytetään näyttöluetteloiden luomiseen, ja välitöntä kontekstia käytetään renderöintikomentojen välittämiseen GPU :lle , mukaan lukien viivästetyissä yhteyksissä luotujen näyttöluetteloiden käsittely.

Toisin kuin muut ominaisuudet, Direct3D 11:n monisäikeinen renderöinti toteutetaan ohjelmallisesti ohjaimen kautta. Asianmukaiset D3D10-ajurit (ehkä jopa D3D9) mahdollistavat monisäikeisen renderöinnin paljon tehokkaammin kuin ennen. Tietty taso monisäikeistystä on saatavilla myös ilman uusia ohjaimia, mutta ei ole vielä selvää, mitä rajoituksia tässä tapauksessa tulee olemaan.

Muut ominaisuudet

Tuki varjostimien dynaamiseen linkitykseen (samanlainen kuin Cg). Näin voit erottaa valo- ja materiaalivarjostimien kirjoittamisen ja kokoamisen. Myöhäinen sidonta tehdään, kun varjostin on esillä. Tämä lähestymistapa on ratkaisu kombinatoriseen räjähdysongelmaan useiden valonlähteiden ja materiaalien tapauksessa (se ja eräät muut ongelmat käsitellään Real-Time Rendering, 3rd Edition osiossa 7.9 ) .

Kaksi uutta pakattua pintakuviomuotoa on lisätty. BC6 tukee laajaa RGB-kuvioiden dynaamista aluetta käyttämällä 1 tavua tekseliä kohden (6-bittisten RGB-todellisten pintakuvioiden 6 tavun sijaan). BC7 tukee kapeaa dynaamista aluetta RGB- tai RGBA-kuvioita. Se käyttää myös 1 tavua tekseliä kohden (kuten DXT5/BC3), mutta tarjoaa huomattavasti paremman laadun kuin D3D10-tekstuurimuodot. Molemmat uudet muodot käyttävät useita lohkotyyppejä - pakkausapuohjelma valitsee sopivan lohkotyypin sisällön perusteella.

D3D9- ja D3D10-pakkauslohkomuodot perustuvat ajatukseen, että jokainen 4×4 tekselilohko sisältää kaikki arvonsa yhdellä rivillä ja kunkin tekselin bitit koodaavat paikan tällä rivillä. Esimerkiksi DXT1/BC1:ssä RGB-avaruudessa oleva viiva edustaa kahta RGB-päätepistettä, ja jokainen tekseli käyttää kahta bittiä osoittamaan, mitä väriä viivan neljästä pisteestä käytetään.

Uudet D3D11-muodot tukevat lohkotyyppejä, joissa on yksi, kaksi ja jopa kolme (BC7:n tapauksessa) väriviivaa. On olemassa kompromissi rivien lukumäärän ja tällaisella viivalla olevien pisteiden lukumäärän välillä, koska jokainen lohko vie saman määrän muistia. Periaatteessa 4 × 4 -lohko, jossa on kaksi väriviivaa, vaatii 16 lisäbittiä lohkoa kohden määrittääkseen, mikä kunkin tekselin rivi siihen liitettiin (kolmen väriviivan tapauksessa tarvitaan vielä enemmän bittejä). Muistivaatimusten vähentämiseksi tuetaan vain pientä joukkoa mahdollisia väriviivakuvioita. Pakkausapuohjelma valitsee kullekin lohkolle parhaan vaihtoehdon kyseisestä osajoukosta.

Direct3D 11:llä on tiukemmat tekstuurimääritykset. Purkutulosten on oltava tarkkoja ja subtekseli-/submip-suodatuksen on oltava vähintään 8 bitin tarkkoja.

Direct3D 11:n avulla voit käyttää pintakuvioita, joiden maksimikoko on välillä 8K-16K tekseliä. Huomaa, että 16K x 16K DXT1/BC1-tekstuuri on 128 Mt - monet pelit eivät käytä näin suuria tekstuuria, mutta se saattaa sopia tekniikoihin, kuten megatekstuuriin . Yleensä resurssin koko voi nyt olla jopa 2 Gt D3D11:ssä.

Laitteisto voi valinnaisesti tukea kaksinkertaisia ​​todellisia liukulukuja.

Gamefest 2008 sisälsi myös dian, jossa oli monia muita uusia ominaisuuksia, joiden yksityiskohtia ei selitetty:

DirectX 11 ja hallittu koodi

SlimDX ja SharpDX tukevat DirectX 11 :tä. XNA  - ei

Pelimoottorit, joissa on DirectX 11 -tuki

Katso myös


Muistiinpanot

  1. Andrew Burnes. DirectX 11 julkaistu Windows Vistalle  . Voodoo Extreme 3D (28. lokakuuta 2009). Haettu 29. lokakuuta 2009. Arkistoitu alkuperäisestä 17. maaliskuuta 2012.
  2. Battlefield Bad Company 2 DirectX 11 -tuella . GameTech (16. huhtikuuta 2009). Haettu 1. marraskuuta 2009. Arkistoitu alkuperäisestä 17. maaliskuuta 2012.

Linkit