Algoritmi per rimuovere il rumore ad alta frequenza dalla traccia del percorso


8

Ho lavorato sul mio renderer per un po ', e mi chiedo se c'è modo di rimuovere il rumore di Monte Carlo dall'immagine renderizzata, oltre ad aspettare a lungo che converga?

Il modo in cui ho trovato è di sfocare l'immagine, il che non è molto utile, poiché riduce molto la qualità / nitidezza dell'immagine. E posso ottenere la stessa cosa eseguendo il rendering di una piccola immagine con più campioni, quindi ridimensionandola.

Esiste un algoritmo progettato per gestire il rumore nell'immagine nel tracciato del percorso?


Sei più interessato alla post-elaborazione per mascherare il rumore o ai modi per accelerare la convergenza in modo che sia presente meno rumore?
trichoplax,

1
FWIW, Benedikt Bitterli ha recentemente pubblicato il seguente twitter.com/tunabrain/status/872174108385136640 sulla base del suo denoising paper.
Simon F,

Nell'area di postelaborazione, esiste un bel algoritmo chiamato filtro bilaterale shadertoy.com/view/4dfGDH
narthex

Risposte:


6

Ci sono, e non vedo l'ora di vedere i dettagli di altre risposte, ma un modo per affrontarlo è di non avere il rumore (o tanto rumore) nei dati di origine per cominciare.

Il rumore proviene dal fatto che il rendering presenta un'elevata varianza: il numero di campioni che hai preso non è abbastanza convergente alla risposta corretta effettiva dell'integrale, quindi alcuni pixel sono troppo alti / luminosi e alcuni sono troppo basso / debole (in ciascun canale di colore).

Il problema è questo: se si utilizzano numeri casuali di rumore bianco per eseguire il campionamento, è possibile che i campioni si raggruppino come nell'immagine seguente. Dato un numero sufficiente di campioni, convergerà, ma ci vorrà del tempo prima che fornisca una buona copertura dello spazio di campionamento. Trova una regione di spazio vuoto nell'immagine qui sotto (come in basso a destra) e immagina che lì ci fosse una piccola luce intensa e che la scena fosse buia ovunque. Puoi vedere come non avere alcun campione ci sarà un problema per il rendering.

inserisci qui la descrizione dell'immagine

In alternativa, puoi campionare a intervalli regolari come quello sotto, ma questo ti darà artefatti aliasing invece di rumore, il che è peggio.

inserisci qui la descrizione dell'immagine

Un'idea è quella di utilizzare sequenze a bassa discrepanza e fare l'integrazione quasi monte carlo ( https://en.wikipedia.org/wiki/Quasi-Monte_Carlo_method ). Le sequenze a bassa discrepanza sono correlate al rumore blu, che ha solo componenti ad alta frequenza. Seguendo questi percorsi, ottieni una convergenza più veloce diO(1/N)anziché . Questi forniscono una migliore copertura dello spazio di campionamento, ma poiché presentano una casualità (o qualità simili a casuali), non hanno i problemi di aliasing che il campionamento spaziato regolarmente fa.O(N)

Ecco una "griglia con jitter" in cui si campiona su una griglia, ma si utilizzano piccoli offset casuali all'interno di una dimensione di cella. Questo è stato inventato da Pixar ed è stato brevettato per un po 'ma non lo è più: inserisci qui la descrizione dell'immagine

Ecco una sequenza comune a bassa discrepanza chiamata sequenza di Halton (sostanzialmente una versione 2d di Van Der Corpus)

inserisci qui la descrizione dell'immagine

Ed ecco un campionamento del disco poisson, usando l'algoritmo del miglior candidato di Mitchel:inserisci qui la descrizione dell'immagine

Maggiori informazioni, incluso il codice sorgente che ha generato queste immagini, sono disponibili qui: https://blog.demofox.org/2017/05/29/when-random-numbers-are-too-random-low-discrepancy-sequences/


3

Una tecnica che potresti usare è quella di dividere l'immagine in blocchi e misurare la varianza di ogni blocco: in questo modo puoi applicare più campioni a blocchi con varianza maggiore.

La varianza può essere stimata utilizzando 2 buffer di accumulo anziché 1. Si esegue il rendering di ogni passaggio in un buffer alternativo. La differenza assoluta tra questi buffer (rispetto a ciascun blocco) è proporzionale alla varianza. Al momento della presentazione sullo schermo è possibile aggiungere i due buffer insieme per ripristinare l'intero buffer di accumulo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.