Per "Rendering non-fotorealistico" (non-photorealistic rendering, NPR), s'intende tutta quella classe di tecniche di rendering il cui scopo è emulare le tecniche di illustrazione tradizionali (tratteggio, acquerello, carboncino...) o aumentare la leggibilità della grafica computerizzata nel caso di illustrazioni tecniche (quello che fa sketchup - tanto per intenderci).
Non mi pare che ci siano guide in italiano che trattino l'argomento per Maya ed essendo completamente privo di senso della misura ho deciso di trattare l'argomento per primo.Nel proseguo do per scontato che conosciate le funzionalità base del programma. Userò le convenzioni LMB, MMB, RMB per i tasti sinistro, centrale e destro del mouse.
È il primo tutorial che scrivo, per cui non bestemmiate se non vi assomiglia.

Reti di Shaders e Samplers (Cel-Shading)

Per poter costruire una shading network utile ai nostri scopi dobbiamo prima comprendere come funzionano quei nodi particolari che vanno sotto il nome di "Samplers" e che incomprensibilmente tutti usano e nessuno spiega mai. Per farlo introdurrò l'argomento con il primo -brevissimo- tutorial vero e proprio (colgo l'occasione per ringraziare Dino Figuera che per primo mi ha illustrato questa tecnica):

1) Lanciate maya e create un piano (per esso potete lasciare il lambert di default), quindi quattro sfere che disporrete su di esso come se vi fossero poggiate. A questo punto create una luce e fatele proiettare ombre sulle sfere; io ho creato una spot-light. Aprite la finestra dell' Hypershade e create un materiale RampShader. Non fate altro.
Eccellente, siamo pronti per il punto:
2) Creeremo un toon-shader a due-toni per cui andate sull'attributo Color e selezionete un colore in modalità HSV. Va bene un colore qualsiasi purché il valore sia sufficentemente basso (0.5 ad esempio). Create un altro ingresso per l'attributo Color, aumentatene il valore e quindi abbassatene la saturazione.
3) Fondamentale: impostate il valore di interpolation a None (nel cel classico i toni sono separati).
4) Duplicate tre volte il rampShader (Hypershade>Edit>Duplicate>Shading Network, una volta, quindi premere il tasto "g" due volte per ripetere l'ultimo comando immesso).

A questo punto dovremmo avere nell'area Materials quattro RampShader  numerate cardinalmente.
5) Modificate l'attributo Color Input per i RampShader2, 3 e 4 rispettivamente a Facing Angle, Brightness e Normalized Brightness
6) Assegnate i materiali alle quattro sfere e fate un primo Rendering, otterrete un'immagine simile a questa (che fa un po' schifo, ma rende l'idea di quel che devo dire):
rampshader01


[(quando metto le parentesi quadre, entro nel tecnico...) L'attributo Color Input dà istruzioni al RampShader su come interpretare il  gradiente che si è impostato per il Selected Color e lo fa sulla base di informazioni che provengono dalla scena; in modo semplicistico queste informazioni sono il vettore che dà l'orienzione della camera nella scena ©, la normale (N) della superficie cui è applicato lo Shader, il vettore (L) che individua la direzione dei raggi luminosi. Con semplici prodotti scalari vengono valutati gli angoli tra queste direzioni.

spiegazione

- Light Angle: viene comparata la direzione del vettore L con quello della normale N attraverso il prodotto scalare: Se l'angolo tra i due vettori è grande (90°) il coseno corrispondente è piccolo (0) e viene scelto un colore a sinistra nel gradiente del Selected Color; viceversa se l'angolo è piccolo (luce perpendicolare alla faccia 3d) il coseno è grande e viene scelto un colore a destra nel gradiente; per valori intermedi vengono scelti valori intermedi del gradiente (si vede anche dalla figura)
- Facing Angle: il prodotto scalare, in questo caso, viene fatto tra il vettore della Camera © e la normale (N) alla superficie 3d: grande angolo <-> Sx; piccolo angolo <-> Dx del gradiente. Il lato chiaro della Ramp punta verso la camera.
- Brightness: viene calcolata l'intensità luminosa sulla superficie e usata per scegliere direttamente il colore sul gradiente: Intensità minima (massima) <-> Sx (Dx) del gradiente
- Normalized Brigthness: funziona come l'opzione precedente, senonché normalizza tutte le intensità dovute alle luci presenti nella scena. (quindi la differenza si apprezza quando sono presenti più sorgenti luminose)
rampshader01 2luci
immagine ottenuta con 2 spot
rampshader01 2luci
3 spot...

I samplers sono nodi che implementano  le opzioni dell'attributo Color Input in maniera separata dal RampShader consentendoci così di creare le nostre  npr shading networks personalizzate. Le corrispondenze sono:
Light Angle <-> nodo Light Info
Facing Angle <-> nodo Sampler Info
Brigthness <-> nodo Surface Luminance].

