notJustCode.it
 
\\ Home : Articoli
Nebbia
Di RobyDx (del 28/01/2007 @ 16:06:28, in DirectX9, linkato 1649 volte)

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

Formula Nebbia Lineare 

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à

Formula Nebbia Esponenziale 

FogMode.Exp2

Come quella esponenziale ma con una formula diversa. Utilizza anch'essa la densità.

Formula Nebbia Esponenziale Quadratica 

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#

    Articolo Articolo  Storico Storico Stampa Stampa
    I commenti sono disabilitati.
    "L'importante è non smettere di fare domande."

    Albert Einstein


    Cerca per parola chiave
     

    Titolo
    Articoli (4)
    C++ (4)
    Direct3D10 (30)
    Direct3D11 (20)
    DirectX9 (82)
    DotNet (10)
    English (9)
    FanGames (22)
    ManagedDX11 (2)
    Materiale Utile (4)
    News (39)
    Shader Library (12)
    SharpDX (1)
    Software (25)
    Tecnologia (19)
    Varie (9)

    Gli interventi più cliccati

    Ultimi commenti:
    If you wish to retai...
    23/05/2013 @ 13:07:45
    Di chanel outlet
    You deficit of self-...
    23/05/2013 @ 13:07:13
    Di cartier watches uk
    Reinforce your own l...
    23/05/2013 @ 13:06:37
    Di replica watches
    Whenever you"re shiv...
    23/05/2013 @ 13:06:11
    Di swiss replica watches
    It's likely you have...
    23/05/2013 @ 13:05:02
    Di chanel handbags
    Cheap automobile ins...
    23/05/2013 @ 13:04:28
    Di replica watches

    Titolo
    Con quale tecnologia state realizzando o avete intenzione di realizzare i vostri progetti?

     DirectX11
     DirectX10
     DirectX9
     XNA
     DirectX8 o Precedenti
     OpenGL
     Motori grafici già pronti
     Altro

    Titolo
    Umorismo (17)

    Le fotografie più cliccate



    Ci sono 62 persone collegate
    Sono state visualizzate  pagine

    19/06/2024 @ 05:19:29
    script eseguito in 40 ms