Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Paar Fragen zu Antialiasing

  Alt 13. Jun 2012, 02:20
NamenLozers dritter Ansatz wird meistens mit Filtern betrieben, die auch Vektorisierer einsetzen (z.B. Faltung mit Sobel-Operator; diskrete genäherte 1. Ableitungen im Allgemeinen). Das dadurch gewonnene Vektorfeld wird über die Längen auf ein Skalarfeld (letztlich praktisch ein Graustufenbitmap) reduziert, dass man als Parameter für einen Unschärfefilter einsetzt (z.B. als Radius für Gauss'sche Unschärfe). Auf GPUs ist dies ziemlich effizient umsetzbar, für die CPU ist das aber auch ein Knüller. Zusammen mit der Tatsache, dass die Ergebnisse auch bei guter Einstellung der Parameter immer eher mäßig aussehen, ist das hier mMn die schlechteste Alternative. Auch wenn sie zunächst lukrativ erscheint, da man an seinen bestehenden Zeichenroutinen nichts verändern müsste.

Das effizienteste ist definitiv das AA direkt beim Zeichnen, vor allem da der Bresenham-Algo ohnehin schon die dazu nötigen Werte "frei Haus" mit produziert. Da es dort auch Anpassungen für Nicht-Geraden gibt, wäre das ein guter Weg. Nachteil: Man müsste entweder eine fertige Lib nutzen die das bereits drauf hat (Graphics32 dürfte da ein netter Vertreter sein), oder selbst bauen. Alpha wird unproblematisch, wenn man es vormultipliziert (Pre-Multiplied Alpha), was die besseren Libs imho auch tun.

Vom Ergebnis her ist, zumindest im ganz allgemeinen Fall, das Oversampling (oder Supersampling) vorzuziehen. Es erfordert auch eher kleine Änderungen an bestehendem Code. So lange man nicht zig temporäre Bitmaps im Hintergrund vorhält (sondern idealerweise alles in Vektor- oder Sprachform bis zum finalen Zeichnen hat), und nicht arg über 16-fach geht, sollte das für aktuelle Systeme auch praktikabel sein. Jedoch nicht, wenn 60fps angestrebt werden
Hier liegt der Teufel eher im Mikromanagement bei Optimierungen, wie z.B. dem nur partiellen Neuzeichnen wenn sich nur Teilbereiche in einem bestehenden Bild ändern. Geschwindigkeitstechnisch alle Male lohnenswert, bedarf dann aber eines "Dran-Denkens" beim Aufbau des gesamten Grafik Subsystems. (So Dinge wie Nachrichten an überschneidend liegende Elemente sich neuzuzeichnen (in der richtigen Reihenfolge) - ein wenig wie es Windows auch bei seinen Controls in ähnlicher Weise macht - fallen mir da spontan ein.)


Letztlich ist da wohl die Frage wie du deine Grafiken bisher malst, was das dann für Bilder sind, und worin das Hauptaugenmerk besteht (Geschwindigkeit, "Schlankheit", Qualität um jeden Preis, ...)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (13. Jun 2012 um 02:24 Uhr)
  Mit Zitat antworten Zitat