Das mit dem "Runterskalieren" habe ich mir am Anfang auch so vorgestellt, aber ich bin mir ziemlich sicher, dass das genau so
nicht funktioniert.
Der
ryg Blog erklärt auch solche Techniken sehr genau (aber eher theoretisch). Auf
dieser Seite (im Abschnitt "Other rasterization issues and pixel output") ist auch was zum Thema Multi-Sampling erklärt ;-)
Grob erklärt werden pro Pixel einfach mehr "Samples" genommen, um zu testen, ob (bzw. wie stark) ein Pixel innerhalb eines Dreiecks liegt.
Dabei wird aber kein größerer Framebuffer angelegt.
Selbstverständlich wird ein größerer Framebuffer angelegt, wo sonst sollten die Ergebnisse des Samplings gespeichert werden. Der Unterschied zwischen MSAA und SSAA liegt darin, dass MSAA nur die Überdeckung subpixelgenau berechnet, die Farbe jedoch weiterhin an Pixelzentren (oder wahlweise
einem überdeckten Subpixelzentrum, siehe centroid sampling) auswertet. Die Überdeckungsinformation wird anschließend genutzt, um den Schreibvorgang von Farbe und Tiefe in den Framebuffer zu maskieren, d.h. das Ergebnis der Auswertung an (Sub-)Pixelzentren überschreibt nur die Information überdeckter Subpixel im Framebuffer - nicht überdeckte Subpixel bleiben unberührt. Wenn alles Rendering abgeschlossen ist, erhält man das geglättete Bild wie bei SSAA durch eine Runterskalierung (Resolve) des mit Subpixelinformation gefüllten Framebuffers.
Beim Resolve geht natürlich Information verloren. Post-Processing-Effekte wie Tonemapping funktionieren schlecht auf gemittelter Subpixelinformation. Tonemapping ist i.d.R. ein nichtlinearer Vorgang, Anwendung nach Resolve führt bei sehr unterschiedlichen Subpixelhelligkeiten daher wieder zu ungeglätteten Kanten. Ähnliches gilt für tiefenbasierte Effekte, gemittelte Tiefen verschiedener Oberflächen sind im Allgemeinen einfach nur falsch. Deshalb ist es seit der DX10-HW-Generation möglich, direkt auf die Subpixelinformation im (vergrößerten) Framebuffer zuzugreifen. In der Regel versucht man, in einem ersten Schritt alle Pixel mit Subpixeln verschiedener Oberflächen, also gerade die Kanten, ausfindig zu machen. Anschließend werden diese Pixel dann getrennt von allen anderen behandelt, um die Post-Processing-Effekte nur dort für jeden Subpixel zu berechnen (vielfacher Aufwand!).
Mehr Informationen:
http://mynameismjp.wordpress.com/2012/10/24/msaa-overview/