Ora, i colori sono messi un po' a casaccio, aggiustiamo gli attributi della ramp per avvicinarci di più ad uno stile cel.
rampshader02
Ho semplicemente spostato la posizione del tono più chiaro a 0.25 (1/4 di Ramp) ed aumentato l'intensità della spot

7) Nella sezione Specular Shading, impostiamo Specularity a 1 ed Eccentricity ad un valore poco maggiore della metà.
rampshader03
8) per creare un' outline (bordi), per ogni ramp shader andte sula ramp dell'attributo incandescence, impostate Interpolation a none,  aggiungete una seconda maniglia circa all'altezza della corrispondente maniglia del colore; non intervenite sul suo colore.
9) Selezionate la prima maniglia dell'incandescence, passate in modalità HSV se non ci siete già, impostate i seguenti valori -1, -1, -1-

Purtroppo, la poca flessibilità di questo pur semplicissimo shader ne ammazza  l'uso intensivo nell' NPR. Ce ne siamo serviti più che altro per introdurre l'argomento Samplers. Quando ancora non c'era il RampShader - agli albori di maya - tutto veniva fatto coi samplers.
Quella che segue è la Borghi-Brimsmead-Network, il primo toon shader per maya di cui ho avuto notizia. Cercatela, ad esempio su Highend, e provate ad esaminarla sulla base di quanto abbiamo detto.
Borghi Brimsmead
Il Nostro primo mini-tutorial si conclude qui, ma sulla base di quanto appena detto ne comincia subito un altro.

Pop-Art Shader

A questo punto siamo pronti per affrontare con cognizione la realizzazione di uno Shader leggermente più complesso. Osserviamo l'immagine a seguire.
Crying Girl 1
Vogliamo simulare la tinta a mezzo tono (i pallini) assieme al cel classico. Per comodità metteremo tutto in uno shader. Intanto che ragioniamo sul da farsi, createvi una geometria cui applicare lo shader. Al solito aprite la finestra dell' Hypershade e cominciate creando un SurfaceShader e rinominatelo PoPArt [Il Surface Shader è un nodo che passa semplicemente le informazioni al motore di rendering, non possiede caratteristiche intrinseche; ciò che va renderizzato può essere deciso "a tavolino" in un altro nodo a monte del Surface. Il tutto per dire che è un must, quando si tratta di NPR].
Quello che ci piacerebbe realizzare, è un materiale che quando illuminato (o meglio: laddove risulti più brillante) mostri una texture a mezzo-tono (sempre i pallini) e dove lo è di meno invece realizzi un toon shading classico, vorremmo - ovviamente - poi regolare il tutto a nostro piacimento.
Cominciamo realizzando la texture a mezzo tono:
a.1) create una ramp texture e rinominatela simpaticamente Rampois
a.2) LMB su Rampois e CTRL + A per aprire l'attribute editor di Rampois; impostate i valori seguenti:
- type = Circular Ramp
- interpolation = None
a.3) eliminate la maniglia più in alto
a.4)selezionate la maniglia superiore ancorché verde, entrate in Selected Color e impostatela a 1, 0.867, .776
a.5) cliccate sul tab della texture 2d di Rampois per aprirlo e impostate:
-repeatU =65
-repeatV=40 (valori maggiori renderanno più piccoli i pallini)

