Direct3D 11

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 2. november 2014; checks kræver 34 redigeringer .

Direct3D 11 (D3D11) er en komponent i applikationsprogrammeringsgrænsefladen ( API ) i  DirectX 11, den 11. version af Direct3D , efterfølgeren til Direct3D 10/10.1 . Direct3D 11 giver funktioner til operativsystemet og applikationerne til at interagere med grafikkortdrivere . Disse funktioner er ikke knyttet til det næste operativsystem i Windows-serien ( Windows 7 ) og er tilgængelige i Windows Vista . Til dels fungerer D3D11 på videokort på Direct3D 9-10 niveau.

De første forhåndsvisningsversioner udkom i november 2008. Den officielle endelige version blev udgivet den 22. oktober 2009 som en del af Windows 7 . Den 28. oktober 2009 blev DirectX 11 officielt tilgængelig til Windows Vista og Windows Server 2008 via download via Windows Update . [en]

Tessellation

D3D11 tilføjer 3 yderligere trin til renderingsrørledningen, hvis formål er effektivt at tesselere overflader.

D3D11-rørledningen inkluderer tre nye trin mellem vertex- og geometriskyggetrin . To af dem er programmerbare (skrogskygge- og domæneskyggetrin), og en er konfigurerbar (tesselationstrin).

Den præsenterede rørledning opererer med gitter defineret af overfladepletter. De vigtigste primitiver i D3D11 er trekantede og firkantede pletter. Formen på hvert plaster bestemmes af antallet af kontrolpunkter. I vertex shader bliver disse punkter transformeret, flået og/eller morphed sekventielt.

Skalskyggeren kaldes for hver patch. Patch-brudpunkter fra vertex shader bruges som input. Skalskyggeren har to hovedanvendelser. Den første (valgfri) er at konvertere brudpunkter fra en repræsentation til en anden. For eksempel giver det dig mulighed for at implementere metoden præsenteret i Approximation Catmull-Clark Subdivision Surfaces with Bicubic Patches . Efter denne shader sendes kontrolpunkterne direkte videre, uden om tesselatoren. En anden anvendelse er beregningen af ​​en passende tessellationsparameter, som derefter overføres til tessellationsstadiet. Denne tilgang tillader adaptiv tessellation, som kan bruges i tilfælde af visningsafhængige detaljeringsniveauer (LOD). Tessellationsparameteren er defineret for hver side af plasteret og går fra 2 til 64. Det betyder, at hver side af en trekantet (eller firkantet) patch kan opdeles i 2 (eller maksimalt 64) flader.

Tesselator-stadiet er repræsenteret af et fast sæt funktioner (meget konfigurerbare), der bruger tessellationsparameteren til at underinddele patchen i flere trekanter eller quads. Tessellatoren har ikke adgang til breakpoints - alle opdelingsbeslutninger træffes baseret på konfiguration og tessellationsparametre, der er sendt fra shell shaderen. Hvert vertex efter tessellationsstadiet videregives til domæneskyggeren, og kun parameteriseringskoordinater sendes.

Domæneskyggeren opererer på patchens parametriseringskoordinater for hvert vertex separat, selvom det er muligt at få adgang til de transformerede kontrolpunkter for hele patchen. Domæneskyggeren sender al information om toppunktet (position, teksturkoordinater osv.) til geometriskyggeren (eller til beskæringsstadiet, hvis der ikke er angivet nogen geometriskygge). I det væsentlige evaluerer den repræsentationen af ​​overfladen på hvert punkt. På dette stadium kan forskydningskortlægningsmetoden anvendes.

Beregn shaders og uordnet hukommelse

Direct3D 11 introducerer en ny shader-type, Compute Shader. Compute shader kaldes som en almindelig række af tråde. Strømmene er opdelt i grupper. Hver gruppe har 32 KB hukommelse delt mellem trådene i gruppen. Således kan trådene i gruppen dele resultater, hvilket forbedrer deres præstationer. Tråde kan også udføre læsninger og skrivninger med tilfældig adgang til grafiske ressourcer: teksturer, vertex-arrays, render-mål. Disse hukommelsesadgange er uordnede, selvom forskellige instruktioner synkroniseres efter behov.

Pixel (fragment) shaders kan også læse på en vilkårlig adresse, hvilket gør det muligt at skrive datastrukturer, som derefter kan bruges i en compute shader, eller omvendt. Det er værd at bemærke, at pixel shaders altid har haft tilfældig læseadgang gennem teksturopslag.

Compute shaders kan også udføre operationer såsom summerede arealtabeller, hurtige Fourier-transformationer meget hurtigere end tidligere anvendte metoder på GPU'en. I øjeblikket undersøger Microsoft biblioteker, der leverer sådanne beregninger. Microsoft mener, at algoritmer som A-buffer-gengivelse og ray-tracing også kan implementeres effektivt, men i øjeblikket er der ingen reelle beviser for deres effektivitet.

Kaldning af en compute shader erstatter alle stadier af renderpipelinen. Det er dog muligt at blande compute shaders og traditionel gengivelse ved at bruge deres resultater. For eksempel billedbehandling efter gengivelse med en computerskygge (du kan indlæse yderligere datastrukturer).

