2015-07-01 12 views
8

Non riesco ancora a capire quali differenze ci siano tra un campione/pixel/frammento.Qual è la differenza tra un campione, un pixel e un frammento?

Poiché lo shader di frammenti viene eseguito per pixel, penso che un frammento si riferisca solo a un pixel, è corretto? Qualcuno può darmi un esempio e una definizione di ciascuno?

+0

Se siete alla ricerca di definizioni, suppongo hai guardato il wiki? Ad esempio [questo] (https://www.opengl.org/wiki/Fragment) e [questo] (https://www.opengl.org/wiki/Per-Sample_Processing) pagina? – vesan

+0

Sì, l'ho fatto, anche se ancora non capisco. Ad esempio, "Ogni frammento rappresenta un segmento di dimensioni campione di un Primitivo rasterizzato". Cosa intendono per campione? – Jeffrey

+4

significa che il frammento può avere dimensioni diverse da pixel, ad esempio se si esegue il campionamento multiplo per scopi anti-aliasing. Il frammento viene convertito in pixel nell'ultima fase di rendering. Lo vedo così: 'Fragment' è l'unità atomica dei tuoi buffer di destinazione di rendering e' Pixel' è l'unità atomica del dispositivo di rendering (schermo). Anche il frammento ha più informazioni e poi pixel come: coordinata Z, tutti i colori e valori del buffer target, ... Questo è almeno il modo in cui lo vedo. – Spektre

risposta

2

Un pixel è un elemento dello schermo. Un frammento è la porzione corrispondente per una data primitiva geometrica + - che copre il pixel. Per l'antialiasing (e molti altri) è possibile prelevare più campioni in un pixel.

Un valore di pixel è la media di valori di campioni e i frammenti di diversi triangoli possono contribuire a un dato pixel.

2

Uno shader di frammenti viene eseguito per frammento ed emette pixel. Sono molto simili, ma non uguali.

Un frammento è una raccolta di valori prodotti dal rasterizzatore. Ogni frammento rappresenta un segmento di dimensioni campione di un Primitivo rasterizzato. La dimensione coperta da un frammento è correlata all'area dei pixel, ma la rasterizzazione può produrre più frammenti dallo stesso triangolo per pixel, a seconda dei vari parametri di multicampionamento e dello stato OpenGL. Ci sarà almeno un frammento prodotto per ogni area di pixel coperta dal primitivo che viene rasterizzato. Source

Quindi, se si disabilita completamente il campionamento/antialiasing, ciascun frammento dovrebbe mappare su un pixel. Ma se lo abiliti, più frammenti verranno interpolati per formare un singolo pixel.

La differenziazione può essere visto anche nella resa Condotte di OpenGL qui: https://openglinsights.com/pipeline.html

Problemi correlati