Das neue Anti-Aliasing

Montag, 14. Mai 2007
 / von BlackBirdSR & robbitop
 

Jahre nach der Vorstellung des R300-Chips (Radeon 9500/9700) bohrt ATI beim R600-Chip das Raster des Trisetup von einer 12x12 Maske auf eine 16x16 Maske auf. Damit ist nun ein achtfaches Sparsed Grid Multisampling Anti-Aliasing, kurz SG-MSAA, möglich. Dank dem 512 Bit breiten Speicherinterface kann dieses auch mit akzeptabler Leistung umgesetzt werden.

Völlig neu hingegen ist das "Custom Filter Anti-Aliasing" (CFAA). Das Funktionsprinzip ist hierbei simpel: Mittels eines Shaders werden einfach bis zu 12 Subsamples von Nachbarpixeln "geborgt", das kostet schließlich kaum extra Rechenleistung und Bandbreite. Doch kennen wir das nicht irgendwoher? Klar, der "Weichzeichner" Quincunx seitens nVidia wird dem Leser jetzt durch den Kopf schiessen. Doch das ist so nicht ganz korrekt: Das Einbeziehen von Informationen von Nachbarpixeln durch CFAA führt zu einem gewissen Blurfilter, welcher aber in der Praxis deutlich geringer ist als beim Quincunx-Verfahren.

Der Filterkernel nutzt nämlich nur Randsubpixel der Nachbarsamples, der Blureffekt ist also deutlich kleiner. Man hat zusätzlich zur Anti-Aliasing Stufe die Wahl zwischen drei Filterarten: Narrow Tent, Wide Tent und Edge Detection. Der Wide Tent Filter bezieht mehr Subpixel von Nachbarpixeln ein als der Narrow Tentfilter, dies bedeutet allerdings auch einen stärkeren Blureffekt. Wir halten den Nutzen dieser beiden Filter für fragwürdig, da man somit zwar einen stärkeren Kantenglättungseffekt hat, jedoch die hart erarbeiteten Texturen-Bildinformationen wieder ruiniert werden. Dafür kosten diese Modi aber auch nur sehr wenig Performance.

Edge Detection hingegen wendet das Blur-Verfahren gezielt da an, wo es sinnvoll ist. Dazu wird das Bild nachträglich nach Polygonkanten abgesucht. Das geschieht, indem man sich die Eigenheit des Multisampling-Verfahrens zunutze macht: Pixel für Pixel werden über die ROPs in die Shader eingelesen. Diese vergleichen dann die Farbinformation der Subpixel: Ist die Subpixelfarbe der Samples pro Pixel gleich, so handelt es sich nicht um eine Polygonkante und CFAA wird nicht angewendet. Unterscheiden sich die Farbwerte hingegen, so wird CFAA angewandt.

Diese Resolvefunktionen im Shader sind natürlich nicht kostenlos. Es kostet Rechenleistung, ein wenig Bandbreite und ROP-Leistung. Da wir dieses "Edge Detection" Verfahren als sinnvoll erkannten und wie bereits erwähnt von der resultierenden Bildqualität positiv überrascht sind, verwendeten wir dieses Verfahren in unseren Benchmarks gegen das Coverage Sample Verfahren von nVidia. Das CFAA ist allerdings auf den Radeon-Karten der Vorgängergeneration nicht nutzbar, da dessen ROPs nicht die Fähigkeit besitzen, Samples an die Shader zu übergeben.

Da der Edge Detection Modus erst seit dem 8.3742er Treiber, welcher erst seit letztem Freitag verfügbar ist, über ein separates Tool aktivierbar ist, gehört 3DCenter vermutlich zu den wenigen Redaktionen, die diesen Modus überhaupt testen können. Das Fazit im Bildqualitäts- und im Benchmarkteil ist somit natürlich ein völlig anderes.

Ein weiterer Treiber-Fauxpas scheint andere Testredaktionen ebenfalls zu treffen: Im früheren 8.3740er Treiber war das Adaptive Anti-Aliasing laut ATI von einem Bug betroffen, welcher den R600-Chip enorm an Performance kostete. Laut unseren Beobachtungen und Messungen wurde erst in dem von uns verwendeten Treiber AAA durch ein Multisampling-Verfahren (genannt EATM) ersetzt. Dabei ist die Bildqualität für einen solchen Multisampling-Modus sehr gut, jedoch läßt derzeit die Kompatibilität noch zu wünschen übrig. Aus diesen Gründen hielten wir Leistungsmessungen mit Transparenz Anti-Aliasing zu diesem Zeitpunkt nicht für sinnvoll und haben dieses Feature nachfolgend auch nicht bei unseren Benchmarks eingesetzt.