La nebbia in DirectX (o per dirla in modo più fico l'effetto di fogging) è uno dei numerosi effetti che vengono utilizzati nella grafica tridimensionale. Questo effetto, uno dei più utilizzati, consiste semplicemente in quello che il nome suggerisce: la visualizzazione della nebbia nella scena con l'intensità ed il colore che noi preferiamo. Molte persone che hanno seguito l'evoluzione dei giochi 3D hanno spesso una considerazione negativa dell'effetto nebbia. Questo effetto che è nato per dare un maggior realismo alle scene è stato infatti usato per anni per coprire il problema del clipping. Per chi non sapesse cosè il clipping sappiate che il concetto è molto semplice. Un calcolatore ha una certa potenza di calcolo e di conseguenza se deve visualizzare una scena 3D troppo grande (unita alla gestione del resto gioco) non riesce ad aggiornarla sufficientemente veloce. Di conseguenza si cerca di visualizzare solo gli oggetti vicini non renderizzando quelli distanti in modo da diminuire il numero totale di poligoni. Questo si chiama appunto clipping. Dato che in questo modo si creano dei vuoti che dovrebbero contenere gli elementi più distanti si cerca allora di nasconderli. Uno dei modi più usati è proprio la nebbia. Ad esempio si può inserire una nebbia molto fitta che impedisce di vedere oltre i 30 metri e quindi non renderizzare gli oggetti oltre questa distanza. Purtroppo a volte viene impiegata tanta di quella nebbia da rendere troppo stretta la visuale e quindi difficile orizzontarsi negli ambienti di gioco proposti. Da qui la sua connotazione negativa. Oggi i calcolatori attuali e soprattutto le console non dovrebbero più avere questi problemi e quindi non dovrebbe essere necessario utilizzare la nebbia per nascondere problemi nel motore del gioco.
Il fogging rimane comunque un effetto molto bello che può dare un tocco di realismo alla scena e (senza esagerare) nascondere un pò di clipping. Prima di spiegare come utilizzare questo effetto (semplicissimo in realtà) è necessario spiegare alcune cose. La nebbia che DirectX crea non è volumetrica, cioè non ha un volume. Di conseguenza non è possibile creare delle zone con nebbia (per esempio della nebbia bassa al suolo). Utilizzandola capirete.
Esistono 3 tipi di nebbia che si utilizzano in 2 diverse modalità. Tutte si impostano con dei parametri del
device.RenderState
per attivare la nebbia è sufficiente impostare a true
.FogEnable = True
Le due modalità sono:
vertexMode - calcolo della nebbia sui vertici
FogTableMode - calcolo della nebbia eseguito sui pixel. Dato che molte schede video utilizzano delle particolari tabelle questa viene appunto chiamata tableMode.
Ad ognuna di queste modalità va passata una di queste 4 costanti
FogMode.None
Disabilitata. Una delle 2 deve necessariamente essere impostata a none (valore di default)
FogMode.Linear
questa è la nebbia più semplice. Utilizza 2 parametri che vengono impostati sempre tramite il renderstate con 2 single. I valori sono le distanze di inizio e fine della nebbia in unità di spazio. La nebbia cresce linearmente tra le due distanze.
FogStart = inizio
FogEnd = fine
FogMode.Exp
Questo tipo di nebbia aumenta esponenzialmente con la distanza. Utilizza come parametro la densità espressa in single (valori inferiori ad 1). La nebbia cresce con la distanza dalla telecamera.
FogDensity = densità
FogMode.Exp2
Come quella esponenziale ma con una formula diversa. Utilizza anch'essa la densità.
Ricordate che se impostate una modalità con una di queste l'altra deve essere impostata a nothing.
L'ultimo parametro è il colore
.FogColor = colore
Dove colore è un oggetto color.
Ultime note:
La nebbia copre solo gli oggetti 3D. Sfondo e sprite non vengono coperti da nebbia.
La nebbia appesantisce la scheda video (ma molto poco).
La nebbia non è reale ma è solo un effetto.
Come utilizzare la nebbia.
Le formule forse vi diranno poco e di conseguenza andrete a tentativi fino ad individuare l'effetto adatto. Se dovete usare la nebbia per effetti particolari semplicemente regolate quella che preferite come volete ma se dovete usarla per nascondere il clipping dovete rispettare una regola: gli oggetti da nascondere con la nebbia devono trovarsi su uno sfondo dello stesso colore della nebbia. Se ad esempio dovete nascondere una montagna in lontananza fate in modo che il cielo dietro abbia lo stesso colore della nebbia altrimenti non sembrerà che l'oggetto scompaia dietro la nebbia. Per effetti migliori sono necessarie tecniche più elaborate.
Vi lascio ad un semplice esempio.
Esempio VB.Net
Esempio C#