Benutzer:Hybrid Dog/sandbox
Multisample anti-aliasing (MSAA) ist eine Art von Kantenglättung, die zur Verbesserung bei der Computergrafik verwendet wird.
Definition
Der Begriff bezieht sich im Allgemeinen auf einen Spezialfall von Supersampling. Anfängliche Implementierungen von full-scene anti-aliasing (FSAA) funktionierten theoretisch durch einfaches Berechnen eines Bildes in einer höheren Auflösung und darauf folgendem Heruntertakten zu der benötigten Auflösung. Die meisten modernen Grafikprozessoren sind mit dieser Form der Kantenglättung kompatibel, aber sie benötigt viele Ressourcen, wie z.B. Textur, Bandweite und Füllrate. (Wenn ein Programm höchst TCL- oder CPU-gebunden ist, kann Supersampling ohne einer großen Veränderung der Performance verwendet werden.)
Laut der OpenGL GL_ARB_multisample Spezifikation[1] bezieht sich "Multisampling" auf einer speziellen Optimierung von Supersampling: Das Fragment Programm wird einmal pro Pixel ausgewertet und "echtes" Supersampling wird nur für Werte der Tiefe und Schablone benutzt. (Das ist nicht das gleiche wie Supersampling, aber durch die OpenGL 1.5 Spezifikation[2] wurde die Definition erneuert: ganze Supersampling Implementationen werden auch miteinbezogen.)
Im Allgemeinen bezieht sich "Multisampling" auf irgendeinen Spezialfall von Supersampling, wobei manche Komponenten des endgültigen Bildes nicht ganz wie bei Supersampling verändert wurden. Die folgenden Listen beziehen sich gezielt auf die ARB_multisample Definition.
Beschreibung
Wenn ein Fragment mit MSAA berechnet wird und eines der Multi Sample Positionen eines Pixels von dem Dreieck, das das Pixel geschaffen hat, bedeckt wird, muss eine Shader Berechnung für dieses Dreieck durchgeführt werden. Shading Eingaben (Textur Koordinaten, etc) werden von den Werten, die bei den Eckpunkten des Dreiecks gespeichert sind, eingefügt, wobei gewöhnlich die Mitte des Pixels als Sample Punkt benutzt wird. Wenn sich die Mitte des Pixels außerhalb des Dreiecks befindet, werden die shading Eingaben extrapoliert. Extrapolation kann durch den Gebrauch von Schwerpunkt Sampling vermieden werden, wobei die Shading Eingaben bei der bedeckten Multisample Position, die sich am nächsten zur Mitte des Pixels befindet, abgetastet werden, was aber möglicherweise in einer uneinheitlichen Bildschirm Platz Abtastung in der Nähe der Ecken ausartet.[3]
Vorteile
- Der Pixel-Shader muss gewöhnlich nur einmal pro Pixel ausgewerted werden.
- Die Ecken von Polygonen (die naheliegendste Quelle von Aliasing der 3D-Grafik) werden geglättet.
Nachteile
Alpha testing
Alpha testing ist eine Technik, die häufig bei älteren Videospielen aufzuweisen ist. Sie wird benutzt, um durchsichtige Objekte zu berechnen, indem verhindert wird, dass bestimmte Pixel zum Framebuffer geschrieben werden.[4] Wenn der Wert der Transparenz eines durchsichtigen Fragments außerhalb eines bestimmten Bereiches liegt, wird dieser nach dem alpha testing verworfen. Weil das auf einer Pixel Basis ausgeführt wird, versagen bei diesen Pixel das multi-sampling (jedes der multisamples im Pixel sind verworfen aufgrund des alpha Tests). Das fertige Bild könnte Aliasing entlang der Ecken von transparenten Objekten oder der Ecken innerhalb von Texturen enthalten, trotzdem ist die Bildqualität nicht schlechter als bei deaktivierter Kantenglättung.[5] Durchsichtige Objekte, die durch alpha-test Texturen modelliert wurden, sind auch betroffen. Dieser Effekt kann minimiert werden, indem Objekte mit transparenten Texturen öfters berechnet werden, was eine deutliche Verringerung der Performance für Szenen, die viele transparente Objekte enthalten, bewirken würde.[6]
Aliasing
Da multi-sampling Texturen nur einmal pro Pixel berechnet, werden Aliasing und andere Artefakte immer noch innerhalb berechneter Polygone sichtbar sein, wo der Fragment Shader Auswurf hohe häufige Komponenten enthält
Sampling methods
Point sampling
In a point sampled mask, the coverage bit for each multisample is only set if the multisample location is located inside the rendered primitive. Samples are never taken from outside a rendered primitive, so images produced using point-sampling will be geometrically correct, but filtering quality may be low because the proportion of bits set in the pixel’s coverage mask may not be equal to the proportion of the pixel that is actually covered by the fragment in question.
Area sampling
Filtering quality can be improved by using area sampled masks. In this method, the number of bits set in a coverage mask for a pixel should be proportionate to the actual area coverage of the fragment. This will result in some coverage bits being set for multisamples that are not actually located within the rendered primitive, and can cause aliasing and other artifacts.
Sample Muster
Regelmäßiges Raster
A regular grid sample Muster, where multisample locations form an evenly spaced grid throughout the pixel, is easy to implement and simplifies attribute evaluation (i.e. setting subpixel masks, sampling color and depth). This method is computationally expensive due to the large number of samples. Edge optimization is poor for screen-aligned edges, but image quality is good when the number of multisamples is large.
Sparse regular grid
A sparse regular grid sample Muster is a subset of samples that are chosen from the regular grid sample Muster. As with the regular grid, attribute evaluation is simplified due to regular spacing. The method is less computationally expensive due to having a fewer samples. Edge optimization is good for screen aligned edges, and image quality is good for a moderate number of multisamples.
Stochastic sample Muster
A stochastic sample Muster is a random distribution of multisamples throughout the pixel. The irregular spacing of samples makes attribute evaluation complicated. The method is cost efficient due to low sample count (compared to regular grid Muster). Edge optimization with this method, although sub-optimal for screen aligned edges. Image quality is excellent for a moderate number of samples.
Qualität
Compared to supersampling, multisample anti-aliasing can provide similar quality at higher performance, or better quality for the same performance. Further improved results can be achieved by using rotated grid subpixel masks. The additional bandwidth required by multi-sampling is reasonably low if Z and colour compression are available.[7]
There are 2x, 4x, 8x, and 16x MSAA. Higher results in better quality but can be slower.
Siehe auch
Einzelnachweise
- ↑ ARB_multisample Additions to Chapter 3 of the 1.2.1 specification.
- ↑ OpenGL 1.5 specification.
- ↑ The OpenGL Pipeline Newsletter Archiviert vom Original am 13. März 2008. 003, Dezember.
- ↑ ShaderLab syntax: Alpha testing. Unity3d.com. 27. April 2008. Abgerufen am 31. Juli 2012.
- ↑ Multisampling Anti-Aliasing: A Closeup View. Alt.3dcenter.org. Abgerufen am 31. Juli 2012.
- ↑ Visual comparison of the various Anti-Aliasing modes. Nhancer.com. Abgerufen am 31. Juli 2012.
- ↑ Multisampling Anti-Aliasing: A Closeup View. Alt.3dcenter.org. Abgerufen am 31. Juli 2012.
Category:Image processing Category:Anti-aliasing algorithms