» it.DX11 Pipeline
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

it.DX11 Pipeline

English | Russian

La traduzione non è completa e deve essere migliorata in alcuni punti

Indice dei contenuti

Pipeline Grafica

Lo Shader Model 5 introduce molti nuovi stadi, stages, nella pipeline grafica e programmabile, come mostrato nel diagramma qui sotto.

DX11 Pipeline

Stadio Input Assembler

Questo stadio è responsabile per la preparazione dell'input della geometria perché sia disponibile per il Vertex Shader.

Innanzitutto la geometria deve fornire una struttura, layout, che indica come i vertici sono disposti nella memoria (formato, dimensione, semantica).

Quindi creiamo un Layout di Input per far combaciare l'Input del Vertex Shader e della Geometria. L'Input Assembler raccoglierà quindi i dati per inviarli al Vertex Shader.

Vertex Shader

Come nelle precedenti versioni DirectX, Vertex Shader consente di modificare i vertici.

Tenete presenti due cose:

  • dato che esistono più stadi nello shader, non sempre vorremo trasformarli subito nello spazio di proiezione.
  • in caso di di istanze di disegno, il Vertex Shader verrà richiamato un numero di volte pari al prodotto del Numero dei Vertici per il Numero delle Istanze

Hull Shader

Questo stadio rappresenta la prima parte del processo di tassellatura, tessellation.

I dati ricevuti dal Vertex Shader come punti di controllo (patches), che è possibile modificare nello Hull Shader.

Deve inoltre essere fornita una Funzione Costante dello Hull Shader, Hull Shader Constant Function, che fornirà i fattori di tessellation (quanto tasselliamo la geometria di input).

Tessellation

Questo stadio non è programmabile, la tassellatura hardware suddividerà la geometria secondo i punti di controllo ed i fattori di tessellation.

Domain Shader

In questo stadio vengono processati i dati della tassellatura.
A seconda del tipo di tassellatura richiesta, verranno ricevuti differenti tipi di dati, ma tutti nella forma di coordinate baricentriche.

A questo punto è possibile processare ciascuno nuovo vertice generato nel modo che preferiamo (attraverso il displacement, ad esempio).

Geometry Shader

Questo shader consente di modificare la geometria completamente.

Invece che ricevere singoli vertici come negli altri stadi, qui si riceve un primitivo unico, fully assembled, costituito da vertici che ne descrivono punti, linee e triangoli. In output possiamo avere uno qualsiasi di questi tipi di dati (tristrip, linestrip, pointlist) e su cui è possibile operare su qualsiasi tipo di dato (solo un per volta, ma è possibile generare molti o nessuno di quei tipi).

Stream Output

Questo stadio è opzionale, e può essere eseguito dopo gli stadi Vertex\Domain o Geometry.

Stream Output consente di fare direttamente l'output dei vertici\primitivi modificati in un nuovo buffer, che può essere riusato in seguito.

Rasterizer

Questo stadio è controllato dallo stadio Rasterizer. La rasterizzazione riceve il primitivo e lo prepara per il Pixel Shader (culling, clipping, depth test).

Pixel Shader

Qui le cose funzionano come in precedenza: è possibile processare ogni pixel che ce la fa ad arrivare sullo schermo.

Tenete presente che in Shader Model 5 è possibile anche per il Pixel Shader scrivere in un buffer.

VVVV Pipeline

La Pipeline di vvvv è stata adattata in certi modi per poter lavorare con le nuove caratteristiche di DirectX 11.

DX11 vvvv pipeline

Geometria

Non è più presente la Mesh di DirectX9, che è stata sostituita da una fatta appositamente e più flessibile. L'Index Buffer non è più obbligatorio, e la topologia delle geometria può essere una qualsiasi consentita dalla pipeline, il che significa poter inviare anche punti e linee ad uno shader.

Ora inoltre è possibile unire un Drawer alla geometria. Di default, uniamo un "drawer default", che disegnerà gli oggetti nella stessa maniera cui eravamo abituati con DX9.

Questo drawer può essere modificato (questo NON modifica la geometria) per poter usare tecniche avanzate (Instancing, Indirect drawing, Per Vertex...)

Layer

Anche il sistema Layer è stato modificato. In un'altra pagina verranno forniti maggiori dettagli, ma per sommi capi:

  • Layer fornisce solo una funzione di render, quindi non può essere uno spread (come accadeva prima)
  • le impostazioni del Renderer vengono fornite a questa funzione di render, così che si possa accedere alla dimensione target di view/projection/render dall'interno della funzione di render
  • dai validatori possono essere assignati al Layer, per ogni slice che vogliamo disegnare possiamo fare una query al validatore se voglio eseguire il render o no, consentendo cose tipo Frustrum Cull e GetSlice a livello Layer
  • Oltre alle semantiche builtin (VIEW,PROJECTION), è possibile assegnarne di nostre (ogni tipo di dato, risorse incluse). Questo consente di passare gli stessi dati agli shader senza avere diversi pin da connettere. Semantiche personalizzate possono essere obbligatorie, il che significa che se lo shader non ha semantiche, non funzionerà.

Nodo Shader

Anche il nodo shader funziona in modo differente:

  • Validate Layout: si verificano le semantiche della struttura della geometria, check geometry layout semantics, che vengono legate all'input del vertexshader dal Passaggio, Pass, scelto. Tenete presente che DX11 non accetterà semantiche mancanti, quindi per esempio se lo shader si aspetta NORMAL e questa non è fornita dalla geometria lo shader NON funzionerà (controllate il pin di output Layout Valid per avere dettagli).
  • Set Render State : vengono uniti i render states come nella precedente pipeline.
  • Apply Semantics: vengono applicate render semantics dal Renderer e dal Layer (global semantics)
  • Build object render settings: viene costruita una piccola classe che contiene la Geometria Corrente, Current Geometry (con il bounding box), e la trasformazione World, World transform.
  • Per Slice Validator : per ogni call, vengono inviate impostazioni di render e di oggetto, i validatori decideranno se questa slice deve essere parte del rendering o meno.
  • Apply Per object semantics: Sets any semantic like WORLD, WORLDVIEW...
  • Draw : accede al disegno della geometria e processa il disegno.

anonymous user login

Shoutbox

~4h ago

joreg: vvvvTv S02E01 is out: Buttons & Sliders with Dear ImGui: https://www.youtube.com/live/PuuTilbqd9w

~6d ago

joreg: vvvvTv S02E00 is out: Sensors & Servos with Arduino: https://visualprogramming.net/blog/2024/vvvvtv-is-back-with-season-2/

~7d ago

fleg: hey there! What's the best tool for remote work? Teamviewer feels terrible. Thanks!

~21d ago

joreg: Last call: 6-session vvvv beginner course starting November 4: https://thenodeinstitute.org/courses/ws24-5-vvvv-beginners-part-i/

~1mth ago

joreg: Missed the last meetup? You can rewatch it here: https://www.youtube.com/live/MdvTa58uxB0?si=Fwi-9hHoCmo794Ag

~1mth ago

theurbankind: When is the next big event, like node festival ?

~1mth ago

~1mth ago

joreg: Join us for the next vvvv meetup on Oktober 17th: https://visualprogramming.net/blog/2024/25.-vvvv-worldwide-meetup/

~1mth ago

joreg: 6 session beginner course part 2 "Deep Dive" starts January 13th: https://thenodeinstitute.org/courses/ws24-5-vvvv-beginners-part-ii/