giovedì 25 maggio 2017

I NUOVI SETTAGGI MATERIALE


Non si capisce bene perché, ma pare che ciclicamente gli sviluppatori dei programmi si divertano a cambiare un po' le carte in tavola. Così, nel caso di Indigo, il parametro che una volta si chiamava Exponent con le nuove versioni di Indigo e SkIndigo si chiamerà Roughness, allineandosi peraltro alla schiera di altri motori che da sempre si riferiscono alla rugosità del materiale con questo termine (..colgo l'occasione per chiarire - a chi non lo sapesse - come va letto: si pronuncia "rafness". Non "raug-ness" o "roughess", ve ne prego... Voi - o miei lettori assigui - DISTINGUETEVI!).

Ma bando alle ciance: come funzionano i nuovi parametri che controllano la lucidità dei nostri materiali? Mi sono preso qualche tempo per darci un occhio ed eccomi qui a relazionarvi.

Innanzitutto, i parametri da regolare sono 2: Fresnel Scale ed il neoentrato Roughness. Il primo regola il valore di IOR (indice di rifrazione, ignorantoni), il secondo regola la quantità di rugosità superficiale. I parametri lavorano in parallelo, ed integrano uno le funzioni dell'altro. Entrambi possono essere regolati numericamente da 0 a 1, oppure tramite un mappa (che esclude automaticamente il valore numerico eventualmente impostato).
A livello intuitivo, si coglie una certa differenza tra i due parametri, ma è difficile spiegarla a parole: affidiamoci come sempre a qualche immagine cotta apposta per voi.



OH IL MIO ADORATO LEGNO! Quale migliore materiale per fare qualche test? Bene, in questo caso vedete un elegante pavimento in listellini a spina di pesce. Dev'essere stato piallato di recente perché la vernice è stata evidentemente grattata via: non ha alcuna riflessione. Otteniamo questo risultato applicando al materiale del legno lo shader DIFFUSE.

Proviamo ora a trasformare lo shader in un PHONG, ed impostare qualche parametro.

Ecco a voi un pavimento perfettamente levigato e verniciato di recente. Piuttosto fintello, eh? Come si ottiene questo? Semplicemente col parametro ROUGHNESS settato a 0.2 (lasciamo per ora impostato ad 1 il valore Fresnel Scale). Il numero è molto vicino a 0, quindi la rugosità e quasi pari a zero, quindi il materiale è lucido; diciamo, indicativamente, 1/5 della sua potenziale lucidità massima. E se invece ci spostassimo più verso l'1, cioè la rugosità massima? PRRRRONTI!
Come ci aspettavamo, con Roughness impostata a 0.7 le riflessioni quasi completamente sono sparite. Se siete acuti osservatori potete notare però che esiste una differenza tra questa resa e quella dello shader DIFFUSE: in effetti la presenza di una piccola percentuale di lucidità (quello 0.3 che manca per arrivare alla rugosità massima) ci dà quella sensazione di "materiale usato da lungo tempo". In alcuni casi, questo risultato potrebbe quasi andare bene, posto che comunque è un effetto troppo uniforme per essere completamente verosimile.


Vediamo quindi come regolare le disomogeneità. Iniziamo riportando il valore di Roughness a 0.2, e specificando una mappa nel canale Fresnel Scale. In questo modo annulliamo il significato del valore numerico 1 dato in precedenza al parametro, e ci affidiamo ad una mappa che descriverà ad Indigo le variazioni di IOR. 
Utilizzeremo questa mappa:
Il colore del pixel definisce il valore numerico puntuale da assegnare al canale: in questo caso, i pixel neri assegneranno il valore 0 di Fresnel Scale in quel punto, i pixel bianchi varranno come Fresnel Scale pari a 1. Fresnel Scale 0 sta a significare "Fresnel Scale nulla", quindi in sostanza effetto Fresnel nullo, quindi nessuna riflessione. Fresnel Scale 1 sta a significare al contrario "Fresnel Scale massimo", quindi massima visibilità della riflessione, con valore specificato nello slot IOR. 

E' importante ricordare che questo 1 non sta a significare SUPERMEGAGIGARIFLESSIONI: il valore 1 semplicemente rende visibile al 100% la quantità di riflessioni specificate con l'IOR. 


....vabbè Filì: cosa otteniamo? 

Eccovi serviti. Come potevamo immaginare, la mappa prevalentemente chiara ha determinato la presenza di visibilità di riflessione in molti punti. Nei punti della mappa perfettamente bianchi, la visibilità del valore IOR è massima.


Cosa succede se a variare è la rugosità e non la visibilità dell'IOR? Impostiamo un valore costante per il parametro Fresnel Scale scegliendo "none" dal menu a tendina e riportiamo il valore ad 1. Assegniamo invece una texture al canale Roughness, utilizzeremo la seguente:
Quando lavoro con mappe Roughness mi è sempre risultato difficile collegare mentalmente colore del pixel e risultato: ho quindi escogitato una piccola filastrocca mnemonica: "Pixel nero, raughness zero". Questa rimetta mi aiuta a ricordare che i punti neri della mappa avranno rugosità zero, quindi saranno perfettamente lucidi. Per antitesi, quelli bianchi saranno assolutamente opachi. Ecco perché è utile in questo caso che le fughe del parquet siano chiare: saranno molto più opache, con tutta la microsporcizia che ci si ferma dentro.


Ecco il risultato:

Le mappe specificate sui due canali, alla bisogna, possono controllare i parametri parallelamente. Ecco cosa risulta se assegniamo ed abilitiamo le mappe su entrambi i canali:
Con un po' di pratica, si impara a bilanciare i valori in modo da ottenere il risultato materico che ci immaginiamo. Personalmente preferisco un effetto finale di questo tipo, ottenuto con shader PHONG, IOR 1.38, Roughness lineare 0.68 e Fresnel Scale con mappa:


Saluti a tutti! E postatemi i vostri test!!!!!!!