Wie funktioniert Multisample wirklich?

8

Ich bin sehr daran interessiert zu verstehen, wie Multisampling funktioniert. Ich habe eine große Literatur darüber gefunden, wie man sie aktivieren oder verwenden kann, aber sehr wenig Informationen darüber, was sie wirklich tut, um eine Antialias-Wiedergabe zu erzielen. Was ich an vielen Orten gefunden habe, sind widersprüchliche Informationen, die mich nur noch mehr verwirren.

Bitte beachten Sie, dass Ich weiß, wie man Multisampling aktiviert und benutzt (ich benutze es tatsächlich bereits), was ich nicht weiß ist, welche Art von Daten wirklich in die multisamplizierten Renderpuffers / Texturen gelangt, und wie diese Daten in der Rendering-Pipeline verwendet werden.

Ich kann sehr gut verstehen, wie Supersampling funktioniert, aber Multisampling hat immer noch einige dunkle Bereiche, die ich gerne verstehen würde.

Hier ist was die Spezifikationen sagen: (OpenGL 4.2)

  

Pixel-Abtastwerte, einschließlich Farb-, Tiefen- und Schablonenwerte, werden in diesem gespeichert   Puffer (der Multisample-Puffer). Proben enthalten separate Farbwerte für jede Fragmentfarbe.

     

...

     

Beim Multisample-Rendering wird der Inhalt eines Pixelfragments geändert   In zwei Wegen. Zuerst enthält jedes Fragment einen Coverage-Wert mit SAMPLES-Bits.

     

...

     

Zweitens enthält jedes Fragment SAMPLES-Tiefenwerte und Mengen von assoziierten   Daten, anstelle der einzelnen Tiefe Wert und Menge der zugehörigen Daten, die beibehalten wird   im Single-Sample-Rendering-Modus.

Jedes Muster enthält also eine eindeutige Farbe, ein Überdeckungsbit und eine Tiefe. Was ist der Unterschied zu einem normalen Supersampling? Scheint wie ein "gewichtetes" Supersampling für mich, bei dem jeder endgültige Pixelwert durch den Coverage-Wert seiner Samples bestimmt wird anstatt durch einen einfachen Durchschnitt, aber ich bin mir darüber sehr unsicher. Und was ist mit Texturkoordinaten auf Probeebene?

Wenn ich zum Beispiel Normale in einer RGBF-Multisampling-Textur speichere, lese ich sie "antialiased" (also näherungsweise 0) an den Kanten eines Polygons?

Ein Fragment-Shader wird einmal pro Fragment aufgerufen, es sei denn, er verwendet gl_SampleID, glSampleIn oder ein 'sample'-Speicherqualifikationsmerkmal. Wie kann ein Fragment-Shader einmal pro Fragment aufgerufen werden und ein Antialias-Rendering erhalten?

    
user815129 14.01.2012, 10:02
quelle

1 Antwort

5

OpenGL auf Silicon Graphics Systemen:

Ссылка

Erwähnungen: Wenn Sie Multisampling verwenden und Farbe zurücklesen, erhalten Sie den aufgelösten Farbwert (dh den Durchschnitt der Samples). Wenn Sie Schablone oder Tiefe zurücklesen, erhalten Sie in der Regel einen einzelnen Beispielwert anstelle des Durchschnitts. Dieser Abtastwert ist normalerweise der Wert, der der Mitte des Pixels am nächsten ist.

Und da ist diese technische Spezifikation (1994) von der OpenGL-Seite. Es wird ausführlich erklärt, was getan wird, wenn MULTISAMPLE_SGIS aktiviert ist: Ссылка

Siehe auch diese verwandte Frage: Wie ist die Tiefe? Werte, die in OpenGL-Texturen beim Multisampling aufgelöst werden?

Und die Antworten auf diese Frage, für die GL_MULTISAMPLE_ARB empfohlen wird: Wo ist GL_MULTISAMPLE definiert? . Die Spezifikationen für GL_MULTISAMPLE_ARB (2002) sind hier: Ссылка

    
The Nail 14.01.2012, 11:25
quelle

Tags und Links