Questa tecnica prende il nome di Glow e permette di migliorare la qualità dell’illuminazione della scena.
Una luce, infatti, genera intorno a se un alone luminoso che rende l’aspetto dell’oggetto più realistico, per capire cosa sia il Glow basta immaginare una fiamma o le luci al neon.
Passiamo a spiegare il funzionamento della demo.
La tecnica si divide fondamentalmente in tre passaggi da eseguire in questo preciso ordine:
- Rendering dell’oggetto, o degli oggetti, che compongono la scena.
- Rendering, su una Surface, dell’oggetto, o degli oggetti, che generano un alone.
- Blur dell’immagine renderizzata sulla Surface.
Infine la surface, su cui abbiamo renderizzato l’alone, sarà utilizzata come una texture da applicare ad un Quad ( per chi non lo sapesse un quad è un poligono che ricopre esattamente la superficie del backbuffer ).
Renderiziamo il sole utilizzando l’effect presente nel file Sun.fx, leggendo il vertex shader vi accorgerete che le coordinate texture saranno calcolate, oltre che per le coordinate UV, anche per la coordinata W questo perchè la texture che utilizzeremo per creare il noise, la perturbazione della superficie del sole, sarà di tipo volumetrico ( quindi una texture 3D ).
A creare il noise ci pensa il nostro pixel shader che come possiamo vedere miscela due volte la texture volumetrica; per rendere più realistico l’effetto turbolenza della superficie solare facciamo variare con costanza le coordinate texture sommando un valore che passeremo dall’applicazione, infine il colore che vedremo sarà preso da una texture 1D che contiene le tonalità di colore che variano dal nero al bianco.
Il secondo passo consiste nel renderizzare su una surface l’oggetto che genera il glow, nel nostro esempio dovremo aumentare la luminosità del sole ( alzate il valore del parametro SunShiny ) e anche le sue dimensioni. La terra dovrà essere renderizzata nuovamente stando attenti a far ritornare un colore nero e un valore alpha uguale a 0 così che, al momento di unire il tutto, l’alone del sole non “trapassi” la geometria della terra.
L’ultimo passo consiste nell’eseguire, per due volte, il blur dell’immagine renderizzata sulla nostra surface ed usarla come texture da applicare al nostro quad, in pratica quello che stiamo facendo in questo passaggio è miscelare la texture con ciò che è già stato renderizzato nel primo passo dell’articolo così da avere un risultato finale come nell’immagine.
Per finire ho fatto in modo che spingendo la lettera S vengano salvate tre immagini in cui viene salvato il contenuto delle surface nei vari passaggi del demo così da rendere più chiaro ciò che realmente succede.
- Realizzato in C++ e DirectX9.0c di Dicembre
- Linguaggio usato: HLSL tramite FX
- Requisiti hardware: VS_2_0, PS_2_0, supporto renderTarget A8R8G8B8
- Schede video: nvidia geforce 5200 o superiori, ATI 9500 o superiori
Demo