notJustCode.it
 
\\ Home : Articoli
Non photo realistic rendering: ink & pen
Di RobyDx (del 21/01/2007 @ 12:20:59, in Shader Library, linkato 2144 volte)

Questo è uno shader creato da me che vuole simulare il tratto chiaro, scuro fatto con la china. L'effetto sfrutta numerosi passaggi per essere realizzato. Il primo passo è un rendering multiplo su tre texture. Nella prima viene renderizzata la scena normale illuminata in perPixel lighting, sulla seconda il depth space e sulla terza il normal space. Il depth space ed il normal space sono il rendering della scena in cui però il colore è utilizzato come informazione. Il depth compare come una scena in sfumature di grigio in cui più il colore è vicino al bianco e più la scena è lontana. Il normal space invece usa come colore la normale. Questi due spazi vengono utilizzati per generare il contorno tramite filtro sobel. Il filtro sobel è una operazione applicata ad un pixel che tramite quelli ad esso vicino permette di calcolare il contorno di una immagine con una buona precisione sfruttando le differenze di colore. Infatti dove vi è un veloce cambio di gradazione di grigio significa che vi è un bordo, idem attraverso le normali, dove vi è un cambio veloce di colore significa che siamo di fronte ad uno spigolo. I successivi 2 passaggi sono l'applicazione del filtro sobel a queste 2 texture, fatte separate perchè occorre leggere la texture 8 volte e quindi in totale 16 che erano troppe insieme alle istruzioni aritmetiche. Il passaggio 2 e 3 generano il contorno del depth space e del normal space. Il terzo passaggio fonde i 2 contorni ed applica un filtro tap5 che allarga il bordo ammorbidendolo prendendo per ogni pixel quello più scuro tra i 4 vicini e se stesso. Ora abbiamo 2 texture da fondere: la prima con il rendering normale e la seconda con il contorno. Ad essa aggiungo una texture volumetrica che contiene 4 sfumature in bianco e nero in penna grafica (banalmente generate con photoEditor). Ogni sfumatura è una bitmap quadrata che viene inserita dal più scuro al più chiaro. Nell'ultimo passaggio il colore della texture con il rendering normale viene convertito in grigio facendo la media tra i colori. Il colore viene usata come profondità per la texture con le sfumature e moltiplicata per il colore originale della scena e per il contorno. Il risultato è quello in figura.

Esempio Shader Ink & Pen

  • VB.Net 2003 o framework 1.1
  • linguaggio usato: HLSL
  • requisiti hardware: VS_2_0, PS_2_0, multiple render target
  • funziona anche in reference

    OutLine.zip 2.4 Mb

  • Articolo Articolo  Storico Storico Stampa Stampa
    I commenti sono disabilitati.
    "Ciò che veramente mi interessa è se Dio avesse potuto fare il mondo in una maniera differente, cioè se la necessità di semplicità logica lasci qualche libertà."

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

    14/05/2024 @ 19:15:33
    script eseguito in 42 ms