Lage der Kanten bestimmen
Im letzten Schritt des Algorithmus werden die gewonnenen Entfernungsinformationen genutzt, um die Lage der Kanten auf dem Bild und den prozentualen Anteil an jedem Bildpunkt zu bestimmen. Auch hier lassen sich die Berechnungen in einen horizontalen und einen vertikalen Teil trennen. Die Genauigkeit hängt dabei von den Daten der zwei vorangegangenen Schritte ab und liegt etwas über Morphological Antialiasing, aber unter der Genauigkeit von Verfahren, die Aliasing-Artefakte verhindern. Je länger die Kantenartefakte werden, desto genauer arbeitet der Algorithmus, die Qualität kann sogar die von einfachem MSAA und SSAA übertreffen.
Über den Strahlensatz (Binomi Verlag, 2004) lässt sich mithilfe der Abstände in vertikaler und horizontaler Richtung das Flächeninhaltstrapez von jeder Dreieckskante – geschnitten mit den Pixeln – bestimmen. Durch die Optimierung im Zählschritt müssen die Entfernungen auf beiden Seiten der Kante gelesen werden. So können die Gesamtlänge eines Kantenartefaktes und die aktuelle Position auf diesem Kantenartefakt bestimmt und daraus dann der Flächeninhalt hergeleitet werden. Probleme traten auf, wenn sich bei sehr kurzen Kantenartefakten die Flächeninhalte über und unter dem Bildpunkt gegenseitig aufhoben. Um diese Fälle behandeln zu können, genügt es, den Flächeninhalt für halbe Bildpunkte zu berechnen und negative Werte zu verwerfen. Um auch halbe Bildpunkte zu berechnen, habe ich bilineare Filterung auf der Entfernungstextur angewendet und die Formel leicht angepasst.
Verbesserungen und Anmerkungen
Zukünftige Erweiterungen könnten aus einem verbesserten Zählalgorithmus bestehen, der Unterbrechungen von Kanten erkennt, zum Beispiel durch Schnitte mit anderen Polygonkanten. Bei diesen wird der Zähler dann nicht zurückgesetzt. Eine direkte Entfernungsbestimmung zu den Kanten mit den Pixeln unter Zuhilfenahme der Position und der Texturkoordinaten ist leider nicht möglich, weil weder »AlphaTest«-Kanten noch außen liegende Pixel erfasst werden. Malan (Malan, 2010) löste letzteres Problem mit einem speziellen Vertex Shader, der die Polygonkanten um genau eine Pixelbreite skaliert. Leider ist dieses Verfahren nicht sehr robust. Eventuell könnte man auf »Direct3D10«-Hardware ein ein Pixel breites Rechteck extrudieren, um mithilfe der Texturkoordinaten direkt die Flächennutzung zu bestimmen (Egbert, 2008). Allerdings gibt es mit D3D10 auch wieder andere Möglichkeiten, um selbst unter schwierigen Bedingungen MSAA zum Laufen zu bekommen. Anstatt im finalen Schritt die Farbe mit Pointsampling zu ziehen und im Pixelshader zu mischen, wäre es besser, einfach nur die Texturkoordinaten zu ändern und die Farbe mit Bilinearsampling zu holen. Eventuell lohnt es sich, auch die beiden Teilschritte der horizontalen und vertikalen Filterung zusammenzufassen. Um auf der Xbox 360 die Resolve-Operation zwischen den Teilschritten zu sparen, kann man auch Alpha Blending einsetzen und direkt im eDRAM mischen. Das Schreiben von linearen Texturen auf der Xbox 360 lässt sich durch MEMEXPORT bewerkstelligen.
Der Autor
Arne Schober hat seine Karriere 2008 als Software Architect bei einer Berliner Softwarefirma gestartet. Nach einem Praktikum bei IBM Research&Development heuerte er 2009 bei Yager an und ist dort bis heute als Console Developer tätig. Nebenbei hält er Vorträge, wie etwa zum Thema »Realtime Screenspace Antialiasing for Consoles« auf der GDC Europe 2010. Arne hat sich vor allem auf Realtime Posteffects und das Compositing spezialisiert.
» Dieser Artikel erschien ursprünglich in unserem Entwicklermagazin Making Games
Nur angemeldete Benutzer können kommentieren und bewerten.
Dein Kommentar wurde nicht gespeichert. Dies kann folgende Ursachen haben:
1. Der Kommentar ist länger als 4000 Zeichen.
2. Du hast versucht, einen Kommentar innerhalb der 10-Sekunden-Schreibsperre zu senden.
3. Dein Kommentar wurde als Spam identifiziert. Bitte beachte unsere Richtlinien zum Erstellen von Kommentaren.
4. Du verfügst nicht über die nötigen Schreibrechte bzw. wurdest gebannt.
Bei Fragen oder Problemen nutze bitte das Kontakt-Formular.
Nur angemeldete Benutzer können kommentieren und bewerten.
Nur angemeldete Plus-Mitglieder können Plus-Inhalte kommentieren und bewerten.