Che cos'è un'ombra OpenGL®?
Un'ombra Open Graphics Library® (OpenGL®) è un'approssimazione visiva in una scena OpenGL® tridimensionale di come un'ombra verrebbe proiettata nella vita reale in condizioni di illuminazione simili. Le ombre sono una caratteristica visiva complessa da implementare in OpenGL®, in gran parte perché non esiste un supporto innato per il cast delle 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, shader e, in alcuni casi, estensioni che danno accesso a funzioni speciali su determinate grafiche carte. Nella maggior parte dei casi, la qualità, l'accuratezza e la velocità del rendering delle ombre OpenGL® sono direttamente correlate alla potenza di elaborazione e alla memoria dell'hardware grafico presente in un computer o dispositivo. Alcuni dei metodi più popolari di implementazione di un'ombra OpenGL® includono volumi d'ombra, mappatura dell'ombra e ray tracing.
La creazione di un'applicazione che supporti OpenGL® shadow richiede conoscenze matematiche e una conoscenza approfondita del funzionamento di OpenGL®. OpenGL® è ampiamente utilizzato per creare scene 3D dinamiche e renderizzate in tempo reale, quindi gli algoritmi utilizzati per creare ombre non devono solo essere ottimizzati per la velocità, ma devono anche essere attentamente misurati per il loro consumo di risorse e qualsiasi interruzione che potrebbe essere causato nella pipeline grafica utilizzata per il rendering. Per questi motivi, il metodo più semplice per creare un'ombra, chiamato ray tracing, è spesso poco pratico per le scene 3D complete, perché può richiedere molto tempo.
Il ray tracing segue sostanzialmente una linea immaginaria, o raggio, dal piano di visualizzazione o posizione della telecamera 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, in cui la scena 3D viene disegnata su una superficie bidimensionale (2D) in modo che possa essere visualizzata, il processo di ray tracing deve essere eseguito su ogni pixel che viene disegnato e, soprattutto con trame o altro proprietà di superficie, potrebbe essere necessario valutare più volte gli stessi pixel. Ciò significa che il ray tracing 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 delle ombre. Questo metodo utilizza il buffer di profondità o stencil per eseguire il rendering di 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 renderizzata una seconda volta dall'angolo di visualizzazione corretto, verificando se ciascun pixel rientra in una determinata distanza all'interno del buffer, indicando se il pixel è illuminato o ombreggiato. L'uso della mappatura dell'ombra può richiedere molta memoria e, con scene che hanno più di una sorgente luminosa, può comportare la creazione di più mappe da più angolazioni.
I volumi delle ombre sono un modo per creare un'ombra OpenGL® che è più accurata di alcuni altri metodi, ma presenta i propri problemi. Un volume d'ombra è essenzialmente un pezzo invisibile di geometria in una scena che si espande dalla superficie illuminata di un oggetto lontano dalla sorgente luminosa. Questo volume può essere verificato rispetto ad altri oggetti per vedere se stanno cadendo nell'ombra della superficie da cui ha origine il volume. Questa procedura può essere molto complessa e alla fine creare artefatti visivi quando ottimizzata per la velocità.