Multithreaded rendering

D3D10 tillader kun at sende gengivelseskommandoer fra en enkelt tråd (der er i øjeblikket en speciel multi-threaded-tilstand, men på grund af dårlig ydeevne anbefaler Microsoft ikke at bruge den). Som du ved, involverer afsendelse af visualiseringskommandoer gennem Direct3D brugen af ​​yderligere CPU -computerressourcer . I lyset af tendensen til at øge antallet af CPU-kerner, introduceres understøttelse af mere avanceret multithreading for at fordele dette arbejde mellem flere tråde og derved producere det mere effektivt.

Direct3D 11 gør det muligt at oprette visningslister fra flere tråde og udføre dem fra hovedgengivelsestråden. Derudover er den enhed, der opretter ressourcerne, blevet fjernet fra den kontekst, der sender gengivelseskommandoer. Dette gør det muligt at oprette ressourcer asynkront. Udskudte kontekster bruges til at oprette visningslister, og øjeblikkelig kontekst bruges til at sende gengivelseskommandoer til GPU'en , herunder håndtering af visningslister oprettet i udskudte kontekster.

I modsætning til andre funktioner implementeres multi-threaded rendering i Direct3D 11 programmatisk gennem driveren. Passende D3D10-drivere (måske endda D3D9) muliggør multi-threaded-gengivelse meget mere effektivt end før. Et vist niveau af multithreading vil være tilgængeligt selv uden nye drivere, men det er endnu ikke klart, hvilke begrænsninger der vil være i dette tilfælde.

Andre funktioner

Understøttelse af dynamisk sammenkædning af shaders (svarende til Cg). Dette giver dig mulighed for at adskille skrive- og kompileringslys- og materialeskyggere. Sen binding udføres, når shaderen er blotlagt. Denne tilgang er en løsning på det kombinatoriske eksplosionsproblem i tilfælde af forskellige lyskilder og materialer (den og nogle andre problemer er diskuteret i afsnit 7.9 i Real-Time Rendering, 3. udgave )

To nye komprimerede teksturformater er blevet tilføjet. BC6 understøtter det brede dynamiske område af RGB-teksturer ved hjælp af 1 byte pr. texel (i stedet for 6 bytes for 6-bit RGB-ægte teksturer). BC7 understøtter RGB- eller RGBA-teksturer med smalt dynamisk område. Den bruger også 1 byte pr. texel (som DXT5/BC3), men giver væsentligt bedre kvalitet end D3D10 teksturformaterne. Begge nye formater bruger flere bloktyper - komprimeringsværktøjet vælger den passende bloktype baseret på dens indhold.

D3D9- og D3D10-komprimeringsblokformaterne er baseret på ideen om, at hver 4×4-blok af texel indeholder alle dens værdier på en enkelt linje, og bits af hver texel koder en position på den linje. For eksempel i DXT1/BC1 repræsenterer en linje i RGB-rummet to RGB-endepunkter, og hver texel bruger to bits til at angive, hvilken farve der bruges fra de fire punkter langs linjen.

De nye D3D11-formater understøtter bloktyper med en, to og endda tre (i tilfælde af BC7) farvelinjer. Der er en afvejning mellem antallet af linjer og antallet af punkter langs en sådan linje, da hver blok optager den samme mængde hukommelse. Grundlæggende kræver en 4×4 blok med to farvelinjer yderligere 16 bits pr. blok for at specificere hvilken linje af hver texel der var forbundet med den (i tilfælde af tre farvelinjer ville der være behov for endnu flere bits). For at reducere hukommelseskravene understøttes kun et lille sæt mulige farvelinjemønstre. For hver blok vælger pakkeværktøjet den bedste mulighed fra den delmængde.

Direct3D 11 har en strammere teksturspecifikation. Dekompressionsresultater skal være nøjagtige, og subtexel/submip-filtrering skal være mindst 8 bit nøjagtige.

Direct3D 11 giver dig mulighed for at bruge teksturer, der har en maksimal størrelse i intervallet 8K-16K texels. Bemærk, at en 16K x 16K DXT1/BC1-tekstur er 128MB - ikke mange spil vil bruge så store teksturer, men det kan være velegnet til teknikker som megatekstur . Generelt kan en ressource nu være op til 2 GB i størrelse i D3D11.

Hardwaren kan eventuelt understøtte dobbeltpræcision reelle flydende decimaltal.

Gamefest 2008 indeholdt også et dias med mange andre nye funktioner, hvis detaljer ikke blev forklaret:

DirectX 11 og administreret kode

SlimDX og SharpDX understøtter DirectX 11. XNA  - nr

Spilmotorer med DirectX 11-understøttelse

Se også


Noter

  1. Andrew Burnes. DirectX 11 udgivet til Windows Vista  . Voodoo Extreme 3D (28. oktober 2009). Hentet 29. oktober 2009. Arkiveret fra originalen 17. marts 2012.
  2. Battlefield Bad Company 2 med DirectX 11-understøttelse . GameTech (16. april 2009). Hentet 1. november 2009. Arkiveret fra originalen 17. marts 2012.

Links