2012-01-14 9 views
8

Sono molto interessato a capire come funziona il multicampionamento. Ho trovato una grande letteratura su come abilitarla o usarla, ma pochissime informazioni su ciò che realmente fa per ottenere un rendering antialiased. Quello che ho trovato, in molti posti, è l'informazione conflittuale che mi ha solo confuso di più.Come funziona davvero il multisample?

prega di notare che so come attivare e utilizzare multisampling (io in realtà già lo uso), quello che non so è che tipo di dati diventa veramente nelle multicampionati renderbuffers/texture, e come questo dato è utilizzato nella pipeline di rendering.

Posso capire molto bene come funziona il supersampling, ma il multicampionamento ha ancora alcune aree oscure che vorrei capire.

ecco cosa dicono le specifiche: (OpenGL 4,2)

valori campione Pixel, tra cui il colore, la profondità e valori stencil, sono memorizzati in questo buffer (buffer multisample). I campioni contengono valori di colore separati per ciascun colore del frammento.

...

Durante multisample rendendo il contenuto di un frammento di pixel vengono modificati in due modi. Innanzitutto, ciascun frammento include un valore di copertura con bit SAMPLES.

...

secondo luogo, ogni frammento include valori CAMPIONI profondità e insiemi di dati associati , invece del singolo valore di profondità e insieme di dati associato che viene mantenuto in modalità di rendering-singolo campione.

Quindi, ogni campione contiene un colore, un bit di copertura e una profondità distinti. Qual è la differenza da un normale supersampling? Sembra un supersampling "ponderato" per me, in cui ogni valore di pixel finale è determinato dal valore di copertura dei suoi campioni invece di una media semplice, ma sono molto insicuro su questo. E che dire delle coordinate della trama a livello di campione?

Se memorizzo, ad esempio, le normali in una trama multicampionata RGBF, le leggerò "antialiased" (ovvero, avvicinandosi a 0) sui bordi di un poligono?

Uno shader di frammenti viene chiamato una volta per frammento, a meno che non utilizzi gl_SampleID, glSampleIn o un qualificatore di memoria di esempio. Come può un frammento shader essere invocato una volta per frammento e ottenere un rendering antialiasing?

+0

Una spiegazione di NVIDIA: http://www.nvidia.com/object/feature_hraa.html –

+0

scusa ma questo collegamento non fornisce assolutamente alcuna informazione su come funziona ms, è possibile ottenere informazioni ancora migliori da wikipedia – user815129

+0

Questo poi, una conferenza Stanford CS del 2007: http://graphics.stanford.edu/courses/cs248-07/lectures/2007.10.11%20CS248-06%20Multisample%20Antialiasing/2007.10.11 % 20CS248-06% 20Multisample% 20Antialiasing.ppt, peccato che non faccia riferimento a nessuna fonte. –

risposta

5

OpenGL su Silicon Graphics Systems:

http://www-f9.ijs.si/~matevz/docs/007-2392-003/sgi_html/ch09.html#LE68984-PARENT

menzioni: Quando si utilizza multisampling e leggere di nuovo colore, si ottiene il valore del colore risolti (cioè la media dei campioni). Quando leggi lo stencil o la profondità, di solito ottieni un valore campione singolo anziché la media. Questo valore di esempio è in genere quello più vicino al centro del pixel.

E c'è questa specifica tecnica (1994) dal sito OpenGL.Esso spiega in dettaglio che cosa è fatto Se MULTISAMPLE_SGIS è abilitata: http://opengl.org/registry/specs/SGIS/multisample.txt

Vedi anche questa domanda correlata: How are depth values resolved in OpenGL textures when multisampling?

E le risposte a questa domanda, in cui si raccomanda GL_MULTISAMPLE_ARB: where is GL_MULTISAMPLE defined?. Le specifiche per GL_MULTISAMPLE_ARB (2002) sono qui: http://www.opengl.org/registry/specs/ARB/multisample.txt

+0

ottimo, e grazie per il riferimento alla domanda di multicampionamento – user815129