Anti-Aliasing im Detail
24. Februar 2002 / von aths / Seite 3 von 18
Sampling | |
(3D-Grafik pixelweise) |
Oft wird Anti-Aliasing erklärt, ohne dass der herkömmliche Raster-Prozess beschrieben wird. Dieser didaktische Fehler soll hier nicht gemacht werden. Daher zunächst ein Blick auf die normale Computergrafik ohne Kantenglättung. Im Bild ist ein langes Rechteck zu sehen, welches schräg über einen bestimmten Bereich geht. Jedes Kästen soll für ein Pixel stehen.
Eine mathematisch unendlich genaues Gebilde soll auf ein endlich genaues Raster abgebildet werden. |
Einige Pixel sind komplett schwarz. Es ist klar, dass diese auf dem Bildschirm ebenfalls schwarz sein müssen. Was ist aber mit denen, die teilweise schwarz und teilweise weiss sind? Ein Pixel, also Bild-Element, kann schließlich nur eine Farbe bekommen! Man könnte ermitteln, welche Pixel überwiegend schwarz bzw. weiss enthalten und ihnen dann diese Farbe zuweisen:
Immerhin: Eine Möglichkeit der Darstellung auf dem Bildschirm. |
Sonderlich schön sieht das aber nicht aus, deutlich sind Treppenstufen zu sehen. Doch eine Kante ist keine Treppe! Die bei einem Raster optimale Möglichkeit wäre, die Farbwerte anteilig der überstrichenen Fläche in den entgültigen Farbwert des jeweiligen Pixels eingehen zu lassen:
Besser geht es nun einmal nicht. |
Sind damit nicht alle Probleme gelöst? Leider nein. Denn wie soll die Grafikkarte feststellen, wie viel vom Pixel durch das Polygon bedeckt wird? Sie müsste dazu etliche geometrischen Berechnungen durchführen.
Nun können sich in einem Pixel natürlich mehrere Polygon-Kanten befinden, deren anteiligen Flächen gespeichert werden müssten. Man bräuchte also zusätzlichen Speicherplatz, zumal ein Dreieck ja ein anderes überdecken kann. Das verkompliziert die Berechnungen derart, dass dies in absehbarer Zukunft nicht realisierbar sind. Höchstens auf Chips, die das Tile-Base-Rendering-Konzept verfolgen (wie die PowerVR-Serie) könnte vielleicht in Zukunft "echtes Anti-Aliasing" durchgeführt werden, wenn sie denn diesbezüglich erweitert werden würden.
Angeblich werden zur Zeit von einer Gruppe namens Parims die theoretischen Grundlagen für einen neuen Super-Grafikchip geschaffen. Dieser soll dann auch echtes Anti-Aliasing können. Nun, während die erforderliche Mathematik für die Spezialisten durchaus beherrschbar ist, trifft das auf die Realisierbarkeit noch nicht zu. Die entsprechende Hardware muss in Echtzeit arbeiten - und bezahlbar bleiben. Damit wird ein wichtiger Punkt angesprochen: Bildverbesserung durch Anti-Aliasing soll maximalen Nutzen bei minimalem Aufwand bringen.
Aktuell ist echtes Anti-Aliasing jedenfalls nicht möglich. Jede aktuelle Realisierung ist nur suboptimal.
Zurück zum Beispiel: Lässt sich denn wenigstens feststellen, welches Polygon überwiegend in einem Pixel vorkommt? Mit einem Trick geht das: Schneidet man ein Quadrat mit einer Geraden in zwei Teile, liegt der Mittelpunkt immer in der größeren Hälfte. Es reicht also, die Mitte des Pixels abzutasten. Damit wird garantiert das Polygon erwischt, welches in diesem Pixel überwiegt. So ist die Mitte die optimale Sampleposition: Diese Stelle repäsentiert am besten das gesamte Pixel.
Man kann es drehen und wenden wie man will: Der Mittelpunkt liegt immer in der größeren Fläche. |
Diese Methode kann bei Dreiecks-Ecken zwar versagen. In der Praxis kommen allerdings sehr viel mehr Kanten als Ecken vor. Heutige 3D-Hardware stellt für jedes Dreieck fest, welche Pixel dieses jeweils bedeckt. Da die Pixelmitte als Sampleposition genutzt wird, werden (in der Regel) nur die Pixel belegt, in denen das Dreieck auch den größten Teil der Pixelfläche bedeckt. Damit wird im Rahmen der Möglichkeiten annähernd die beste Darstellung geboten.
Die 3D-Szene wird auf die Bildschirm-Auflösung gerastert. Die Abtastung findet praktischerweise in der Mitte eines jeden Pixels statt.
Wenn nun korrektes Anti-Aliasing heutzutage noch nicht machbar ist, so hat man sich doch einiges einfallen lassen, um schon jetzt den Aliasing-Effekt zu bekämpen.