2011-01-03 13 views
8

In ray tracing, voglio calcolare l'ombreggiatura per un punto in cui il raggio colpisce. "Traccia" le linee a tutte le fonti di luce e controllo se sono bloccate da oggetti o meno. Se non sono bloccati, calcolo l'intensità dell'illuminazione in base alla loro intensità e al grado tra il "raggio d'impatto" e la superficie normale.Elaborazione dell'ombreggiatura attraverso una superficie trasparente

Ma cosa succede se la luce viene bloccata da una superficie parzialmente trasparente? Allora la luce dovrebbe venire alla luce del punto, ma la sua intensità e il colore sono influenzati dal colore della superficie che attraversa, e per calcolare che ho bisogno di fare ray tracing per il punto di passaggio del raggio di luce (in realtà per i 2 punti, uno di entrata e uno di uscita), e questo sarà molto costoso, oltre che potenzialmente quasi infinito (immagino che nella giusta collocazione di sorgenti luminose e superfici si possa inserire il tracciante in una quasi infinita loop per ogni colpo).

C'è un modo veloce e buono per approssimare il colore, o devo solo prendere il colore della superficie come il colore della luce e la sua trasparenza come l'intensità?

risposta

3

Non è necessario eseguire il ray tracing a partire dai punti di ingresso e uscita. Pensa a quale tipo di luce colpisce questi punti. Un raggio di luce che colpisce la superficie traslucida con un angolo diverso da quello che colpisce il tuo oggetto target non influenzerà il colore della luce che colpisce il tuo obiettivo.

+  *  + 
+ * + 
    + * + 
    + * + 
---------- 
| +*+ | 
| + * + | 
| + * + | 
---------- 
+ * + 
     * 
     * 
    ------- 

Ciò presuppone, naturalmente, che non c'è rifrazione nel materiale.

Ora, se si desidera estendere il ray trotter a qualcosa di un po 'più avanzato come tracciamento del percorso, è necessario considerare la luce che rimbalza dall'oggetto traslucido e colpisce l'oggetto finale, ma per un raggio ray tracer si non c'è bisogno di preoccuparsi per questo.

Per l'oggetto traslucido, modellerei la diminuzione dell'intensità luminosa come una funzione lineare della distanza (la maggior parte degli oggetti del mondo reale aderiscono strettamente a questa ipotesi). Se stai modellando la luce con componenti RGB (non fisicamente realistici ...), diminuirai ciascun componente in proporzione al valore di quel componente all'interno dell'oggetto.

Se vuoi essere veramente avanzato con ciò che fa la luce mentre ti trovi nell'oggetto, allora devi girare su subsurface scattering (il motivo per cui il latte in un bicchiere non sembra un solido bianco e perché gli umani sono così difficili da modello in CGI).

EDIT: Il fenomeno si parla di luce che rimbalza avanti e indietro all'infinito e l'utilizzo di molti calcoli è ciò che la luce si comporta come vero e proprio. Al giorno d'oggi i renderizzatori avanzati non sono in grado di integrare tutti questi componenti leggeri e quindi campionano in modo casuale le distribuzioni della luce. Maggiore è il numero di campioni acquisiti, più l'immagine si avvicina a quella che sembra realistica e più l'integrazione luminosa diventa più vicina al suo vero valore. Questo è chiamato rendering di monte carlo. Il tracciamento del percorso, il tracciamento bidirezionale del percorso e il trasporto della luce nelle metropoli sono tutti algoritmi di monte carlo che tentano di simulare completamente il trasporto della luce. Ogni algoritmo, dato un tempo sufficiente, convergerà alla stessa immagine finale, tuttavia, alcuni sono più efficienti di altri. (Vedere path tracing su Wikipedia, in fondo all'articolo è un'immagine migliore di quella che ho tentato di disegnare).

+0

+1 semplicemente fantastico! – BlackBear

0

Se si desidera superfici che possono fare sia ombreggiatura regolare e la trasparenza, la cosa più semplice è quello di ignorare l'ombreggiatura regolare per raggi d'ombra: per scopi di illuminazione, utilizzare solo gli attributi di filtraggio di superfici trasparenti. Questo evita il calcolo della luce potenzialmente infinito che hai descritto.

Si noti che esiste un buon modo per approssimare gli alberi di raggio infinito, che va col nome colorato, "roulette russa": quando qualsiasi ramo dell'albero diventa troppo poco importante, fare una scelta casuale su se potarlo. I rami vengono potati con probabilità P e contribuiscono con zero al risultato (sono "morti" e non devono essere calcolati). I rami sopravvissuti ("vincitori") ottengono il loro contributo moltiplicato per 1/(1-P), in modo che l'approssimazione risultante sia corretta in media.

La roulette russa è una tecnica Monte Carlo; potresti voler esaminare il tracciamento del raggio di Monte Carlo e altri metodi global illumination.

Problemi correlati