500 likes | 634 Views
Ray Tracing. Prof. Roberto Pirrone. Sommario. Generalità Algoritmo di Whitted Tecniche di ottimizzazione dell’algoritmo Item buffers Mappe di riflessione Controllo adattivo della profondità di ricorsione Light buffers Ray space subdivision Gestione antialiasing Tecniche UAS
E N D
RayTracing Prof. Roberto Pirrone
Sommario • Generalità • Algoritmo di Whitted • Tecniche di ottimizzazione dell’algoritmo • Item buffers • Mappe di riflessione • Controllo adattivo della profondità di ricorsione • Light buffers • Rayspacesubdivision • Gestione antialiasing • Tecniche UAS • Raytracing stocastico • Pathraytracing • Distributed raytracing • Two-pass raytracing
Generalità sul raytracing • Il raytracing(Whitted 1980) è un algoritmo ricorsivo che valuta come un raggio propagato attraverso un pixel si riflette e/o trasmette attraverso tutti gli oggetti della scena. • Un punto è illuminato con un modello che estende la classica equazione di illuminamento al contributo, valutato ricorsivamente, dei raggi riflessi dalle superfici circostanti e di quelli trasmessi attraverso superfici trasparenti che stano davanti al punto.
Tecniche di ottimizzazione del ray-tracing • Onere computazionale per l’albero relativo ad un pixel con profondità n ed m sorgenti luminose: • 2n-1 raggi riflessi e rifratti • m(2n-1) raggi ombra • Si rendono necessarie delle tecniche di riduzione dell’onere computazionale. • Item buffers • Mappe di riflessione • Controllo adattativo della profondità • Light buffers • Rayspacesubdivision
Item buffers Weghorst, Hooper & Greenberg (1984) Lo item buffer è una lista di visibiltà degli oggetti per il percorso di un dato raggio, ottenuta con un algoritmo DSV, tipicamente lo z-buffer. Ad ogni pixel viene memorizzato l’oggetto più vicino che è, poi, l’unico usato per il calcolo dell’intersezione con il raggio primario dal punto di vista.
Mappe di riflessione Hall (1986) La mappa di riflessione viene utilizzata per quegli oggetti, non direttamente visibili dall’osservatore, che danno contributo alla riflessione globale sulla superficie del punto considerato. La mappa viene usata solo per gli oggetti la cui dimensione, vista dal punto che deve essere reso, è inferiore ad una certa soglia: tipicamente si usa l’angolo solido sotteso da un oggetto rispetto al punto da rendere.
Controllo adattativo della profondità Hall (1983) Si assume che i raggi secondari abbiano intensità normalizzata unitaria e si calcola, di volta in volta, il contributo combinato dei raggi riflessi, al crescere della profondità dell’albero: Quando questo contributo va al di sotto di una certa soglia, si blocca la ricorsione.
Light Buffers • Per ogni sorgente luminosa si definisce una griglia cubica che delimita vari fasci piramidali di raggi (light buffers). • Si effettua un depthsort per tutti i poligoni che hanno intersezione non vuota con un fascio di emissione • La lista ordinata si usa per vedere se effettivamente un punto colpito da un raggio è in ombra rispetto alla sorgente.
Ray space subdivision Arvo & Kirk (1987) È molto simile all’uso dei light buffers e usa lo stesso strumento computazionale: il direction cube. Viene introdotto il concetto di beam: cioè una piramide di raggi con vertice in un punto (x,y,z) interno al direction cube, definita dalla particolare cella del cubo da cui i raggi sono emessi. I raggi sono definiti in 5 dimensioni dalle coordinate (x,y,z,u,v) in cui (x,y,z) definiscono le coordinate dell’origine del raggio, mentre (u,v) sono le coordinate del pixel della faccia da cui il raggio si propaga.
Rayspacesubdivision Un raggio contiene anche un’etichetta che individua la faccia da cui esce. L’algoritmo lavora direttamente in uno spazio a 5 dimensioni in cui un raggio è solo un punto. Per ogni faccia del cubo di direzioni viene creato un iper-cubo di raggi che viene suddiviso con un iper-octree, cioè un albero di partizione dello spazio in 5D, in base alla sua occupazione da parte dei vari oggeti della scena.
Rayspacesubdivision A partire dalla suddivisione dello spazio si costruiscono delle liste di oggetti candidati all’intersezione con i beam determinati per una certa faccia del direction cube. La comodità dell’approccio è che in 5D i beam non si intersecano, mentre le piramidi che questi definiscono in 3D si sovrappongono. Quindi in 5D lo spazio si può suddividere usando una tecnica di partizione binaria. Per contro, bisogna effettuare la determinazione degli oggetti candidati in 3D intersecandoli con i volumi poliedrici dei beam. Per ridurre l’onere computazionale i beam sono approssimati con coni e vengono confrontati con le sfere includenti gli oggetti.
Gestione del anti-aliasing • Il problema del aliasing nel ray-tracing deriva principalmente dal fatto che da ogni pixel si proietta un solo raggio. • Esistono due approcci alla gestione del anti-aliasing: • Tecniche di tracciamento di fasci di raggi per ogni pixel (che ottengono un anti-aliasing UAS) • Tecniche statistiche di campionamento dei pixel (che risolvono anche problematiche, come la resa della penombra, della profondità di campo e così via)
Beam tracing Heckbert & Hanrahan (1984) Questo approccio usa la coerenza di raggi vicini cioè il fatto che un raggio e tutti i suoi vicini seguiranno lo stesso cammino ed avranno intersezione con gli stessi poligoni Si insegue il percorso di un beam, definito inizialmente come l’intero volume di vista, e tracciato con un algoritmo ricorsivo.
Beamtracing • I poligoni della scena vengono ordinati secondo un criterio di profondità. • Ad ogni intersezione con un poligono si sottrae dal beam la porzione che interseca il poligono usando l’algoritmo di Weiler-Atherton. • Viene così generato un albero di intersezioni. • Le sezioni dei beam possono divenire concave, disconnesse o avere buchi.
BeamTracing • Ad ogni intersezione si generano ricorsivamente il beam riflesso e quello rifratto. • La direzione del beam rifratto è approssimata linearmente anche se l’angolo di rifrazione varia spazialmente in modo non lineare. • I nuovi beam avranno la sezione trasversale del poligono sottratto. • Ogni rifrazione/riflessione avviene in coordinate locali del beam (la sez. trasversale è ortogonale all’asse z). • Si usa Atherton-Weiler-Greenberg per le ombre.
Pencil tracing Shinya & Takahashi (1987) Variante del metodo precedente in cui si considera un pencil come un raggio di riferimento (raggio assiale) ed un insieme di raggi vicini (raggi parassiali). Un raggio parassiale è definito in 4D, rispetto al raggio assiale, come l’intersezione con un piano ortogonale al raggio assiale più la direzione del raggio parassiale stesso. Fintanto che l’angolo di apertura del pencil si mantiene piccolo, le trasformazioni dal raggio assiale a quelli parassiali sono lineari e definite da matrici 4x4 che possono essere usate per il tracciamento dei raggi parassiali. E’ fornita anche una tecnica di stima dell’errore commesso e di vincolo sull’angolo di apertura del pencil.
Tecniche stocastiche Le tecniche stocastiche partono dall’assunto che l’aliasing può essere ridotto attraverso un sovra-campionamento probabilistico, e quindi non regolare del pixel attraverso i raggi che passano per esso. In questo modo gli artefatti “regolari” prodotti dall’aliasing vengono sostituiti da rumore, meno percepibile dall’occhio, che contribuisce alla determinazione di contorni netti. Tali tecniche consentono, inoltre, di integrare in un unico approccio una serie di interessanti effetti, quali la penombra.
Analisi di Monte Carlo • Le tecniche stocastiche usano l’analisi di Monte Carlo per risolvere la forma più generale di equazione di illuminamento, detta equazione di rendering (Kajiya 1986): • g(x,x’): termine di visibilità, pari a 0 se i due punti sono occlusi, altrimenti 1/r2 (r: distanza tra x e x’) • e(x,x’): intensità luminosa emessa da x’verso x • r(x,x’,x”): intensità luminosa riflessa (in forma diffusa e speculare) dal punto x’verso x che arriva dalla direzione del generico punto x”
Analisi di Monte Carlo Si consideri la valutazione di un’integrale: ξsia un generico campione e si valuti f(x), stimatore primario, la cui varianza è: Per N campioni, si può mostrare che la varianza dello stimatore secondario (migliore approssimazione dell’integrale) è:
Campionamento “stratificato” • Il campionamento stratificato è quello in cui i campioni sono presi su intervalli uniformemente distribuiti
Campionamento per importanza • Si usa la distribuzione di probabilità dei campioni per pesarne la posizione
Path Ray Tracing Kajiya (1986) L’idea base è che l’equazione di illuminamento usata da Whitted sia una semplificazione dell’equazione di rendering in cui il termine integrale sia sostituito da un’operatore lineare M.
PathRaytracing La formulazione precedente porta ad un’analisi di Monte Carlo in cui, per ogni pixel, vengono proiettati più raggi. Ogni raggio viene seguito nel suo percorso casuale di riflessioni e/o rifrazioni, nonché si considera, ad ogni intersezione, la componente di illuminamento ottenuta direttamente dalla(e) sorgente(i) luminosa(e). Il percorso termina ad una data profondità (la serie viene troncata con una certa approssimazione). Ad ogni intersezione l’equazione computa tutto il contributo di riflessione diffusa, speculare e rifrazione.
PathRayTracing • Ad ogni intersezione viene emesso un solo raggio attraverso una variabile statistica che che usa una distribuzione di probabilità basata sulla BRDF che è stata campionata attraverso i fasci di raggi emessi da ciascun pixel. (40 raggi/pixel che campionano la BRDF circa 20h per 512x512 pixel).
Distributed Raytracing • Cook (1986) • Il pixel viene suddiviso in una griglia di 4x4 areole e da ogni areola si proietta un raggio. • La distribuzione dei raggi è affetta da jittering, cioè le posizioni dei raggi si discostano casualmente dai centri delle areole. Viene usata una distribuzione di Poisson in cui si fa in modo che i centri dei singoli raggi non siano più vicini di una soglia minima.
Distributed Raytracing • Modello di camera con apertura finita • Profondità di campo • Motion blur • Campionamento stratificato per i raggi attraverso il pixel, sulla lente e sui punti della superficie luminosa • Campionamento per importanza sui lobi di riflessione dei raggi sulle superfici.
Distributed Raytracing • Ogni raggio proveniente dalla i-esima areola del pixel mantiene l’indice i per tutte le riflessioni durante il percorso cioè mantiene la sua posizione relativa ad ogni riflessione. • Le funzioni di riflessione sono riportate in tabelle pre-calcolate in funzione dell’indice del raggio e rispettano il campionamento per importanza per la distribuzione dei raggi emanati da un pixel. • Le tabelle possono essere bidimensionali, indicizzate anche con l’angolo di incidenza per tener conto di funzioni di riflessione dipendenti da tale parametro.
Distributed Raytracing • Caratteristiche dell’algoritmo: • La distribuzione stocastica dei raggi primari genera un comportamento anti-aliasing • La distribuzione stocastica dei raggi riflessi consente di inserire eventuali sfocature nella riflessione • La distribuzione stocastica dei raggi trasmessi consente di ottenere l’effetto di materiale traslucido • La distribuzione stocastica dei raggi d’ombra consente di generare le penombre • La distribuzione stocastica delle origini dei raggi primari sulla lente consente di variare l’effetto di profondità di campo. • La distribuzione stocastica dei raggi nel tempo consente di ottenere il motion blur (si spaziano i raggi secondo la traiettoria dell’oggetto in movimento, addensandoli verso la posizione finale)
Distributed Raytracing Esempio di profondità di campo Esempio di motion blur
Two Pass RayTracing • Arvo (1986) • Usato per ben simulare le chiazze intense di riflessione di una superficie speculare su una diffusa (caustics), quindi quando si hanno molti raggi secondo il percorso LSDE: Light-Specular-Diffuse-Eye.
Two Pass RayTracing Al primo passo si seguono le riflessioni dei raggi a partire dalla sorgente luminosa. Al momento di una riflessione su una superficie diffusa l’energia incidente viene accumulata su una light map che è, sostanzialmente, una mappa di riflessione indicizzata per mezzo del punto P di riflessione. Al secondo passo si seguono i raggi dal punto di vista e, quando un raggio incide su P, il suo contributo di illuminazione extra viene computato dalla mappa. Questa tecnica è l’unica che consente di riprodurre i caustics: l’algoritmo convenzionale non peserebbe a sufficienza il contributo di riflessione speculare a partire dalla superficie matta verso quella riflettente.
Two Pass RayTracing Ray tracing convenzionale
Two Pass RayTracing Two Pass Ray tracing: 200 raggi emessi dalla sorgente
Two Pass RayTracing Two Pass Ray tracing: 400 raggi emessi dalla sorgente
Two Pass RayTracing Two Pass Ray tracing: 800 raggi emessi dalla sorgente
Two Pass RayTracing Two Pass Ray tracing: 1000 raggi emessi dalla sorgente