1 Punkte von GN⁺ 2024-11-21 | 1 Kommentare | Auf WhatsApp teilen

Die heutige Reise: Anti-Aliasing

  • Anti-Aliasing ist eine Kunstform, die sich über Jahrzehnte hinweg durch Mathematik, kreative Technik und kontinuierliche Innovation entwickelt hat.
  • Es gibt verschiedene Ansätze wie SSAA, SMAA und DLAA, die jeweils auf unterschiedliche Weise dasselbe Ziel erreichen wollen.
  • In diesem Artikel wird erklärt, wie diese Methoden funktionieren, und ein neuer Ansatz zur Problemlösung vorgestellt: analytisches Anti-Aliasing.

Einrichtung

  • Um Anti-Aliasing-Algorithmen zu verstehen, wird ein WebGL-Canvas verwendet, auf dem ein sich bewegender Kreis gezeichnet und implementiert wird.
  • Falls die Auflösung zu hoch ist und kein Aliasing sichtbar wird, kann man dies durch eine niedrigere Auflösung überprüfen.

Technische Analyse

  • Das Verständnis von GPU-Code ist nicht zwingend erforderlich, hilft aber dabei, den analytischen Teil zu verstehen.
  • Der Kreis wird nicht geometrisch gezeichnet, sondern durch einen Shader erzeugt.

SSAA

  • SSAA steht für Super Sampling Anti-Aliasing und funktioniert, indem zunächst in höherer Auflösung gerendert und anschließend herunterskaliert wird.
  • Die Implementierung ist einfach, aber der Speicher- und Rechenaufwand ist hoch.
  • Eine geeignete Sample-Platzierung ist erforderlich, ebenso wie eine tiefgehende Integration in die Rendering-Pipeline.

MSAA

  • MSAA führt Super Sampling nur an der Silhouette des Modells, bei überlappender Geometrie und an Texturkanten durch.
  • Es wird von der Hardware implementiert, und die Unterstützung hängt von der jeweiligen Hardware ab.
  • In bestimmten Situationen kann dabei kein Performance-Aufwand entstehen.

Post-Process-Anti-Aliasing

  • 2009 entstand MLAA aus einer Arbeit von Alexander Reshetov.
  • FXAA ist ein von MLAA inspirierter Algorithmus, der wenig Performance kostet und leicht zu implementieren ist.
  • In komplexen Szenen ist es effektiver.

Analytisches Anti-Aliasing

  • Analytisches Anti-Aliasing nähert sich dem Problem umgekehrt: Da die benötigte Form bekannt ist, werden bereits anti-aliased Pixel direkt auf den Bildschirm gezeichnet.
  • Es benötigt keine zusätzlichen Buffer oder Hardware-Anforderungen und kann selbst auf einfachem WebGL 1.0 oder OpenGLES 2.0 ausgeführt werden.
  • Durch die Berechnung der Pixelgröße wird der Rand der Form ausgeblendet.

Implementierung

  • Mithilfe von Signed Distance Fields lässt sich an jedem gesampelten Punkt der Abstand zur gewünschten Form bestimmen.
  • Zur Berechnung der Pixelgröße werden die Funktionen dFdx, dFdy und fwidth verwendet.
  • Das Blending erfolgt per Alpha-Blending oder MSAA + Alpha to Coverage.
  • Zur Performance-Optimierung kann statt smoothstep auch linearstep verwendet werden.

Fazit

  • Analytisches Anti-Aliasing sorgt für weiche Kanten, indem die Ränder von Formen präzise ausgeblendet werden.
  • Es gibt verschiedene Implementierungsmöglichkeiten, bei denen zwischen Performance und Genauigkeit gewählt werden kann.

1 Kommentare

 
GN⁺ 2024-11-21
Hacker-News-Kommentare
  • Die Analyse der Grafikprogrammierung erfolgte anhand von WebGL-Beispielen und der Artikel geht sehr in die Tiefe
    • Ich habe bisher MSAAx4 verwendet, denke aber über einen Wechsel zu FXAA/TAA nach und konnte dabei einen analytischen Ansatz für UI-Elemente kennenlernen
    • Es gibt nur wenige Materialien zur Grafikprogrammierung, aber die Liste der Frame-Analysen ist eine nützliche Ressource
    • Viele Spiele erklären die Unterschiede zwischen den Abkürzungen für AA-Einstellungen nicht, was wenig benutzerfreundlich ist
    • SDF (mSDF) ist bereits eine hinreichend gute klassische Technik
    • Das Lösen von Bézier-Kurvensegmenten auf Pixelebene in Slug und DirectWrite ist die aktuelle oder künftige Technik
    • Ich habe zum ersten Mal von der Arbeit von Captain Disillusion erfahren und empfehle sie allen, die sich für Videoeffekte interessieren
    • Ein Frame mit Kreis und vergrößertem Ausschnitt ist eine hervorragende Art, die Botschaft zu vermitteln
    • Die sanften Farbverläufe sind sehr befriedigend
    • 2D- und 3D-Rendering-Engines haben völlig unterschiedliche Ziele und Anwendungsfälle
    • Bei 3D ist es nicht so wichtig, aber bei 2D gibt es Kriterien für AA-Techniken, bei denen Genauigkeit und Bias wichtig sind
    • Der NeoTokyo-Screenshot war beeindruckend und ich hatte viel Spaß beim Betreiben eines Servers für diesen Mod
    • Ich habe SSAA fälschlicherweise als „Screen-Space-Antialiasing“ gelesen