notJustCode.it
 
\\ Home : Articoli
Depth of Field
Di RobyDx (del 21/01/2007 @ 11:16:09, in Shader Library, linkato 1588 volte)

Il depth of field o in italiano profondità di campo è la nostra normale visione dell'ambiente. Mettete un dito davanti al volto e mettetelo a fuoco: tutto il resto sarà sfocato. Lo stesso problema insomma della messa a fuoco di ogni macchina fotografica. L'utilizzo della profondità di campo si sta diffondendo rapidamente con ottimi risultati (un ottimo esempio è Prince of Persia The sand of time di Ubisoft). Il risultato è un maggiore realismo delle scene che da un maggiore senso di profondità alla scena.Ottenere questo effetto è abbastanza semplice. Sono sufficienti 2 texture con il renderToSurface. Su una si renderizza la scena mentre sull'altra un depth space. Questo spazio altro non è che la stessa scena con la stessa inquadratura ma che ha come colore la distanza del punto da quello virtualmente a fuoco. Banalmente con un semplice teorema di pitagora calcoliamo la distanza del vertice dal punto a fuoco e proporzionamolo da 0 a 1 dividendo per la distanza massima scelta e limitando il risultato. La scena che si ottiene è un ambiente in bianco e nero che sfuma a seconda della distanza. Infine renderizziamo le 2 texture sullo schermo applicando un filtro di gauss alla prima texture. Il fattore di sfocatura è stabilito appunto dalla seconda texture. Quindi se ad esempio scegliamo il bianco come a fuoco dove la seconda texture è più scura la scena sarà più sfocata. Ricordo che un filtro di gauss significa che ogni punto è la media dei punti che lo circondano. L'esempio mostra una messa a fuoco lineare (ossia utilizzando semplicemente la distanza) ma potete migliorarlo applicando funzioni più articolate. Il principio rimane lo stesso. Vi lascio all'immagine:

...e all'esempio :

  • VB.Net 2003 o framework 1.1
  • linguaggio usato: HLSL
  • requisiti hardware: VS_2_0, PS_2_0

    depthOfFieldHLSL.zip 1,5Mb

  • Articolo Articolo  Storico Storico Stampa Stampa
    I commenti sono disabilitati.
    "Avete mai notato che la velocità del computer è sempre inversamente proporzionale alla fretta di chi lo sta usando?"

    Sergio Boarina


    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 33 persone collegate
    Sono state visualizzate  pagine

    28/03/2024 @ 13:17:38
    script eseguito in 58 ms