PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Antialiasing beim Raytracing


horner002
2009-03-11, 14:39:23
Hallo,
ich schreibe gerade einen kleinen Raytracer und habe zwei Fragen bzgl. des Antialiasings.

1: Anstatt für jedes Pixel Antialiasing zu berechnen berechne ich die Farbdifferenz zu seinem linken und oberen Nachbarn und lege anhand dieser Farbdifferenz fest, ob und wie viele Subpixel zum Einsatz kommen. Da ich keine Texturem benutze sollten die einzigen hohen Frequenzen im Bild an Schatten- und Objektkanten auftreten, und die werden auch gut erfasst.
Zwar kann ich immer noch dünne Strukturen verlieren, die genau zwischen zwei Pixelmitten verlaufen, aber das lässt sich wohl nicht vermeiden, wenn ich nicht schon von vornherein supersample.
Ich habe mir mal mit Photoshop den Unterschied zwischen einem voll mit Supersampling und einem mit meiner Methode gerendertem Bild berechnet, bis auf wenige Pixel ist keiner vorhanden.
Reicht diese Methode aus oder gibt es Fälle, an die ich nicht gedacht habe, wo sie vollständig versagt?

2: Die Subpixel ordne ich links/rechts bzw. oben/unten von meiner schon berechneten Pixelmitte an. Dabei kommt immer eine ungerade Anzahl zum Einsatz, also 3x3, 5x5, 7x7.
Für den 3x3-Fall würde das dann so aussehen:
*** * Subpixel
*o* o Pixelmitte
***
Gibt es einen trifftigen Grund, warum in jedem mir bekannten Programm statt dessen immer Modi wie 4x4, 8x8 eingesetzt werden?

Lu-Tze
2009-03-11, 14:59:03
Zwei Ideen:
- Mach das AA abhängig davon, wie stark sich der Z-Wert unterscheidet, bzw. ob sich der Objektstatus irgendwie unterscheidet (also im Schatten / nicht im Schatten)
- Subpixel sampling würde ich lieber über irgendwelche unregelmäßigen Punktverteilungen machen - wie das 6xAA und 8xAA Muster bei ATI-Karten, z.B.

aths
2009-03-11, 15:07:12
Genau. Ich würde sogar probieren, mit zufälligen Sample-Postionen innerhalb eines Radius um die Mitte zu arbeiten. Dabei ist es ok, wenn einige Samples leicht außerhalb der Pixelfläche liegen. Dabei sollte der Abstand zur Mitte nicht gleichverteilt, sondern könnte Gauß-Glocken-förmig sein. Die Subpixeldichte sollte innerhalb der Pixelfläche jedenfalls höher sein als am Rand.

Du kannst zum Beispiel immer mindestens 8 Subpixel nehmen und nach jedem Male prüfen, wie weit sich die Mischfarbe ändert. Wandert die Änderung unter einen Schwellwert, wird abgebrochen.

Beim Zusammenfiltern zur Bildschirmausgabe bitte gammakorrekt (für eine Gamma-Charkteristik von 2,2) filtern und nicht linear. Sonst hast du trotz Extrem-AA noch sichtbare Treppen.

horner002
2009-03-11, 15:36:20
Zwei Ideen:
- Mach das AA abhängig davon, wie stark sich der Z-Wert unterscheidet, bzw. ob sich der Objektstatus irgendwie unterscheidet (also im Schatten / nicht im Schatten)

Die Methode sollte zwar für Objekt- bzw. Schattenkanten gute Ergebnisse liefern, allerdings hätten sie bei Transparenz und Reflektionen Probleme. Selbst wenn ich die Länge aller Strahlen, die zu einem Pixel beitragen, aufsummiere, kann es immer noch vorkommen, das der Wert für zwei Pixel mit großem Farbunterschied fast gleich ist.
Natürlich könnte ich jetzt noch Transparenz, Reflektivität, Strahltiefe,... mit in Betracht ziehen, aber ob sich der Aufwand für eine kleine Bildverbesserung lohnt...

Unreglemäßige Punktverteilung werde ich mir anschauen, zufällige wäre für meinen Fall glaub ich ein bisschen zu Overkill, von wegen Neuberechnung des Rekonstruktionsfilters für jedes Pixel,...

Laut Aufgabenstellung soll ich eigentlich nur 4x4AA ohne Schnickschnack schreiben, und selbst dafür gibt es nur ein paar Zusatzpunkte. Alles, was darüber hinausgeht mach ich nur, weil ich noch genügend Zeit zur Abgabe habe.