Cos'è un'ombra OpenGL®?
Un Open Graphics Library® (OpenGL®) Shadow è un'approssimazione visiva in una scena tridimensionale (3D) OpenGL® di come un'ombra sarebbe espressa in vita reale in condizioni di illuminazione simili. Le ombre sono una funzionalità visiva complessa da implementare in OpenGL®, soprattutto perché non esiste un supporto innato per lanciare ombre in una scena. Esistono invece una varietà di tecniche che possono essere utilizzate per creare ombre dagli oggetti e dalla geometria all'interno di una scena usando vari strumenti, come i vari buffer disponibili, gli shader e, in alcuni casi, le estensioni che danno accesso a caratteristiche speciali su alcune schede grafiche. Nella maggior parte dei casi, la qualità, l'accuratezza e la velocità del rendering OpenGL® Shadow sono direttamente correlati alla potenza di elaborazione e alla memoria dell'hardware grafico presente in un computer o dispositivo. Alcuni dei metodi più popolari per l'implementazione di un'ombra OpenGL® includono volumi d'ombra, mappatura delle ombra e tracce di raggi.
La creazione di un'applicazione con il supporto OpenGL® Shadow richiede conoscenze matematiche e una profonda comprensione di come funziona OpenGL®. OpenGL® è in gran parte utilizzato per creare scene 3D dinamiche e rese in tempo reale, quindi gli algoritmi utilizzati per creare ombre non devono essere ottimizzati solo per la velocità, ma devono anche essere attentamente misurati per il loro consumo di risorse e eventuali interruzioni che potrebbero essere causati nella pipeline grafica utilizzata per il rendering. Per questi motivi, il metodo più basilare per creare un'ombra, chiamato Ray Tracing, è spesso poco pratico per le scene 3D complete, perché può richiedere molto tempo.
Ray Tracing segue sostanzialmente una linea immaginaria, o raggio, dal piano di visualizzazione o dalla posizione della fotocamera attraverso una scena alla superficie di un oggetto e quindi calcola il colore della superficie in base alla posizione di una o più fonti di luce e altri fattori. Durante il processo di rasterizzazione, dove ilLa scena 3D è attratta da una superficie bidimensionale (2D), quindi può essere visualizzata, il processo di tracciamento dei raggi deve essere eseguito su ogni pixel che viene disegnato e, specialmente con trame o altre proprietà della superficie, potrebbe essere necessario valutare più volte gli stessi pixel. Ciò significa tracciare i raggi in tempo reale, sebbene renderebbe accuratamente le ombre, di solito non è pratico.
Un altro metodo che può essere utilizzato per creare un'ombra OpenGL® è noto come mappatura dell'ombra. Questo metodo utilizza il buffer di profondità o stencil per rendere una scena dall'angolo della sorgente luminosa come una serie di distanze dalla sorgente luminosa alle superfici di diversi oggetti all'interno della scena. La scena viene quindi resa una seconda volta dall'angolo di visualizzazione corretto, controllando se ogni pixel rientra all'interno di un determinato intervallo di distanza all'interno del buffer, indicando se il pixel è acceso o oscurato. L'uso della mappatura dell'ombra può essere ad alta intensità di memoria e, con scene che hanno più di una sorgente luminosa, può coinvolgere mAking più mappe da più angoli.
I volumi d'ombra sono un modo per creare un'ombra OpenGL® più accurata di alcuni altri metodi, ma presenta i propri problemi. Un volume d'ombra essenzialmente è un pezzo di geometria invisibile in una scena che si espande dalla superficie illuminata di un oggetto lontano dalla sorgente luminosa. Questo volume può essere controllato contro altri oggetti per vedere se stanno cadendo all'ombra della superficie da cui è originato il volume. Questa procedura può essere molto complessa e alla fine creare artefatti visivi se ottimizzati per la velocità.