Algorithmes pour supprimer le bruit haute fréquence du traçage de chemin


8

Je travaille sur mon propre moteur de rendu depuis un certain temps, et je me demande s'il existe un moyen de supprimer le bruit de Monte Carlo de l'image rendue, en plus d'attendre longtemps qu'il converge?

La façon dont j'ai trouvé est de brouiller l'image, ce qui n'est pas vraiment utile, car cela réduit beaucoup la qualité / netteté de l'image. Et je peux réaliser la même chose en rendant une petite image avec plus d'échantillons, puis en l'agrandissant.

Existe-t-il un algorithme conçu pour gérer le bruit dans l'image lors du traçage de chemin?


Êtes-vous plus intéressé par le post-traitement pour masquer le bruit, ou par des moyens d'accélérer la convergence afin de réduire la présence de bruit?
trichoplax

1
FWIW, Benedikt Bitterli a récemment publié le twitter.com/tunabrain/status/872174108385136640 suivant basé sur son papier de débruitage.
Simon F

Dans la zone de post-traitement, il existe un bel algorithme appelé filtre bilatéral shadertoy.com/view/4dfGDH
narthex

Réponses:


6

Il y en a, et j'ai hâte de voir les détails d'autres réponses, mais une façon de résoudre ce problème est de ne pas avoir le bruit (ou autant de bruit) dans les données source pour commencer.

Le bruit vient du fait qu'il y a une grande variance dans le rendu - le nombre d'échantillons que vous avez pris n'a pas suffisamment convergé vers la bonne réponse réelle de l'intégrale, et donc certains pixels sont trop élevés / lumineux et certains sont trop faible / faible (dans chaque canal de couleur).

Le problème est le suivant: si vous utilisez des nombres aléatoires de bruit blanc pour effectuer votre échantillonnage, vous pouvez obtenir des échantillons agglomérés comme l'image ci-dessous. Avec suffisamment d'échantillons, il convergera, mais il faudra un certain temps avant de donner une bonne couverture sur l'espace d'échantillonnage. Trouvez une région d'espace vide dans l'image ci-dessous (comme en bas à droite) et imaginez qu'il y avait une petite lumière vive là-bas et que la scène était sombre partout ailleurs. Vous pouvez voir comment le fait de ne pas avoir d'échantillons va créer un problème de rendu.

entrez la description de l'image ici

Alternativement, vous pouvez échantillonner à des intervalles réguliers comme ceux ci-dessous, mais cela vous donnera des artefacts d'alias au lieu du bruit, ce qui est pire.

entrez la description de l'image ici

Une idée est d'utiliser des séquences à faible écart et de faire une intégration quasi monte carlo ( https://en.wikipedia.org/wiki/Quasi-Monte_Carlo_method ). Les séquences à faible écart sont liées au bruit bleu, qui n'a que des composantes à haute fréquence. En empruntant ces routes, vous obtenez une convergence plus rapide deO(1/N) au lieu de O(N). Celles-ci donnent une meilleure couverture de l'espace d'échantillonnage, mais comme il y a un caractère aléatoire (ou des qualités similaires au hasard), elles n'ont pas les problèmes de repliement que l'échantillonnage régulièrement espacé.

Voici une "grille instable" où vous échantillonnez sur une grille, mais utilisez de petits décalages aléatoires dans une taille de cellule. Ceci a été inventé par pixar et était sous brevet pendant un certain temps mais n'est plus: entrez la description de l'image ici

Voici une séquence commune à faible écart appelée la séquence de Halton (essentiellement une version 2D de Van Der Corpus)

entrez la description de l'image ici

Et voici un échantillonnage de disque de poisson, utilisant le meilleur algorithme candidat de Mitchel:entrez la description de l'image ici

Plus d'informations, y compris le code source qui a généré ces images, peuvent être trouvées ici: https://blog.demofox.org/2017/05/29/when-random-numbers-are-too-random-low-discrepancy-sequences/


3

Une technique que vous pourriez utiliser est de diviser l'image en blocs et de mesurer la variance de chaque bloc - de cette façon, vous pouvez appliquer plus d'échantillons aux blocs avec une variance plus élevée.

La variance peut être estimée en utilisant 2 tampons d'accumulation au lieu de 1. Vous rendez chaque passe dans un autre tampon. La différence absolue entre ces tampons (par rapport à chaque bloc) est proportionnelle à la variance. Lors de la présentation à l'écran, vous pouvez ajouter les deux tampons ensemble pour récupérer votre tampon d'accumulation complet.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.