Bei der Raytracing- / Pfadverfolgung besteht eine der einfachsten Möglichkeiten zum Antialiasing des Bildes darin, die Pixelwerte zu überabtasten und die Ergebnisse zu mitteln. IE. Anstatt jedes Sample durch die Mitte des Pixels zu schießen, versetzen Sie die Samples um einen gewissen Betrag.
Bei der Suche im Internet habe ich zwei unterschiedliche Methoden gefunden:
- Generieren Sie Proben nach Belieben und wägen Sie das Ergebnis mit einem Filter ab
- Ein Beispiel ist PBRT
- Generieren Sie die Samples mit einer Verteilung, die der Form eines Filters entspricht
- Zwei Beispiele sind smallpt und Benedikt Bitterli ‚s Tungsten Renderer
Generieren und wiegen
Der grundlegende Prozess ist:
- Erstellen Sie Stichproben, wie Sie möchten (zufällige, geschichtete Sequenzen mit geringer Diskrepanz usw.).
- Versetzen Sie den Kamerastrahl mit zwei Samples (x und y)
- Rendern Sie die Szene mit dem Strahl
- Berechnen Sie mit Hilfe einer Filterfunktion ein Gewicht und den Abstand des Samples zur Pixelmitte. Zum Beispiel Box-Filter, Zelt-Filter, Gauß-Filter usw.)
- Wenden Sie das Gewicht auf die Farbe aus dem Render an
In Form eines Filters generieren
Die Grundvoraussetzung ist die Verwendung von Inverse Transformation Sampling , um Samples zu erstellen, die entsprechend der Form eines Filters verteilt sind. Zum Beispiel wäre ein Histogramm eines Samples, das in der Form eines Gaußschen verteilt ist:
Dies kann entweder exakt erfolgen oder durch Binden der Funktion in ein diskretes pdf / cdf. smallpt verwendet die exakte Inverse cdf eines Zeltfilters. Beispiele für Binning-Methoden finden Sie hier
Fragen
Was sind die Vor- und Nachteile jeder Methode? Und warum sollten Sie eins übereinander verwenden? Ich kann mir ein paar Dinge vorstellen:
Generieren und Wiegen scheint die robusteste Methode zu sein, die eine beliebige Kombination einer beliebigen Probenahmemethode mit einem beliebigen Filter ermöglicht. Sie müssen jedoch die Gewichte im ImageBuffer nachverfolgen und anschließend eine endgültige Auflösung vornehmen.
Das Generieren in Form eines Filters unterstützt nur positive Filterformen (z. B. keine Mitchell-, Catmull-Rom- oder Lanczos-Filter), da Sie keine negativen PDF-Dateien haben können. Wie oben erwähnt, ist die Implementierung jedoch einfacher, da Sie keine Gewichte nachverfolgen müssen.
Letztendlich kann man sich Methode 2 jedoch als eine Vereinfachung von Methode 1 vorstellen, da sie im Wesentlichen eine implizite Box-Filter-Gewichtung verwendet.
quelle
Antworten:
Zu diesem Thema gibt es eine großartige Veröffentlichung aus dem Jahr 2006, Filter Importance Sampling . Sie schlagen Ihre Methode 2 vor, untersuchen die Eigenschaften und sprechen sich generell dafür aus. Sie behaupten, dass diese Methode glattere Rendering-Ergebnisse liefert, da alle Samples, die zu einem Pixel beitragen, gleich gewichtet werden, wodurch die Varianz der endgültigen Pixelwerte verringert wird. Dies ist einigermaßen sinnvoll, da es in Monte Carlo eine allgemeine Maxime ist, dass die Wichtigkeitsabtastung eine geringere Varianz ergibt als gewichtete Abtastungen.
Methode 2 hat auch den Vorteil, dass die Parallelisierung etwas einfacher ist, da die Berechnungen jedes Pixels unabhängig von allen anderen Pixeln sind, während in Methode 1 die Abtastergebnisse über benachbarte Pixel hinweg geteilt werden (und daher irgendwie synchronisiert / kommuniziert werden müssen, wenn Pixel über parallelisiert werden mehrere Prozessoren). Aus dem gleichen Grund ist es mit Methode 2 einfacher, adaptive Abtastungen durchzuführen (mehr Abtastungen in Bereichen mit hoher Varianz des Bildes) als mit Methode 1.
In der Arbeit experimentierten sie auch mit einem Mitchell-Filter, indem sie von abs () des Filters abtasteten und dann jede Probe mit +1 oder −1 gewichteten, wie @trichoplax vorschlug. Dies hat jedoch letztendlich die Varianz erhöht und ist schlechter als Methode 1, sodass sie zu dem Schluss kommen, dass Methode 2 nur für positive Filter verwendbar ist.
Abgesehen davon sind die Ergebnisse dieser Arbeit möglicherweise nicht universell anwendbar, und es kann etwas szenenabhängig sein, welche Abtastmethode besser ist. Ich hab geschrieben einen Blog-Beitrag geschrieben, der diese Frage untersuchtWir haben 2014 unabhängig eine synthetische "Bildfunktion" anstelle eines vollständigen Renderings verwendet und festgestellt, dass Methode 1 zu visuell ansprechenderen Ergebnissen führt, da Kanten mit hohem Kontrast besser geglättet werden. Benedikt Bitterli äußerte sich auch zu diesem Beitrag und berichtete über ein ähnliches Problem mit seinem Renderer (übermäßiges hochfrequentes Rauschen um Lichtquellen bei Verwendung von Methode 2). Darüber hinaus stellte ich fest, dass der Hauptunterschied zwischen den Methoden die Frequenz des resultierenden Rauschens war: Methode 2 ergibt ein höherfrequentes "pixelgroßes" Rauschen, während Methode 1 Rausch- "Körner" mit einem Durchmesser von 2-3 Pixel ergibt Die Amplitude des Rauschens war für beide ähnlich. Welche Art von Rauschen weniger schlecht aussieht, ist wahrscheinlich eine Frage der persönlichen Präferenz.
quelle