Cos'è un frammento nella programmazione grafica 3D?


37

Che cos'è un frammento in uno shader di frammenti? Wikipedia afferma che:

In generale, un frammento può essere considerato come i dati necessari per ombreggiare il pixel, oltre ai dati necessari per verificare se il frammento sopravvive per diventare un pixel (profondità, alfa, stencil, forbice, ID finestra, ecc.)

Quindi sono trame, vertici o qualcos'altro?

Risposte:


31

Nella computer grafica, un frammento sono i dati necessari per generare un singolo pixel del valore di una primitiva di disegno nel frame buffer.

Questi dati possono includere, ma non sono limitati a:

  • posizione raster
  • profondità
  • attributi interpolati (colore, coordinate della trama, ecc.)
  • stampino
  • alfa
  • ID finestra

Mentre una scena viene disegnata, i primitivi di disegno vengono rasterizzati in frammenti che vengono strutturati e combinati con il buffer di frame esistente. La modalità di combinazione di un frammento con i dati già presenti nel frame buffer dipende da varie impostazioni. In un caso tipico, un frammento può essere scartato se è più lontano del pixel che si trova già in quella posizione (in base al buffer di profondità). Se è più vicino del pixel esistente, può sostituire ciò che è già presente o, se è in uso la fusione alfa, il colore del pixel può essere sostituito con una miscela del colore del frammento e del colore esistente del pixel, come nel caso di disegnare un oggetto traslucido.

In generale, un frammento può essere considerato come i dati necessari per ombreggiare il pixel, oltre ai dati necessari per verificare se il frammento sopravvive per diventare un pixel (profondità, alfa, stencil, forbice, ID finestra, ecc.)

Da Wikipedia


6

Un frammento è semplicemente il dato che viene dato dal contributo dei 3 vertici attorno al pixel che stai ombreggiando.

In Vertex Shader, vengono emessi alcuni dati per vertice (colore, cordoni di trama, ...). Quindi nel Frammento Shader, per ogni pixel ottieni una media ponderata di quei valori, che poi usi per costruire i colori finali del pixel.


Il pixel e tutti gli altri dati su buffer invisibili come menzionato sopra.
StarWeaver

4

Allo stesso modo uno shader di vertice agisce sui vertici, uno shader di frammenti (o pixel) agirà solo sui pixel.


Siamo spiacenti, ma questo non è corretto senza menzionare la parola "rastarizzazione" e interpolazioni.
Notabene,

Ancora peggio dice che i pixel - che sono distinti dai frammenti, specialmente quando sono coinvolti obiettivi di rendering multisampling AA, copertura alfa o qualsiasi numero di altre situazioni
voterei in

4

Cos'è un frammento in uno shader di frammenti

L'unica cosa precisa che si può dire è la definizione degli input e degli output dello shader di frammento.

Dato che è stato fatto / è troppo ampio, mi concentrerò sul lato visivo intuitivo di esso.

Un frammento è l'output raster

La wiki di OpenGL dice:

Un frammento è una raccolta di valori prodotti dal Rasterizer.

Il che ha senso poiché lo shader di frammenti viene dopo il rasterizzatore che produce il suo input.

E questa è la rappresentazione visiva dell'output del rasterizer:

Fonte immagine .

L'input del rasterizer è un triangolo 3D e un punto di vista, e l'output è un insieme di pixel che potrebbero apparire sullo schermo (se non vengono bloccati da altri).

Ognuno di quei quadratini (codificati come una singola plixel), è un pezzo del triangolo, e il frammento è solo un altro nome per pezzo.


Downvoter, per favore spiegatemi così posso imparare e migliorare i contenuti ;-)
Ciro Santilli 24 改造 中心 法轮功 六四 事件

Le informazioni nella risposta in alto mescolate con le tue spiegazioni visive sarebbero le migliori.
StarWeaver
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.