Zum 3DCenter Forum
Inhalt




Grafik-Filter: Bilinear bis Anisotrop im Detail

10. Dezember 2001 / von aths / Seite 8 von 9



  Pixel-Details
  (Anti-Aliasing)

Ein auf das gesamte Bild angewendetes Anti-Aliasing-Verfahren nach der Supersampling-Methode mindert nicht nur die Treppen-Effekte, sondern verbessert auch die Texturen. Auf zweierlei Art:

Man kann sich ein tieferes LOD-Level erlauben. Rechts wird 2x-Anti-Aliasing genutzt. Obwohl die Textur schärfer ist, wird dank dem Supersampling-Filter das Flimmern genauso unterdrückt wie im Bild links, welches ohne Anti-Aliasing auskommt.

Mit Vollbild-Anti-Aliasing sind auf derartigen Texturen mehr Details sichtbar, obwohl das LOD jeweils gleich ist.

Es ist gut zu erkennen, dass die Textur nicht einfach unschärfer gemacht wurde. Man sehe beim Ziffernblatt auf die Zahl "1". Ein Unschärfe-Filter würde um diesen Strich die Pixel noch etwas abdunkeln.

Es gibt Argumente für und wider FSAA, wenn man die Texturen verbessern will. Dafür spricht, dass pro Pixel zusätzliche Texel mit einfließen, was im Prinzip auf angenäherte anisotrope Filterung hinaus läuft - und "nebenbei" die Treppen-Effekt reduziert werden. Dagegen spricht, dass der gleiche Aufwand in einen anisotropen Filter gesteckt noch bessere Texturen ergibt. Trilineare Filterung + 4x FSAA bedeutet letztlich, 32 Texel pro Pixel zu lesen. Das Muster der 8 bilinear gefilterten Texel (8 x 4 = 32) kann durch den anisotropen Filter direkt an den Sichtwinkel angepasst werden. Allerdings ist dann natürlich noch ein zusätzliches Anti-Aliasing notwendig, welches eben "nur" die Kanten berücksichtigt.

Übliches Anti-Aliasing funktioniert grundsätzlich so, dass pro Pixel nicht nur ein, sondern mehrere Subpixel einfließen. Bislang wurde davon ausgegangen, dass Anti-Aliasing auf das gesamte Bild angewendet wird. Um Bandbreite zu sparen gibt es spezielle Verfahren, die lediglich die Polygon-Kanten glätten. Texturen werden so nicht verbessert. Dafür ist dann der anisotrope Filter zuständig. nVidia entwickelte nun einen Bild-Filter namens Quincunx. Der funktioniert so:

Nur die hier hellgrünen Subpixel werden berechnet und in den Backbuffer geschrieben. Bevor das Bild in den Framebuffer kommt, fließen die hier dunkelgrünen Umgebungs-Subpixel, die von den Nachbarpixeln ausgelesen werden, in den entgültigen Pixel mit ein. Links die 2x, rechts die 4x-Variante. Durch die Mehrfachverwendung hat jeder Rand-Subpixel letztlich das gleiche Gewicht wie der Mittelpunkt.

Mit einem Zwei-Zeilen-Cache lässt sich das effektiv umsetzen. Und es fließen dank Quincunx mehr als 2 bzw. 4 Subpixel in das entgültige Pixel mit ein. Aber die zusätzlichen Werte wurden ja nicht extra berechnet, sondern werden lediglich wiederverwendet. Das ist also letztlich ein Unschärfe-Filter. Vorteilhaft ist, dass die Kantenglättung subjektiv verbessert wird.

Nachteilig ist, dass man mit Quincunx die Qualität aufwändig anisotrop gefilterter Texturen wieder senkt. Der anisotrope Filter bietet in hohen Einstellungen Texturen, die gleichzeitig ein scharfes Bild zeigen und trotzdem nicht "schimmern". Denn dieser Filter, sowie die Methode mit Supersampling eine Überabtastung vorzunehmen, tun das auf Subpixel-Ebene. Der Quincunx-Filter dehnt die Unschärfe auf volle Pixelbreite aus und bietet wegen dem Subpixel-Recycling keine zusätzliche Überabtastung.

Vergrößerung auf 200%: 2x Rotated Grid Multisamplig Anti-Aliasing. Das untere Bild verwendet zusätzlich den Quincunx-Filter: Verwaschene Texturen.

Würde das Supersampling-Verfahren angewendet, könnte Quincunx ein vernünftigeres Ergebniss liefern. Das Subpixel links oben repräsentiert ja seine Umgebung. Ihn in den anderen Pixeln an passender Stelle wieder zu verwenden erscheint nicht falsch. Weil man die zweifache Subpixel-Menge nicht mit ganzzahligen Verhältnissen in der gleichen Fläche unterbekommt, wäre das Endergebnis dann eine gefilterte Verkleinerung, die etwas Unschärfe erzeugt. Das Problem bei Quincunx liegt beim Multisampling.

Von Polygonkanten abgesehen erhält das Subpixel links oben immer den gleichen Farbwert wie der Mittelpunkt, da beim Multisampling nicht pro Subpixel, sondern nur pro Pixel ein gefilteter Texel erzeugt wird. Also fließt dann nur ein "echter" Subpixel ein, der aber für vier Pixel verwendet wird. Auf Textur-Ebene gesehen wird so aus der 2:5-Abtastung (die für Polygonkanten gilt) eine 1:4-Abtastung. Ein Quincunx mit 2x Supersampling-Antialiasing würde zusätzlich erlauben, das LOD um 0.5 zu senken. So dass zunächst eine zusätzliche Schärfe herein gebracht würde, ehe sie mit Quincunx wieder weggefiltert wäre. Senkt man das LOD jedoch mit dem verwendeten Multisampling-Verfahren, ist mit (leichtem) Texturflimmern zu rechnen. Wird nur bi- oder trilinear gefiltert, sind die meisten Texturen sowieso unscharf. Das würde Quincunx kaum verschlimmern.

Es gibt Situationen, da liefert der Quincunx-Filter auf den ersten Blick ein besseres Bild. Stellt man die Anti-Aliasing-Methode und das Level der anisotropen Filterung optimal ein, wird bei gleicher Performance ein noch besseres Bild erzeugt. Das Quincunx-Verfahren senkt den optischen Vorteil, den man mit anisotroper Filterung erhält und ist damit ein Filter, der die Qualität insgesamt verschlechtert - ein Novum. Leider zog ATI mit der Performance-Einstellung ihrer Smoothvision-Technik nach und recycelt ebenfalls Subpixel.

Jetzt wäre nur noch der Unterschied zwischen Überabtastung und uneinheitlicher Filterung (sprich Supersampling vs. Anisotropic Filtering) zu klären. Der anisotrope Filter nimmt eine an den Blickwinkel angepasste Überabtastung vor und erreicht deshalb mit weniger Aufwand bessere Texturqualität.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig Zurück / Back Weiter / Next

Shortcuts
nach oben