Ray tracing: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Correggo link |
|||
(33 versioni intermedie di 21 utenti non mostrate) | |||
Riga 1:
[[File:Raytraced image jawray.jpg|thumb|Scena prodotta attraverso il ray-tracing]]
Il '''
In uno spettro di costi computazionali e fedeltà visiva, le tecniche di rendering basate sul ray tracing, come: [[#Algoritmo di Ray casting|ray casting]], [[ray tracing ricorsivo]], [[ray tracing distribuito]], [[Photon mapping|mappatura dei fotoni]] e [[path tracing]]; sono generalmente più lente e con una maggiore fedeltà rispetto ai metodi di [[scanline rendering]].<ref>{{cita libro
|cognome=Shirley
|nome=Peter
|anno=July 9, 2003
|titolo=Realistic Ray Tracing
|editore=A K Peters/CRC Press; 2nd edition
|p= <!-- or pages= -->
|isbn=978-1568814612
}}</ref>
Altre tecniche che fanno parte del ray tracing sono [[path tracing bidirezionale]], [[Metropolis light transport]] (MLT) e [[path tracing volumetrico]].
== Descrizione generale dell'algoritmo per computer ==
[[File:3chromeballs.png|thumb
▲[[File:3chromeballs.png|thumb|upright=2.2|Tre sfere che mostrano il riflesso l'una dell'altra, e del pavimento]]
Il ray tracing descrive un metodo per la produzione di immagini costruite in sistemi di [[computer grafica 3D]], con maggior realismo di quello che si potrebbe ottenere con l'uso di [[ray casting]] o [[scanline rendering]]. Lavora tracciando, all'inverso, il percorso che potrebbe aver seguito un raggio di [[luce]] prima di colpire un'immaginaria lente. Mentre la [[scena (computer grafica)|scena]] viene attraversata seguendo il percorso di numerosi raggi, le informazioni sull'aspetto della scena vengono accumulate. La riflessione del raggio, la sua rifrazione o l'assorbimento sono calcolate nel momento in cui colpisce un qualsiasi oggetto.
Le scene, nel ray tracing, vengono descritte matematicamente, solitamente da un [[programmatore]], o da un grafico, utilizzando particolari [[Programma (informatica)|programmi]]. Le scene possono anche includere immagini e modelli creati attraverso varie tecnologie, per esempio usando la [[fotografia digitale]]. Seguendo i raggi in senso inverso viene
La scorciatoia utilizzata nel raytracing, quindi, presuppone che un dato raggio termini sulla camera, e ne cerca la sorgente. Dopo aver calcolato un numero fisso di interazioni (già deciso in precedenza), l'intensità della luce nel punto di ultima intersezione viene calcolata con un insieme di algoritmi, inclusi il classico algoritmo di rendering ed altre tecniche (come la [[radiosity]]).
Line 15 ⟶ 26:
== Descrizione dettagliata dell'algoritmo, e sua nascita ==
=== Cosa accade in natura ===
In natura, una sorgente di luce emette un raggio che viaggia fino a raggiungere una superficie che ne interrompe il tragitto. Si può pensare al raggio come ad un fascio di [[fotone|fotoni]] che viaggia sulla stessa linea. Nel [[Vuoto (fisica)|vuoto assoluto]] questo raggio seguirebbe una linea retta. In realtà, una qualsiasi combinazione di questi tre risultati si può verificare: [[assorbimento (ottica)|assorbimento]], [[riflessione (ottica)|riflessione]] e [[rifrazione]]. Una superficie può riflettere tutto o parte del raggio di luce, in una o più direzioni. Può anche assorbire parte del raggio, causando una perdita di intensità della luce riflessa/rifratta. Se la superficie ha proprietà di [[Trasparenza e traslucenza|trasparenza o traslucenza]], convoglierà una porzione di luce dentro se stessa, in una direzione diversa rispetto a quella causata dall'assorbimento di una parte (o tutto) lo [[spettro elettromagnetico|spettro ottico]] (ed eventualmente alterandone il colore). Sommando i valori di assorbimento, riflessione e rifrazione, si ottiene esattamente la potenza del raggio entrante. Una superficie non può, ad esempio, assorbire il 66% del raggio entrante, e rifletterne il 50%, dal momento che la somma darebbe 116%.<ref>Vedi la [[Legge di conservazione dell'energia]]</ref> Partendo da qui, i raggi riflessi e/o rifratti possono colpire altre superfici, dove verranno assorbiti, riflessi e rifratti (di nuovo). Alcuni di questi raggi, alla fine del viaggio, colpiscono il nostro occhio, permettendoci di vedere la scena e contribuendo al disegno dell'immagine finale.
=== Algoritmo di
Il primo algoritmo di ray casting (in opposizione a quello di ray tracing) venne presentato da [[Arthur Appel]] nel [[1968]]. L'idea di fondo del ray casting consiste nel far partire i raggi dall'occhio, uno per [[pixel]], e trovare il più vicino oggetto che ne blocca il percorso (occorre pensare ad un'immagine come ad una grata, in cui ogni quadrato corrisponde ad un pixel). L'oggetto colpito è quello che l'occhio vede attraverso quel pixel. Usando le proprietà del materiale e gli effetti della luce nella scena, questo algoritmo è in grado di determinare il colore dell'oggetto. Questa supposizione è fatta pensando che una superficie è visibile se il raggio la raggiunge senza essere bloccato o in ombra. Il colore della superficie viene calcolato usando i tradizionali [[Shader|shading model]] presenti in [[Computer grafica]]. Un importante vantaggio offerto dal ray casting rispetto al più vecchio [[scanline rendering|algoritmo di scanline]], è la sua capacità di gestire con semplicità superfici solide o non-piane, come ad esempio [[Cono (solido)|coni]] e [[sfera|sfere]]. Se una superficie matematica può essere colpita da un raggio, il ray casting è in grado di disegnarla. Oggetti complicati possono essere creati utilizzando tecniche di [[modellazione solida]], e facilmente renderizzati.
Il ray casting per la produzione di computer grafica venne usato per la prima volta da alcuni scienziati del [[Mathematical Applications Group, Inc.]], (MAGI) di Elmsford, [[New York (stato)|New York]]. Nel [[1966]], il gruppo venne creato per effettuare calcoli di esposizione alle radiazioni da parte del [[United States Department of Defense|Dipartimento della Difesa degli Stati Uniti]]. Il [[software]] creato dal MAGI calcolava non solo i rimbalzi dei [[raggi gamma]] sulle superfici (il ray casting per le radiazioni era utilizzato dagli [[anni 1940|anni quaranta]]), ma anche il modo in cui penetravano negli oggetti e ne venivano rifratti. Questi studi aiutarono il Governo a scegliere alcune applicazioni militari, costruendo veicoli che avrebbero protetto le truppe dalle [[radiazione|radiazioni]] e veicoli di rientro per le [[Esplorazione spaziale|esplorazioni spaziali]]. Sotto la direzione del dr. [[Philip Mittelman]], gli scienziati svilupparono un metodo per la generazione di immagini utilizzando lo stesso software. Nel [[1972]] MAGI divenne un'azienda commerciale di animazione, che utilizzò il ray casting per creare animazioni 3D per la [[televisione]], [[documentario (film)|documentari]], e film (crearono buona parte del film ''[[Tron (film)|Tron]]'' utilizzando esclusivamente il ray casting). La MAGI venne chiusa nel [[1985]].
=== Algoritmo di
La successiva scoperta rivoluzionaria venne fatta da [[Turner Whitted]] nel [[1979]]. I precedenti algoritmi lanciavano il raggio dall'occhio verso la scena, ma i raggi non venivano più seguiti. Whitted continuò il processo. Quando un raggio colpisce una superficie, può generare fino a tre nuovi tipi di raggio: riflessione, rifrazione ed ombra. Un raggio riflesso continua nella direzione della riflessione a specchio su di una superficie lucida. A questo punto interagisce con altri oggetti della scena; il primo oggetto che colpisce sarà quello visto nel riflesso presente sull'oggetto originario. Il raggio rifratto viaggia attraverso il materiale trasparente in modo simile, con l'aggiunta che può entrare o uscire da un materiale. Per evitare di tracciare tutti i raggi presenti in una scena, un raggio ombra viene usato per testare se la superficie sia visibile ad una luce. Un raggio colpisce una superficie in un qualche punto. Se questo punto "vede" la luce, un raggio (dal punto di vista del computer un [[segmento]]) viene seguito fino alla sorgente, Se durante il tragitto si incontra un oggetto opaco, la superficie è in ombra, e quella sorgente non contribuisce al calcolo del colore. Questo nuovo livello di calcolo aggiunge più realismo alle immagini create attraverso il ray tracing.
=== Vantaggi del ray tracing ===
La popolarità conquistata dal ray tracing pone le basi nella simulazione realistica della luce rispetto ad altri modelli di rendering (tipo scanline rendering o ray casting). Effetti come riflessione ed [[ombra]], difficilmente simulabili con altri metodi, sono il risultato naturale dell'algoritmo. Un'implementazione relativamente semplice conduce a risultati impressionanti, il ray tracing spesso rappresenta il punto di accesso allo studio della [[Computer grafica|programmazione grafica]].
=== Svantaggi del ray tracing ===
Un grave svantaggio è dato dalle performance. Algoritmi come lo scanline utilizzano la coerenza dei dati per gestire la computazione tra i pixel, mentre il raytracing ricomincia tutto il procedimento ad ogni nuovo pixel, trattando ogni raggio in modo separato. Questa separazione offre vantaggi, tipo la possibilità di spedire più raggi del necessario per ottenere l'[[antialiasing]] e migliorare la qualità dell'immagine. Nonostante gestisca interriflessioni e rifrazioni accuratamente, il Ray Tracing tradizionale non è necessariamente [[fotorealismo|fotorealistico]]. Il vero fotorealismo si ottiene quando l'[[equazione di rendering]] è ben approssimata o completamente implementata. Il suo calcolo dà il vero fotorealismo, dal momento che descrive ogni effetto fisico del flusso di luce. Il calcolo completo è normalmente impossibile date le risorse di computazione richieste. Il realismo di tutti i metodi di rendering, quindi, deve essere valutato in rapporto all'approssimazione dell'equazione e, nel caso del ray tracing, non è necessariamente il più realistico. Altri metodi, tra cui il [[photon mapping]], sono basati sul ray tracing in alcune parti dell'algoritmo, e danno migliori risultati.
=== Attraversamento inverso della scena ===
Il processo di lanciare i raggi dall'occhio verso la sorgente di luce, per disegnare un'immagine, viene chiamato a volte ''backwards ray tracing'' (o "ray tracing inverso"), dal momento che i [[fotone|fotoni]] viaggiano in senso opposto a quello usuale. Questa terminologia crea confusione. All'inizio il ray tracing era fatto partendo dall'occhio, ed i primi ricercatori (tipo James Arvo), usarono il termine ''backwards ray tracing'' per riferirsi al percorso sorgente-occhio. Per questo motivo, è più semplice distinguere i due casi in ''eye-based'' (basato sull'occhio) e ''light-based'' (basato sulla sorgente). La ricerca, negli scorsi decenni, ha esplorato combinazioni di computazioni effettuate in entrambi i sensi, così come schemi in grado di generare più o meno raggi in direzioni differenti, partendo da una superficie colpita. Ad esempio, gli algoritmi di [[radiosity]] lavorano solitamente computando il modo in cui i fotoni, emessi da una sorgente, modificano le superfici, registrandone i risultati. Questi dati possono essere usati da un ray tracer ricorsivo standard per creare un'immagine più corretta. Nel contesto degli algoritmi di [[illuminazione globale]], come il [[photon mapping]] ed il [[Metropolis light transport]], il ray tracing è solo uno dei tool usati per calcolare il trasferimento di luce tra le superfici.
=== Algoritmo: classico ray tracing ricorsivo ===
Per ogni pixel dell'immagine {
Crea un raggio che, dall'occhio, passa attraverso questo pixel
Line 65 ⟶ 69:
}
}
Sotto viene mostrata un'immagine che illustra il percorso di alcuni raggi ricorsivi, calcolato utilizzando lo [[pseudocodice]] scritto qui sopra. Una superficie [[scattering|diffusiva]] riflette la luce in tutte le direzioni.
[[File:PathOfRays.
Per prima cosa, un raggio viene creato dal punto di vista
== Ray tracing in real time ==
Nel tempo si sono succeduti anche sforzi tesi ad implementare un ray tracing in [[sistema real-time]] per applicazioni di grafica quali i [[videogioco|videogiochi]].▼
▲Nel tempo si sono succeduti anche sforzi tesi ad implementare un ray tracing in [[real-time]] per applicazioni di grafica quali i [[videogioco|videogiochi]].
Il progetto [[OpenRT]] è composto da un nucleo altamente ottimizzato basato sul ray tracing, e ad un [[Application programming interface|API]] in stile [[OpenGL]] per poter offrire un'alternativa all'approccio corrente basato sulla [[rasterizzazione]].
L'[[hardware]] specifico per il ray tracing, come il [[Ray Processing Unit]] sviluppato all'[[Università
Alcuni software real-time, con motore basato sul ray tracing, sono stati sviluppati da programmatori appassionati fino ai tardi [[anni 1990|anni novanta]]. I ray tracer usati in queste [[Demo#Nelle applicazioni|demo]], comunque, usano spesso approssimazioni inaccurate ed arrivano ad imbrogliare per
Dalla generazione [[GeForce 20 series]] di GPU in poi, della casa Nvidia, è stato implementato un sistema di accelerazione hardware che punta a rendere possibile il ray tracing in tempo reale, specie nei videogiochi, il tutto col supporto di dedicati tool per sviluppatori.<br />
Tale soluzione venne successivamente migliorata, permettendo anche il "full ray tracing" o "path tracing" o "modalità RT Overdrive" con le schede video [[GeForce 20 series]] accompagnate dalla controparte software DLSS 3.5<ref>[https://www.hwupgrade.it/news/skvideo/nvidia-dlss-35-provato-su-cyberpunk-2077-phantom-liberty-l-impatto-sulla-grafica-di-ray-reconstruction_120245.html NVIDIA DLSS 3.5 provato su Cyberpunk 2077: Phantom Liberty. L'impatto sulla grafica di Ray Reconstruction]</ref>.
== Nell'ottica geometrica ==
Il ray tracing, in [[computer grafica]], deriva il proprio nome ed i principi da una precedente tecnica usata per la progettazione di lenti. In [[ottica]], il raytracing è una tecnica utilizzata per la realizzazione di [[lente|lenti]] e strumenti [[ottica|ottici]] - [[fotocamera|fotocamere]], [[binocolo|binocoli]], [[telescopio|telescopi]] e [[microscopio|microscopi]] - fin dai primi anni del [[XX secolo]]. Questo tipo di raytracing descrive la propagazione dei raggi di luce attraverso sistemi di lenti o uno strumento ottico, permettendo di modellare le proprietà di creazione dell'immagine.
I seguenti effetti possono essere integrati in un software di ray tracing:
* [[Dispersione ottica]] (conduce ad [[aberrazione cromatica|aberrazioni cromatiche]]; parzialmente integrata in [[POV-Ray]])
* Indice del gradiente ottico
Line 103 ⟶ 111:
== Esempio ==
Una dimostrazione dei principi coinvolti nel ray tracing, ci permetterà di considerare in che modo si possa trovare l'intersezione tra un raggio ed una sfera. L'equazione generale di una sfera può essere espressa in notazione [[Vettore (matematica)|vettoriale]], dove '''I''' è un punto sulla superficie della sfera, '''C''' ne è il centro e '''r''' il raggio, con questa formula:
<math>|\mathbf{I}-\mathbf{C}|^2=r^2</math>.
Line 131 ⟶ 138:
== Note ==
<references/>
== Bibliografia ==
* {{RivistaVG|mc|114|245-249|1|1992|titolo=Ray Tracing - Doverosa introduzione}} La rubrica sul ray tracing continua nei numeri successivi fino al n° 128.
*
*
* {{en}} Henrik Wann Jensen
*
== Voci correlate ==
* [[Radiosity]]
* [[Illuminazione globale]]
Line 148 ⟶ 153:
=== Esempi di software ===
* BRL-CAD
* [[Blender (programma)]]
Line 157 ⟶ 161:
== Altri progetti ==
{{interprogetto|
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC||ray tracing}}
* [http://www.raytracingnews.org/ The Ray Tracing News] - Brevi articoli di ricerca e link ad ulteriori fonti
* [https://web.archive.org/web/20110609192149/http://www.few.vu.nl/~kielmann/theses/avdploeg.pdf Interactive Ray Tracing: The replacement of rasterization?] - Una tesi riguardante il ray tracing in real-time, dicembre 2006
* {{cita web | 1 = http://www.devmaster.net/articles/raytracing_series/part1.php | 2 = Serie di tutorial sull'implementazione di un ray tracer in C++ | accesso = 5 gennaio 2007 | urlarchivio = https://web.archive.org/web/20060926010629/http://www.devmaster.net/articles/raytracing_series/part1.php | dataarchivio = 26 settembre 2006 | urlmorto = sì }}
* [http://irtc.org/ The Internet Ray Tracing Competition] - Competizione on-line su immagini ed animazioni in ray tracing
* {{cita web|url=http://www.tomshw.it/graphic.php?guide=20080325|titolo=Intel e il Ray Tracing, sguardo approfondito|accesso=29 marzo 2009|urlarchivio=https://web.archive.org/web/20090315044603/http://www.tomshw.it/graphic.php?guide=20080325|dataarchivio=15 marzo 2009|urlmorto=sì}}
{{Controllo di autorità}}
{{Portale|Informatica}}
|