Passiamo al Cel:
b.1) create una ramp texture e rinominatela Toni
b.2) come al punto a.2 tranne che per il Type che deve essere VRamp
b.3) come al punto a.4 tranne che per i valori che sono: 0, 0, 0 (nero)
b.5) selezionate la maniglia centrale portatela nella posizione 0.165 (Selected Position) e assegnatele il bianco come colore
b6) fate clic con LMB sull'area bianca del gradiente per creare un'altra maniglia e portatela in 0.25 con colore 0.0662, 0.049, 0.000
b.7) LMB sull'area bordeaux, spostate la nuova maniglia in 0.66 col colore 0.66, 0, 0
b.8) LMB sul rosso, nuova maniglia in 0.87 con colore 1, 0.613, 0.557
b.9) selezionate la più elevata delle maniglie (quella blù) e portatela in 0.92 con 1, 1, 1 (bianco)

a questo punto dovreste avere una cosa del genere.
Toni
Ora comincia la parte più complicata. Vorremmo che la disposizione delle texture venga regolata dalla luminosità superficiale del modello cui è applicato PopArt, dunque dovremo inserire un nodo  Surface Luminance (per quanto detto nel precedente tutorial). Per stabilire la linea di demarcazione tra le due texture abbiamo bisogno di un valore soglia (che per comodità chiamo Soglia1) Vi faccio un disegnino:
disegnino1
Su Rampois inoltre abbiamo un altro piccolo intoppo da risolvere. La ramp in questione disegna sì i pallini, ma questi saranno deformati dalla superficie del modello, mentre noi vorremmo che questi fossero sempre diretti verso la camera. Per quanto appena detto, va da sé che abbisognamo di un nodo Sampler Info e di una camera di proiezione. Con un valore "Soglia2" possiamo definire il bordo (ovvero l'outline) di Rampois. Spero che un altro disegnino aiuti a chiarire il concetto:
disegnino2
Quindi, oltre ai nodi appena creati, abbiamo bisogno di due nodi Condition, una Projection Camera, un Sampler Info:
Network Completa:
PoPArtNetwork
c.1) create un nodo Condition e rinominatelo Soglia1; MMB da Soglia1 verso PopArt (connection editor): Soglia1.outColor>PopArt.Color
c.2) aprite l'attribute editor di Soglia1 ed impostate l'operazione a Greater Than; chiudetelo.
c.3)MMB da Toni a Soglia1: Toni.outColor>Soglia1.colorIfFalse
c.4) create un nodo SurfaceLuminance (ci serve per discriminare la luminosità superficiale, ricordate?), MMB da esso verso Soglia1:SurfaceLuminance1.outValue>Soglia1.FirstTerm
c.5)MMB da surfaceLuminance verso Toni: SurfaceLuminance1.outValue>Toni.vCoord [In questo modo vengono scelti differenti valori del gradiente di toni in base all'ammontare di luminosità del modello]
c.6)create una seconda Condition e rinominatela Soglia2; MMB da essa verso Soglia1: Soglia2.outColor>Soglia1.colorIfTrue
c.7)create ora il nodo Sampler Info; MMB su di esso verso Soglia2: SamplerInfo1.FacingRatio>Soglia2.FirstTerm
c.8) aprite l'attribute editor di Soglia2 e settate Color If False a 0, 0, 0 (nero) e Operation a Greater Than
c.9) ora premete il bottone di mappatura del Color If True (quello a scacchi), scegliete come opzione As Projection tra le textures 2d e cliccate sul bottone della ramp texture. Buttate la ramp appena creata senza cancellare i nodi texture3d e projection
c.10) mentre premete il tasto CTRL fate MMB da Rampois al nodo projection [in questo modo avrete sostituito la ramp appena buttata con Rampois, già settata]
c.11) minimizzate la finestra hypershade e create una nuova camera; dal menù Panels della Perspective selezionate Look Through Selected ed inquadrate gli oggetti a cui avrete assegnato PopArt. Aprite l'attribute editor della camera 1, sotto la sezione Environment settate il Background Color a bianco (o al colore che preferite)
c.12) ripristinate l'hypershade e selezionate il nodo projection; CTRL + A e impostate Proj Type a Perspective
c.13) MMB da cameraShape1 a projection1, scegliete Other: cameraShape1.message> projection1.linkedCamera [l'attributo Message potrebbe essere nascosto. Per visualizzarlo: Left Display-> Show Hidden]

Attributi customizzati di Regolazione:
d.1)aprite l'attribute editor di PopArt; dal menù Attributes scegliete la voce Add Attributes
d.2) assegnate il nome Spess_Inchiostro, Data Type: Float, min: 0, max: 1, def: 0.5. Premete il tasto Add
d.3) assegnate il nome Larg_Pois, Data Type: Float, min: 0, max: 1, def: 0.5. Premete il tasto Add
d.4) assegnate il nome Raggio_Pallini (non so perché ho cambiato, ora), Data Type: Float, min: 0, def: 40. Premere il tasto Ok
[Perché i pallini siano sempre tondi le ripetizioni U/ V devono sempre essere nel rapporto 1.625= 65/40]
d.5) create un nodo MultiplyDivide, apritene l'attribute editore, impostate input2X = 1.625
d.6) MMB da PopArt a Soglia2 (other): PopArt.Spess_Inchiostro>Soglia2.SecondTerm
d.7) MMB da PopArt a Soglia1 (other): PopArt.Larg_Pois>Soglia1.SecondTerm
d.8) MMB da PopArt a multiplyDivide1 (other): PopArt.Raggio_Pallini>multiplyDivide1.inputX
d.9) MMB da PopArt alla texture 2d di RamPois (other): PopArt.Raggio_Pallini>place2dTexture1.repeatV
d.10) MMB da multiplyDivide1 alla texture 2d di RamPois (other): multiplyDivide1.outputX>place2dTexture1.repeatU

