Tracciamento dei raggi
Il ray tracing (dt. Ray tracing o ray tracing , nella grafia inglese solitamente ray tracing ) riguarda l'emissione di un algoritmo basato sulle radiazioni per il calcolo dell'occultamento , ovvero da determinare la visibilità di oggetti tridimensionali da un particolare punto nello spazio . Il ray tracing viene utilizzato anche per descrivere diverse estensioni di questo metodo di base, che calcola l'ulteriore percorso dei raggi dopo che hanno colpito le superfici.
Il ray tracing è utilizzato soprattutto nella computer grafica 3D . Qui l'algoritmo di ray tracing di base è un modo per rappresentare una scena 3D . Le estensioni che simulano il percorso dei raggi luminosi attraverso la scena, come il metodo della radiosity , vengono utilizzate per calcolare la distribuzione della luce.
Altre aree di applicazione del ray tracing sono l' auralizzazione e la tecnologia ad alta frequenza .
Origine e significato
Prima che il ray tracing fosse sviluppato, il giovane campo della computer grafica 3D consisteva essenzialmente in una serie di "trucchi di programmazione" progettati per imitare l'ombreggiatura degli oggetti illuminati. Il ray tracing è stato il primo algoritmo nel campo ad avere un senso fisico.
La prima immagine raytracing è stata visualizzata su uno schermo simile a un oscilloscopio presso l' Università del Maryland nel 1963 . Arthur Appel , Robert Goldstein e Roger Nagel , che hanno pubblicato l'algoritmo alla fine degli anni '60, sono spesso considerati gli sviluppatori dell'algoritmo di ray tracing . Altri ricercatori che studiavano le tecniche di ray tracing all'epoca erano Herb Steinberg , Marty Cohen e Eugene Troubetskoy . Il ray tracing si basa su un'ottica geometrica , in cui la luce è intesa come un insieme di raggi. Le tecniche utilizzate nel ray tracing sono state utilizzate molto prima dai produttori di sistemi ottici , tra gli altri . Oggi molti renderer (programmi per computer per la generazione di immagini da una scena 3D) utilizzano il ray tracing, possibilmente in combinazione con altri processi.
Semplici forme di ray tracing calcolano solo l'illuminazione diretta, cioè la luce che arriva direttamente dalle sorgenti luminose. Tuttavia, il ray tracing si è ampliato in modo significativo diverse volte da quando è stato utilizzato per la prima volta nella computer grafica. Le forme più sviluppate tengono conto anche della luce indiretta riflessa da altri oggetti; si parla poi di un metodo di illuminazione globale .
Il termine raycasting descrive principalmente una forma semplificata di ray tracing, ma a volte è anche usato come sinonimo.
Fondamento logico
La creazione di un'immagine raster da una scena 3D è chiamata rendering o sintesi di immagini . Tale scena viene prima creata dall'utente con l'aiuto di uno strumento di modellazione 3D .
Nella descrizione della scena sono riportati almeno i seguenti dati:
- la posizione delle primitive elementari , come poligoni o sfere , che compongono gli oggetti della scena;
- i modelli di illuminazione locale ei loro parametri, che determinano i colori ei materiali dei singoli oggetti nella scena;
- le sorgenti luminose della scena.
Inoltre, con il ray tracing, vengono specificate la posizione di un punto oculare e di un piano dell'immagine , che insieme indicano la prospettiva da cui viene vista la scena. Il punto dell'occhio è un punto nello spazio che corrisponde alla posizione di una telecamera virtuale o di un osservatore generale. Il piano dell'immagine è un rettangolo virtuale a una certa distanza dal punto di vista. È l'equivalente tridimensionale dell'immagine raster da rendere nello spazio. I punti distribuiti in forma di griglia sul piano dell'immagine corrispondono ai pixel dell'immagine raster da generare.
Calcolo dell'occlusione
Il ray tracing è principalmente un metodo per calcolare l'occlusione , cioè per determinare la visibilità degli oggetti dal punto di vista. Il principio di base è piuttosto semplice.
Il ray tracing funziona con una struttura dati chiamata raggio che specifica il punto iniziale e la direzione di una semiretta nello spazio. Per ogni pixel viene calcolata la direzione del raggio, che punta dal punto dell'occhio al pixel corrispondente nel piano dell'immagine. Per ogni primitiva della scena, il possibile punto di intersezione in cui il raggio colpisce la primitiva è determinato mediante un metodo geometrico . Se necessario, viene calcolata la distanza dal punto di osservazione al punto di intersezione. Il “vincitore”, cioè il primitivo visibile dal punto di vista, è quello con la minore distanza.
Il principio dell'emissione dei raggi dal punto di vista è simile alla struttura di una macchina fotografica stenopeica , in cui un oggetto viene mostrato su una pellicola. Con il ray tracing, tuttavia, vengono scambiati "film" (piano immagine) e "buco" (punto oculare). Analogamente alla fotocamera pinhole, la distanza tra il piano dell'immagine e il punto di vista determina la " lunghezza focale " e quindi il campo visivo .
Poiché i raggi non emanano dalle sorgenti luminose, come in natura, ma dal punto di vista, si parla anche di ray tracing all'indietro . Ray tracing offerte con la questione di cui la luce proviene. Tuttavia, alcune pubblicazioni chiamano il processo forward ray tracing o eye ray tracing.
Test di intersezione
Il test sopra menzionato per una possibile intersezione di ray e primitiva è il cuore del ray tracing. Tali test possono essere formulati per una varietà di tipi primitivi. Oltre a triangoli e sfere, sono possibili cilindri , quadriche , nuvole di punti o addirittura frattali .
Per le sfere, il test di intersezione è una procedura relativamente breve e semplice, il che spiega la popolarità di questi oggetti nelle immagini di prova tracciate con raggi. Per semplicità, tuttavia, molti programmi di rendering consentono solo i triangoli come primitive, da cui qualsiasi oggetto può essere composto approssimativamente.
Geometrie più complesse come NURBS sono state recentemente utilizzate per il test di intersezione . Qui è vantaggioso un massimo di precisione, poiché la superficie non è divisa in triangoli come di consueto. Lo svantaggio è un tempo di rendering maggiore, poiché il test di intersezione con superfici complesse a forma libera richiede molto più tempo rispetto a triangoli semplici. Un'approssimazione sufficiente alla precisione di NURBS è possibile anche con i triangoli, ma in questo caso deve essere selezionato un numero molto grande.
Ombreggiatura
Quando si determina la primitiva successiva, viene calcolata non solo il punto di intersezione e la sua distanza dal punto di vista, ma anche la normale della primitiva nel punto di intersezione. Ciò significa che tutte le informazioni sono disponibili per determinare "l'intensità della luce" riflessa nel punto dell'occhio e quindi il colore. Vengono utilizzate anche le descrizioni delle sorgenti luminose nella scena. I calcoli si basano su modelli di illuminazione locali che simulano le proprietà del materiale di un oggetto. Questa parte del renderer responsabile della determinazione del colore è chiamata shader .
Codice di esempio
La programmazione di un semplice ray tracer richiede poco sforzo. Il principio può essere rappresentato in pseudocodice come segue:
Prozedur Bild_Rendern
Strahl.Ursprung := Augpunkt
Für jedes (x,y)-Pixel der Rastergrafik
Strahl.Richtung := [3D-Koordinaten des Pixels der Bildebene] − Augpunkt
Farbe des (x,y)-Pixels := Farbe_aus_Richtung(Strahl)
Funktion Farbe_aus_Richtung(Strahl)
Schnittpunkt := Nächster_Schnittpunkt(Strahl)
Wenn Schnittpunkt.Gewinner = (kein) dann
Farbe_aus_Richtung := Hintergrundfarbe
sonst
Farbe_aus_Richtung := Farbe_am_Schnittpunkt(Strahl, Schnittpunkt)
Funktion Nächster_Schnittpunkt(Strahl)
MaxDistanz := ∞
Schnittpunkt.Gewinner := (kein)
Für jedes Primitiv der Szene
Schnittpunkt.Distanz := Teste_Primitiv(Primitiv, Strahl)
Wenn Schnittpunkt.Distanz < MaxDistanz dann
MaxDistanz := Schnittpunkt.Distanz
Schnittpunkt.Gewinner := Primitiv
Nächster_Schnittpunkt := Schnittpunkt
Ogni raytracer, indipendentemente dalla variante di raytracing utilizzata, segue una struttura simile che contiene anche un test di intersezione ( Teste_Primitiv ) e uno shader ( Farbe_am_Schnittpunkt ).
potenza
Tecniche di accelerazione
Quando si determina la prima primitiva che incontra un raggio, ogni primitiva nella scena può essere testata rispetto al raggio, come nel codice di esempio sopra. Tuttavia, ciò non è fondamentalmente necessario se è noto che alcune primitive non sono comunque nelle vicinanze del raggio e quindi non possono essere colpite. Poiché i test di intersezione richiedono il tempo di esecuzione più lungo nel ray tracing, è importante testare il minor numero possibile di primitive rispetto al raggio per mantenere basso il tempo di esecuzione totale.
Con il metodo dell'accelerazione, la scena è solitamente divisa automaticamente in qualche forma e le primitive sono assegnate a queste suddivisioni. Quando un raggio vaga per la scena, non viene messo alla prova contro i primitivi, ma prima contro le suddivisioni. Di conseguenza, il raggio deve essere testato solo rispetto alle primitive della suddivisione che il raggio attraversa.
È stata sviluppata una varietà di tali tecniche di accelerazione per il ray tracing. Esempi di schemi di suddivisione sono le griglie voxel , gli alberi BSP e i volumi di delimitazione che racchiudono le primitive e formano una gerarchia. Sono anche popolari forme miste di queste tecniche. Ci sono anche speciali tecniche di accelerazione per le animazioni . La complessità di queste tecniche può trasformare rapidamente un ray tracer in un progetto più ampio.
Nessuna tecnologia è generalmente ottimale; l'efficienza dipende dalla scena. Tuttavia, ogni metodo di accelerazione riduce enormemente il tempo di esecuzione e rende il ray tracing un algoritmo praticabile. Le suddivisioni basate su alberi Kd sono la tecnica più efficiente o quasi più efficiente per la maggior parte delle scene non animate, poiché possono essere ottimizzate utilizzando l' euristica . È stato scoperto più volte che il tempo di esecuzione asintotico del ray tracing è logaritmico a seconda del numero di primitive .
È stato dimostrato che sui computer moderni non sono le prestazioni del processore, ma piuttosto gli accessi alla memoria a limitare la velocità del ray tracing. L'uso attento della memorizzazione nella cache da parte dell'algoritmo consente di ridurre significativamente il tempo di esecuzione. È anche possibile utilizzare la capacità SIMD dei moderni processori, che consentono calcoli paralleli, nonché schemi di suddivisione appositamente ottimizzati. Ciò consente il tracciamento simultaneo di più raggi combinati in "pacchetti". La ragione di ciò è che i raggi emessi dal punto oculare sono solitamente molto simili, cioè di solito intersecano gli stessi oggetti. Con il set di istruzioni SSE , ad esempio, è possibile testare simultaneamente quattro raggi per un'intersezione con una primitiva, il che velocizza questo calcolo molte volte. Su implementazioni hardware appropriate , ad esempio su FPGA, è possibile tracciare anche pacchetti più grandi con più di 1000 raggi. Tuttavia, la memorizzazione nella cache e le ottimizzazioni SIMD per forme avanzate di ray tracing perdono molto del loro vantaggio in termini di velocità.
È inoltre possibile parallelizzare l'intero processo di ray tracing . Ciò può essere ottenuto in modo banale, ad esempio, che processori o macchine diversi restituiscano sezioni diverse dell'immagine. Solo alcune tecniche di accelerazione o estensioni devono essere adattate per essere adatte alla parallelizzazione.
Requisiti di memoria
Il metodo di ray tracing di base non richiede quasi memoria. Tuttavia, la scena stessa, che oggigiorno è spesso composta da diversi milioni di primitivi in scene complesse, occupa una grande quantità di memoria e può comprendere diversi gigabyte . A ciò si aggiunge il più o meno elevato fabbisogno di memoria aggiuntiva delle tecnologie di accelerazione. Poiché scene così grandi non si adattano completamente alla memoria principale del computer, spesso è necessario scambiarle .
Nel caso di oggetti più grandi che compaiono più volte nella scena e differiscono solo per posizione e dimensione (ad es. in una foresta piena di alberi), non è necessario salvare nuovamente l'intera geometria. Questa tecnica, chiamata istanziazione , può far risparmiare molto spazio in alcune scene.
Estensioni
Uno dei motivi del successo del ray tracing è la sua naturale espandibilità. Il metodo primitivo sopra descritto è inadeguato per le odierne esigenze di sintesi delle immagini. Con l'aumento della potenza di calcolo e la crescente ispirazione dalla fisica - in particolare dall'ottica e dalla radiometria - sono emerse diverse estensioni e varianti, alcune delle quali verranno brevemente presentate qui.
Fondamentalmente, ad ogni espansione, la qualità ottenibile delle immagini renderizzate così come il relativo tempo richiesto aumentavano nettamente e raggiungevano il massimo con il tracciamento del percorso. Solo gli sviluppi successivi sono stati finalizzati a ridurre il tempo necessario per la tracciatura del percorso senza sacrificare la qualità.
l'ombra
Grazie alla flessibilità dell'algoritmo di ray tracing, è possibile emettere raggi luminosi non solo dal punto dell'occhio, ma anche da qualsiasi altro punto nello spazio. Come dimostrò Arthur Appel nel 1968, questo può essere usato per simulare le ombre .
Qualsiasi punto su una superficie è in ombra se e solo se c'è un oggetto tra esso e la fonte di luce. Emettendo un raggio d' ombra dal punto di intersezione sulla superficie in direzione della sorgente luminosa, è possibile determinare se un oggetto sta attraversando il suo percorso. In tal caso, il punto di intersezione è nell'ombra e viene restituito 0 come luminosità del raggio. Nell'altro caso avviene l'ombreggiatura normale.
Ray-tracing ricorsivo
Il ray tracing può essere applicato non solo a semplici oggetti opachi, ma anche a oggetti trasparenti e speculari, riflettenti . Dai punti di intersezione vengono emessi ulteriori fasci di luce. Nel caso di superfici riflettenti, ad esempio, è necessario prendere in considerazione solo la direzione del raggio proveniente dalla superficie secondo la legge di riflessione (angolo di incidenza uguale angolo di riflessione) e calcolare un raggio di riflessione corrispondente .
Nel caso di oggetti traslucidi , viene emesso un raggio secondo la legge di rifrazione di Snellius , questa volta all'interno dell'oggetto in questione. In generale, anche gli oggetti trasparenti riflettono parte della luce. Le componenti cromatiche relative dei raggi riflessi e rifratti possono essere calcolate utilizzando le formule di Fresnel . Questi raggi sono anche chiamati raggi secondari .
Poiché i raggi secondari possono cadere su altri oggetti, l'algoritmo viene chiamato ricorsivamente per consentire riflessioni multiple e rifrazioni luminose. L'insieme gerarchico delle chiamate è anche chiamato albero di rendering .
Il ray tracing ricorsivo è stato sviluppato da Kay e Whitted intorno al 1980.
In pseudocode , lo shader per il ray tracing ricorsivo ha un aspetto simile a questo:
Funktion Farbe_am_Schnittpunkt(Strahl, Schnittpunkt)
Wenn Schnittpunkt.Gewinner.Material = spiegelnd oder transparent dann
Reflektierter_Anteil := Fresnel(Strahl, Schnittpunkt)
Farbe := Reflektierter_Anteil × Farbe_aus_Richtung(Reflexionsstrahl)
+ Gebrochener_Anteil × Farbe_aus_Richtung(Gebrochener Strahl)
sonst
Farbe := 0
Für jede Lichtquelle
Schattenstrahl := Lichtquelle.Position - Schnittpunkt.Position
SchattenSchnittpunkt := Nächster_Schnittpunkt(Schattenstrahl)
Wenn SchattenSchnittpunkt.Gewinner = Lichtquelle dann
Farbe := Farbe + Direkte_Beleuchtung(Strahl, Lichtquelle)
Farbe_am_Schnittpunkt := Farbe
Il resto del programma può rimanere come con il semplice ray tracing. La funzione Color_aus_Direction qui richiamata può a sua volta richiamare Color_at_Schnittpunkt , da cui risulta chiaro il carattere ricorsivo del metodo.
Tracciamento del raggio diffuso
Oltre alla rifrazione e alla riflessione, il ray tracing ricorsivo consente la simulazione di ombre dure. In realtà, tuttavia, le sorgenti luminose sono di una certa dimensione, il che fa apparire le ombre morbide e sfocate.
Questo effetto, oltre all'antialiasing , alla riflessione brillante e altro, può essere simulato con il ray tracing diffuso (chiamato anche ray tracing stocastico o ray tracing distribuito ), sviluppato da Cook et al. nel 1984. è stato pubblicato. L'idea è di inviare più raggi invece di un raggio in diverse situazioni e formare il valore medio dai colori calcolati. Ad esempio, ombre morbide con ombra e penombra possono essere generate scansionando casualmente la direzione dei raggi d'ombra attraverso la superficie della sorgente luminosa. Lo svantaggio è che ci sarà rumore nell'immagine se vengono usati troppi pochi raggi. Tuttavia, ci sono modi come il campionamento dell'importanza che possono ridurre il rumore.
Tracciamento del percorso e tracciamento dei raggi di luce
Sebbene il ray tracing diffuso consenta numerosi effetti, non è ancora in grado di simulare l'illuminazione globale con effetti come l'interriflessione diffusa e le caustiche ( punti luminosi creati dall'aggregazione della luce). Ciò è dovuto al fatto che i raggi secondari vengono emessi nel caso di riflessioni speculari, ma non nel caso di superfici diffuse.
Nella sua pubblicazione del 1986, James Kajiya descrisse l' equazione di rendering , che costituisce la base matematica per tutti i metodi di illuminazione globale. La "luminosità" conferita da un raggio viene interpretata radiometricamente correttamente come radianza . Kajiya ha mostrato che per l'illuminazione globale, i raggi secondari devono essere emessi da tutte le superfici. Ha anche sottolineato che un albero di rendering ha lo svantaggio che si spreca troppo lavoro sui calcoli in una grande profondità di gerarchia e che è meglio inviare un singolo raggio alla volta. Questo metodo è noto oggi come tracciamento del percorso , poiché un raggio cerca il suo "percorso" attraverso la scena dal punto di vista. Il tracciamento del percorso ha una rigorosa base matematica e fisica.
Se il raggio secondario emesso da una superficie diffusa colpisce direttamente una sorgente luminosa durante il tracciamento del percorso, questa componente di luminosità viene solitamente ignorata. Invece, la proporzione di illuminazione diretta è ancora calcolata usando un raggio d'ombra. In alternativa, l'illuminazione diretta può essere calcolata in quanto viene emesso un solo raggio secondario secondo il modello di illuminazione locale e, se questo colpisce direttamente una sorgente luminosa, ne viene restituita la radianza. Quale di questi due metodi sia più efficiente dipende dal modello di illuminazione locale della superficie e dall'angolo solido della sorgente luminosa vista dalla superficie . La variante concettualmente più semplice del tracciamento del percorso, in cui non vengono emessi raggi ombra, è nota come tracciamento di fotoni aggiunti .
Sebbene il tracciamento del percorso possa simulare l'illuminazione globale, il processo diventa meno efficiente con piccole sorgenti luminose. In particolare, le caustiche e le loro riflessioni sono molto rumorose con il tracciamento del percorso, a meno che non vengano emessi moltissimi raggi. Per questo motivo vengono solitamente utilizzati altri metodi o estensioni basati sul tracciamento del percorso.
Il light ray tracing è una variante rara in cui i raggi luminosi non vengono emessi dal punto di vista, ma dalle sorgenti luminose. I pixel che vengono colpiti dal raggio sul piano dell'immagine sono colorati. Ciò significa che alcuni effetti come le caustiche possono essere simulati bene, ma altri effetti possono essere simulati solo in modo molto inefficiente, poiché molti raggi mancano il piano dell'immagine.
Ulteriori sviluppi
Poiché alcuni effetti possono essere simulati bene solo dal punto di vista, altri solo dalle sorgenti luminose, sono stati sviluppati algoritmi che combinano entrambi i metodi. L'obiettivo è quello di essere in grado di rendere efficientemente scene con distribuzione e riflessione della luce di qualsiasi complessità.
- Tracciamento bidirezionale del percorso ,
- Sviluppato in modo indipendente nel 1993 e nel 1994 da Lafortune/Willems e E. Veach/ Leonidas J. Guibas , è un'estensione diretta del tracciamento del percorso , in cui i raggi vengono inviati sia dal punto di vista che dalle sorgenti luminose ed entrambi i percorsi vengono quindi combinati. I punti di impatto del percorso della luce vengono utilizzati come sorgenti luminose virtuali puntiformi per illuminare il percorso dell'occhio. Il tracciamento del percorso bidirezionale può essere visto come una generalizzazione del tracciamento del percorso, del tracciamento di fotoni aggiunti o del tracciamento dei raggi di luce, poiché tiene conto dello scambio di luce tra tutte le possibili combinazioni di punti di impatto dei due percorsi. La procedura di solito offre prestazioni migliori rispetto al puro tracciamento del percorso, specialmente quando si calcolano le caustiche, ma non elimina completamente i suoi problemi.
- Trasporto leggero metropolitano (MLT)
- è un'estensione del tracciato bidirezionale ed è stato introdotto nel 1997 da Veach e Guibas. Con MLT i fasci di luce vengono emessi in modo tale da adattarsi all'illuminazione ed “esplorare” la scena. L'idea alla base del processo non è quella di scartare combinazioni di percorsi "buone", sulle quali viene trasportata molta energia, subito dopo che sono state trovate, ma di continuare ad utilizzarle. MLT offre spesso vantaggi significativi in termini di velocità e risultati ragionevoli per scene difficili da simulare correttamente con altri (precedenti) algoritmi. Allo stesso modo del tracciamento del percorso e del tracciamento del percorso bidirezionale, MLT fornisce immagini statisticamente non distorte se implementato in modo appropriato , ovvero, l'unica deviazione dall'immagine ideale è il rumore dell'immagine; altri errori sono esclusi.
- Mappatura dei fotoni
- è stato pubblicato da Jensen nel 1995. Il processo consiste nell'emettere particelle dalle sorgenti luminose e immagazzinarle in una struttura speciale che è indipendente dalla geometria. Questo algoritmo è stato un passo avanti in quanto ha permesso di salvare l'illuminazione in una fase di pre-elaborazione e di ricostruirla in tempi relativamente brevi durante il processo di rendering.
- La mappatura dei fotoni non è un processo di rendering autonomo, ma serve a completare altri metodi di ray tracing, principalmente per estendere il ray tracing diffuso all'illuminazione globale. Tuttavia, la mappatura dei fotoni non è fedele alle aspettative, la sua precisione è difficile da controllare in modo intuitivo e meno robusta della MLT. Ciò è particolarmente evidente nelle scene con condizioni di illuminazione difficili.
panoramica
| Processo di ray-tracing | l'ombra | Riflessione / rifrazione / dispersione della luce | illuminazione | Immagine di esempio |
|---|---|---|---|---|
| Solo calcolo del mascheramento | No | No | No |
|
|
Simulazione di ombre (con un solo raggio d'ombra) |
Solo ombre dure | No | Solo illuminazione diretta |
|
| Ray-tracing ricorsivo | Solo ombre dure | Solo con superfici riflettenti / rifrangenti | Illuminazione diretta o solo riflessione/rifrazione |
|
| Tracciamento del raggio diffuso | Completamente | Solo con superfici riflettenti / rifrangenti | Illuminazione diretta o solo riflessione/rifrazione |
|
|
Path tracing (e successive procedure) |
Completamente | Completo (anche diffuso ) | Completo ( illuminazione globale ) |
|
Speciale
Le varianti comuni elencate di ray tracing possono essere espanse per abilitare effetti aggiuntivi. Qualche esempio:
- Geometria Solida Costruttiva (CSG)
- è un metodo di modellazione comune in cui gli oggetti vengono assemblati da altri oggetti. Il ray tracing può essere ampliato per includere la funzionalità CSG in modo relativamente semplice.
- Mappatura delle texture
- così come la mappatura di spostamento e la mappatura a sbalzo sono possibili anche per il ray tracing. Con quest'ultimo metodo, tuttavia, occorre prestare attenzione che le direzioni di riflessione generate puntino sempre lontano dall'oggetto.
- Dispersione del volume
- consente la simulazione realistica di oggetti parzialmente traslucidi e oggetti che diffondono la luce. Questo include, ad esempio, il latte o le foglie , ma anche l' azzurro del cielo e le condizioni atmosferiche.
- Rendering spettrale
- I più comuni ray tracer utilizzano lo spazio colore RGB per rappresentare i colori, che è solo un'approssimazione dello spettro luminoso continuo e non è sempre fisicamente plausibile. Utilizzando una rappresentazione del colore che dipende dalla lunghezza d'onda della luce, è possibile simulare effetti come metamerismo e dispersione . Sono possibili anche polarizzazione e fluorescenza .
- Rendering ad alta gamma dinamica
- Calcolando i valori di colore durante il ray tracing utilizzando numeri in virgola mobile e memorizzandoli in immagini HDR con un intervallo di contrasto elevato, è possibile modificare successivamente la luminosità e il contrasto delle immagini renderizzate senza alcuna perdita di qualità. Con l' illuminazione basata sull'immagine , la scena da renderizzare è racchiusa in un'immagine HDR, che consente un'illuminazione realistica attraverso l'ambiente registrato.
- Ray tracing relativistico
- Considerando le formule per la teoria della relatività ristretta , si possono illustrare gli effetti ottici che si verificano con lo spazio-tempo curvo . I percorsi dei raggi vengono modificati tenendo conto delle elevate velocità e masse; ci sono anche cambiamenti di luminosità e colore.
Aree di applicazione
Computer grafica
I calcoli di ray tracing sono considerati molto dispendiosi in termini di tempo. Il raytracing viene quindi utilizzato principalmente nella generazione di rappresentazioni in cui la qualità piuttosto che il tempo di calcolo è in primo piano. L'elaborazione di un'immagine con ray tracing può richiedere tempi diversi - in pratica spesso diverse ore, in singoli casi anche diversi giorni - a seconda della tecnologia utilizzata, della complessità della scena, dell'hardware utilizzato e della qualità desiderata. In ambiti come la realtà virtuale , in cui le rappresentazioni spaziali devono essere calcolate in tempo reale , il ray tracing non è stato finora in grado di affermarsi. I film di animazione al computer sono prodotti principalmente con il sistema REYES , che evita il più possibile i calcoli di ray tracing. Il ray tracing è stato usato occasionalmente dalla scena demo .
Rispetto ai tradizionali renderer real- time basati su Z- Bufferers, però, il ray tracing presenta diversi vantaggi: una implementazione semplice con complessità gestibile , un alto grado di flessibilità rispetto alla pipeline grafica e la più facile intercambiabilità degli shader, che rende il implementazione di nuovi shader più semplice. La velocità del ray tracing deve quindi essere rapportata alla qualità dell'immagine raggiunta. Non c'è alternativa al ray tracing per i severi requisiti di qualità della sintesi di immagini realistiche, specialmente per scene complicate con qualsiasi materiale.
Si stanno compiendo sforzi per implementare ray tracer in tempo reale per scene complesse, cosa che è già stata ottenuta in determinate condizioni con soluzioni software ottimizzate per processore e memoria . Le implementazioni del ray tracing ottimizzate per l'hardware mostrano che è ipotizzabile un uso futuro e diffuso del ray tracing in tempo reale. Con queste applicazioni, progetti, come quelli OpenRT - programmazione e varie implementazioni per GPU programmabili ( GPGPU ). Inoltre, sono state sviluppate architetture speciali per il ray tracing con accelerazione hardware.
Ulteriori campi di applicazione
Il principio del ray tracing può essere esteso a tutti i campi di applicazione in cui si vuole simulare la propagazione delle onde in una scena. I raggi rappresentano sempre i vettori normali ad un fronte d'onda . Nell'auralizzazione e nella tecnologia ad alta frequenza, si cerca di simulare gli effetti di una scena sull'acustica o su un campo elettromagnetico . Lo scopo è calcolare la quantità di energia per determinate frequenze che viene trasmessa da un trasmettitore a un ricevitore attraverso i vari percorsi possibili attraverso la scena.
In acustica, il ray tracing è un modo per risolvere questo problema oltre al metodo della sorgente sonora speculare e al calcolo del suono diffuso. Per la simulazione devono essere prese in considerazione le proprietà dei materiali dei vari corpi e l' attenuazione del suono da parte dell'aria.
Un modo per trovare i percorsi di trasmissione è inviare raggi da una sorgente isotropicamente (in tutte le direzioni), possibilmente riflettendoli sugli oggetti con una perdita di energia, e determinare l'energia totale dei raggi che colpiscono il ricevitore. Questo metodo è chiamato ray launching . I raggi possono anche avere una certa “forma” - ad esempio quella di un tubo - per poter simulare ricevitori puntiformi. Lo svantaggio di questo metodo è la sua lentezza, poiché molti raggi non raggiungono mai il ricevitore ed è necessario un numero elevato per statistiche precise.
Un altro problema nasce dal fatto che la lunghezza d'onda spesso non è trascurabile rispetto alle dimensioni dei corpi all'interno di una scena. Se non si tiene conto della diffrazione dei raggi, possono quindi verificarsi errori evidenti nella simulazione.
letteratura
- Philip Dutré, Philippe Bekaert, Kavita Bala: Illuminazione globale avanzata. AK Peters, Natick MA 2003, ISBN 1-56881-177-2 ( advancedglobalillumination.com )
- Andrew S. Glassner: un'introduzione al ray tracing. Morgan Kaufmann, Londra 1989, ISBN 0-12-286160-4
- Andrew S. Glassner: Principi di sintesi di immagini digitali. Morgan Kaufmann, Londra 1995, ISBN 1-55860-276-3
- Matt Pharr, Greg Humphreys: Rendering a base fisica. Dalla teoria alla realizzazione. Morgan Kaufmann, Londra 2004, ISBN 0-12-553180-X ( pbrt.org )
- Peter Shirley: Ray Tracing realistico. AK Peters, Natick MA 2003, ISBN 1-56881-198-5
- Kevin G. Suffern: Ray Tracing da zero. AK Peters, Wellesley MA 2007, ISBN 978-1-56881-272-4
link internet
- Notizie sul ray-tracing (inglese)
- Elenco di algoritmi di test di intersezione per vari tipi primitivi (inglese)
- Tom's Hardware: "Quando il ray tracing sostituirà la rasterizzazione?" (Inglese)
- Illusion fuge: "Ray tracing video didattico"
Osservazioni
- ↑ Hans-Joachim Bungartz et al.: Introduzione alla Computer Graphics: Fundamentals, Geometric Modeling, Algorithms, p.135 . Vieweg, Braunschweig 2002, ISBN 3-528-16769-6
- ^ Beat Brüderlin, Andreas Meier: Computer grafica e modellazione geometrica, p.154. Teubner, Stoccarda 2001, ISBN 3-519-02948-0
- ↑ Terrence Masson: CG 101: un riferimento per l'industria della computer grafica. P. 267. Fauxtografia digitale 2007, ISBN 0-9778710-0-2
- ↑ Arthur Appel: alcune tecniche per il rendering di solidi con macchine ombreggianti. In Atti della Spring Joint Computer Conference 1968. pp. 37-45. AFIPS Press, Arlington
- ^ Mathematical Applications Group, Inc.: Grafici simulati 3-D offerti da Service Bureau. Datamation 13, 1 (febbraio 1968): 69, ISSN 0011-6963
- ^ Robert Goldstein, Roger Nagel: simulazione visiva 3-D. Simulazione 16, 1 (gennaio 1971): 25-31, ISSN 0037-5497
- ↑ Terrence Masson: CG 101: un riferimento per l'industria della computer grafica. In: Digital Fauxtography , 2007, ISBN 0-9778710-0-2 , pagina 162.
- ↑ Oliver Abert et al.: Ray Tracing diretto e veloce di superfici NURBS. In Proceedings of IEEE Symposium on Interactive Ray Tracing 2006. pp. 161-168. IEEE, Salt Lake City 2006, ISBN 1-4244-0693-5 ( PDF, 700 kB ( Memento del 2 dicembre 2007 in Internet Archive ))
- ^ Vlastimil Havran et al.: Confronto statistico degli schemi di efficienza del Ray-Shooting. Technical Report TR-186-2-00-14, Institute of Computer Graphics and Algorithms, Vienna University of Technology 2000 ( ist.psu.edu )
- ↑ Ingo Wald, Vlastimil Havran: Sulla costruzione di alberi kd veloci per il ray tracing, e sul farlo in O (N log N). In Proceedings of IEEE Symposium on Interactive Ray Tracing 2006. pp. 61-69. IEEE, Salt Lake City 2006, ISBN 1-4244-0693-5 ( PDF, 230 kB )
- ↑ Ingo Wald et al.: Rendering interattivo con Ray Tracing coerente. Computer Graphics Forum 20, 3 (settembre 2001), pp. 153–164, ISSN 0167-7055 ( graphics.cs.uni-sb.de ( Memento del 5 giugno 2005 in Internet Archive ))
- ↑ Alexander Reshetov et al.: Algoritmo di Ray Tracing multilivello. Transazioni ACM su grafici 24, 3 (luglio 2005): 1176–1185, ISSN 0730-0301 ( PDF; 400 kB )
- ^ Douglas Scott Kay: Trasparenza, rifrazione e ray-tracing per immagini sintetizzate al computer. Tesi, Cornell University, Ithaca 1979
- ^ Turner Whitted: un modello di illuminazione migliorato per display ombreggiato. Comunicazioni dell'ACM 23, 6 (giugno 1980): 343-349, ISSN 0001-0782 ( PDF, 4.6 MB )
- ^ Robert Cook et al.: Ray tracing distribuito. ACM SIGGRAPH Computer Graphics 18, 3 (luglio 1984), pp. 137-145, ISSN 0097-8930
- ↑ Peter Shirley, Changyaw Wang, Kurt Zimmermann: Tecniche Monte Carlo per i calcoli dell'illuminazione diretta. ACM Transactions on Graphics 15, 1 (gennaio 1996), pp. 1–36 ( PDF; 400 kB )
- ^ James Kajiya: L'equazione di rendering. ACM SIGGRAPH Computer Graphics 20, 4 (agosto 1986), pp. 143-150, ISSN 0097-8930
- ↑ Eric Veach, Leonidas J. Guibas: Combinazione ottimale di tecniche di campionamento per il rendering Monte Carlo. In SIGGRAPH '95 Atti, pp. 419-428. ACM, New York 1995, ISBN 0-89791-701-4 ( graphics.stanford.edu )
- ↑ R. Keith Morley et al.: Sintesi di immagini usando fotoni aggiunti. In Atti di Graphics Interface 2006, pp. 179-186. Canadian Information Processing Society, Toronto 2006, ISBN 1-56881-308-2 ( PDF, 4.7 MB )
- ↑ Eric Lafortune, Yves Willems: Path Tracing bidirezionale. In Atti di Compugraphics '93. Pagg. 145-153. Alvor 1993 ( graphics.cornell.edu )
- ↑ Eric Veach, Leonidas Guibas: Stimatori bidirezionali per il trasporto leggero. In Eurographics Rendering Workshop 1994 Atti. Pagg. 147-162. Darmstadt 1994 ( graphics.stanford.edu )
- ^ E. Veach, LJ Guibas: Trasporto leggero della metropoli. In SIGGRAPH '97 Atti. Pagg. 65-76. ACM Press, New York 1997, ISBN 0-89791-896-7 ( graphics.stanford.edu )
- ^ Henrik Wann Jensen e Niels Jørgen Christensen: Mappe del fotone nel Ray Tracing bidirezionale di Monte Carlo di oggetti complessi. Computers and Graphics 19, 2 (marzo 1995): 215-224, ISSN 0097-8493 ( graphics.stanford.edu )
- ^ Peter Atherton: Una procedura di rimozione della superficie nascosta della linea di scansione per la geometria solida costruttiva. ACM SIGGRAPH Computer Graphics 17, 3 (luglio 1983), pp. 73-82, ISSN 0097-8930
- ↑ Alexander Wilkie et al.: Rendering combinato di effetti di polarizzazione e fluorescenza. In Atti del XII Workshop Eurographics sulle Tecniche di Rendering . Springer, Londra 2001, ISBN 3-211-83709-4 , pp. 197-204 ( PDF, 2,9 MB )
- ^ Daniel Weiskopf et al.: Relatività del mondo reale: visualizzazione relativistica speciale basata su immagini. In IEEE Visualizzazione: Atti della Conferenza sulla Visualizzazione 2000. pp. 303-310. IEEE Computer Society Press, Salt Lake City 2000, ISBN 1-58113-309-X ( PDF, 640 kB ( Memento del 13 giugno 2007 in Internet Archive ))
- ↑ Jörg Schmittler et al.: SaarCOR - Un'architettura hardware per Ray Tracing. In Atti della conferenza SIGGRAPH / EUROGRAPHICS sull'hardware grafico. Pagg. 27-36. Eurographics, Aire-la-Ville 2002, ISBN 1-58113-580-7 ( PDF, 1.0 MB ( Memento del 28 luglio 2007 in Internet Archive ))