Algorithmen zum Entfernen von hochfrequentem Rauschen aus der Pfadverfolgung

8

Ich habe eine Weile an meinem eigenen Renderer gearbeitet und frage mich, ob es eine Möglichkeit gibt, das Monte-Carlo-Rauschen aus dem gerenderten Bild zu entfernen, außer lange darauf zu warten, dass es konvergiert.

Ich habe festgestellt, dass das Bild unscharf ist, was nicht wirklich hilfreich ist, da es die Qualität / Schärfe des Bildes erheblich verringert. Und ich kann das Gleiche erreichen, indem ich ein kleines Bild mit mehr Samples rendere und es dann vergrößere.

Gibt es einen Algorithmus, der entwickelt wurde, um mit Bildrauschen bei der Pfadverfolgung umzugehen?

Mary Chang
quelle
Interessieren Sie sich mehr für die Nachbearbeitung, um das Rauschen zu verschleiern, oder für Möglichkeiten, die Konvergenz zu beschleunigen, damit weniger Rauschen vorhanden ist?
Trichoplax
1
FWIW, Benedikt Bitterli hat kürzlich den folgenden twitter.com/tunabrain/status/872174108385136640 veröffentlicht, der auf seinem Entrauschungspapier basiert.
Simon F
Im Nachbearbeitungsbereich gibt es einen netten Algorithmus namens bilateraler Filter shadertoy.com/view/4dfGDH
narthex

Antworten:

6

Es gibt und ich freue mich darauf, die Besonderheiten anderer Antworten zu sehen, aber eine Möglichkeit, damit umzugehen, besteht darin, zunächst nicht das Rauschen (oder so viel Rauschen) in den Quelldaten zu haben.

Das Rauschen kommt von der Tatsache, dass das Rendering sehr unterschiedlich ist - die Anzahl der von Ihnen aufgenommenen Samples hat nicht genug zur tatsächlichen richtigen Antwort des Integrals konvergiert, sodass einige Pixel zu hoch / hell sind und andere zu niedrig / dunkel (in jedem Farbkanal).

Das Problem ist folgendes: Wenn Sie für Ihre Abtastung Zufallszahlen mit weißem Rauschen verwenden, können sich die Proben wie im Bild unten verklumpen. Wenn genügend Samples vorhanden sind, konvergiert es, aber es dauert eine Weile, bis der Sampling-Raum gut abgedeckt ist. Suchen Sie im Bild unten einen Bereich mit leerem Raum (wie unten rechts) und stellen Sie sich vor, dass dort ein kleines, helles Licht war und die Szene überall sonst dunkel war. Sie können sehen, dass das Fehlen von Samples ein Problem beim Rendern darstellt.

Geben Sie hier die Bildbeschreibung ein

Alternativ können Sie in gleichmäßigen Abständen wie den folgenden abtasten. Dadurch erhalten Sie jedoch Aliasing-Artefakte anstelle von Rauschen, was schlimmer ist.

Geben Sie hier die Bildbeschreibung ein

Ö(1/.N.)Ö(N.) . Diese bieten eine bessere Abdeckung des Probenraums, aber da sie eine gewisse Zufälligkeit (oder zufällige ähnliche Eigenschaften) aufweisen, weisen sie nicht die Aliasing-Probleme auf, die bei einer regelmäßigen Stichprobenentnahme auftreten.

Hier ist ein "verwackeltes Gitter", in dem Sie auf einem Gitter abtasten, aber kleine zufällige Offsets innerhalb einer Zellengröße verwenden. Dies wurde von pixar erfunden und war für eine Weile patentiert, ist aber nicht mehr: Geben Sie hier die Bildbeschreibung ein

Hier ist eine übliche Sequenz mit geringer Diskrepanz, die als Halton-Sequenz bezeichnet wird (im Grunde eine 2d-Version von Van Der Corpus).

Geben Sie hier die Bildbeschreibung ein

Und hier ist ein Poisson-Disc-Sampling mit Mitchels bestem Kandidatenalgorithmus:Geben Sie hier die Bildbeschreibung ein

Weitere Informationen, einschließlich des Quellcodes, der diese Bilder generiert hat, finden Sie hier: https://blog.demofox.org/2017/05/29/when-random-numbers-are-too-random-low-discrepancy-sequences/

Alan Wolfe
quelle
3

Eine Technik, die Sie verwenden können, besteht darin, das Bild in Blöcke zu zerlegen und die Varianz jedes Blocks zu messen. Auf diese Weise können Sie mehr Samples auf Blöcke mit höherer Varianz anwenden.

Die Varianz kann mithilfe von 2 Akkumulationspuffern anstelle von 1 geschätzt werden. Sie rendern jeden Durchgang in einen alternativen Puffer. Die absolute Differenz zwischen diesen Puffern (in Bezug auf jeden Block) ist proportional zur Varianz. Nach der Präsentation auf dem Bildschirm können Sie die beiden Puffer addieren, um Ihren vollständigen Akkumulationspuffer wiederherzustellen.

PaulHK
quelle