Das theoretisch ideale Antialiasing-Filter für diskret abgetastete Daten ist ein Sinc-Filter , da es alle Frequenzen, die höher als die Nyquist-Frequenz sind, perfekt entfernt, während alle niedrigeren Frequenzen unberührt bleiben. In gewissem Maße können wir daher Antialiasing-Filter erwarten, die dem Sinc-Filter ähnlicher sind, um Bilder mit besserer Qualität zu erzeugen.
Das Zeltfilter (Dreiecksfilter) ähnelt mit Sicherheit der zentralen Spitze des Zinkfilters stärker als das Kastenfilter:
Ein bikubischer Filter (z. B. Mitchell-Netravali) könnte die Form des Sinc, einschließlich der ersten beiden negativen Lappen, noch genauer erfassen.
Die Realität der Filterauswahl ist etwas subtiler als "so gut wie möglich annähernd", da es verschiedene Arten von Artefakten gibt, die durch "nicht ideale" Antialiasing-Filter wie Aliasing, Überblenden und Klingeln erzeugt werden können. Auch können unterschiedliche Filter mehr oder weniger rechenintensiv sein. Es ist also ein Spiel, bei dem versucht wird, die verschiedenen Artefakte gegeneinander und gegen die Leistung auszutauschen. Verschiedene Szenen / Bilder können die eine oder andere Wahl begünstigen, und es ist auch teilweise eine ästhetische Beurteilung.
Was den Grund für die Verwendung eines Zeltfilters in Smallpt angeht, würde ich eine Kombination aus Leistung (es ist ein schnell zu bewertender Filter) und Kürze schätzen - dies kann in wenigen Codezeilen erfolgen, während ein bikubischer Filter eine Menge mehr benötigt Code.
Im Übrigen verwendet smallpt tatsächlich ein 2x2-Subpixel-Raster und platziert einen Zeltfilter an jedem Subpixel . Anschließend werden die Ergebnisse der vier Subpixel gemittelt. Der Gesamteffekt ist also seltsamerweise der der Summe von vier Zelten, die wie eine Pyramide mit einer flachen Oberseite aussehen:
Ich bin mir nicht sicher, ob dies beabsichtigt war oder einfach so, wie es funktionierte. Ich vermute, dass dies zu einem etwas schärferen Bild führt, als wenn ein einzelner Zeltfilter pro Pixel verwendet würde (aufgrund der engeren Unterstützung), aber wahrscheinlich auch zu einem sichtbareren Aliasing.
Ich habe mir gerade Wikipedia-Artikel über bilineare Interpolation angesehen. Ein Zeltfilter ist eine Art bilineare Interpolation. Eine bilineare Interpolation interpoliert auf 2 Dimensionen. Es interpoliert zuerst linear auf einer Dimension und dann auf der anderen.
Wenn Sie sich dieses Bild ansehen, wird es zum Beispiel zuerst in der Spalte und dann in der Zeile angezeigt.
Der Grund, warum dies besser sein könnte, als Farben zu mitteln, ist, dass wenn einer der Punkte näher am Zentrum liegt als ein anderer, er mehr zur endgültigen Farbe beiträgt. Bei der Mittelung der Farben werden alle Punkte gleichermaßen berücksichtigt, auch wenn ein Punkt näher am Zentrum liegt als ein anderer Punkt.
Befinden sich alle 4 Punkte auf festen Positionen in gleichem Abstand vom Zentrum, erhalten Sie für alle Punkte genau 25% Beitrag, das entspricht der Mittelung.
Dies bedeutet, dass Sie Anti-Aliasing implementieren, indem Sie nur mit der vierfachen Auflösung rendern und es dann herunterrechnen. Die Ausgabe zwischen den beiden Möglichkeiten sollte meines Wissens gleich sein.
Welchen Filter sollten Sie also verwenden? Nun, es hängt davon ab, was Sie wollen und Ihre Situation. Wenn Sie zufällige Subpixel-Positionen für Ihre Samples auswählen, ist es möglicherweise besser, eine bilineare Interpolation zu verwenden. Wenn alle Punkte festgelegt sind und Sie nur mit einer höheren Auflösung rendern, kann eine Mittelung hilfreich sein. Am Ende sind das alles nur einige Subpixel-Dinge, die Sie normalerweise nicht oder kaum bemerken. Wenn es also eine Art von AA gibt, dann ist es gut genug. Aber das ist nur meine Meinung und wahrscheinlich die eines durchschnittlichen Betrachters von 3D-Animationen oder Ähnlichem.
Eine bikubische Interpolation sorgt für ein flüssigeres Aussehen. Bikubisch:
Bilinear:
Welches ist besser? Nun, es hängt davon ab, was Sie mögen, und ich glaube nicht, dass es einen großen Unterschied geben wird.
Meine Quellen: https://en.wikipedia.org/wiki/Reconstruction_filter#Image_processing
https://en.wikipedia.org/wiki/Bilinear_interpolation
https://en.wikipedia.org/wiki/Bicubic_interpolation
(Bilder stammen aus Wikipedia und sind gemeinfrei)
Ich hoffe, das hilft, ich möchte nur sagen, dass ich kein Profi bin, ich bin nur jemand, der nur Computergrafik mag. Es könnte sein, dass ich einige Fehler gemacht habe. Wenn ja, sag es einfach und ich ändere es!
quelle