\\ Home : Articoli : Stampa
Non photo realistic rendering: ink & pen
Di RobyDx (del 21/01/2007 @ 12:20:59, in Shader Library, linkato 2185 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