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?
algorithm
image-processing
pathtracing
denoise
Mary Chang
la source
la source
Réponses:
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.
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.
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:
Voici une séquence commune à faible écart appelée la séquence de Halton (essentiellement une version 2D de Van Der Corpus)
Et voici un échantillonnage de disque de poisson, utilisant le meilleur algorithme candidat de Mitchel:
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/
la source
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.
la source