A questo punto la shading network è terminata e potrete comodamente regolare (e al limite animare) gli attributi Spess_Inchiostro, Larg_Pois e Raggio_Pallini dall'attribute editor di PopArt espandendo la voce Extra Attributes.
finito
L'immagine precedente è ottenuta col bianco rosato sulla Ramp Di Rampois che vi ho dato.
Quella che segue invece è col valore della stessa maniglia portata  a bianco:
finito2
Ricordatevi che per come è costruito l'attributo Raggio_Pallini, minore è il valore che gli darete, più grandi saranno i pallini.
finito3
2 pezzi facili

Vi propongo 2 minuscole (per quanto efficaci) NPR Shading Network basate sui samplers:

Effetto SinCity:
SinCity
create: un phong, un surface luminance, una shading map e una ramp texture;
settate: ramp shader a due toni non interpolati: nero sotto, bianco sopra (spostato un po' sotto la metà);
via connection editor:
-surfaceLuminance.outValue>ramp.vCoord
-ramp.outColor>shadingMap.shadingMapColor
-MMB + CTRL da Phong a Shading Map (default)

Puntinismo Bitonale:
Puntinismo2toni
create: un granite, un surface luminance, una shading map e una ramp texture;
settate:
-ramp shader a due toni non interpolati: nero sopra, bianco sotto (alle estremità della ramp);
-granite: (RGB) color1=[0, 0, 0], color2=[0.666, 0.666, 0.666], color3=[0.182, 0.182, 0.182], fillerColor[1, 1, 1], Cell Size = 0, Treshold = 1
via connection editor:
-surfaceLuminance.outValue>ramp.vCoord
-ramp.outAlpha>granite.density
-MMB + CTRL da granite a Shading Map (default)



Fine 1a Parte

(...continua...)

---
Questo articolo è stato importato automaticamente dal forum il 31/lug/2014
Per vedere il post originale e/o i commenti sul forum prima di quella data clicca qui