La scorsa settimana ho pubblicato un video in cui ho mostrato come mappare una Color Ramp lungo l'asse Z di un oggetto, sia in modalità locale che globale, per realizzare un gradiente lungo l'altezza dell'oggetto.
Trascrizione del video
Salve a tutti! La scorsa settimana ho pubblicato un video in cui ho mostrato come mappare una Color Ramp lungo l'asse Z di un oggetto, sia in modalità locale che globale, per realizzare un gradiente lungo l'altezza dell'oggetto.
In questo tutorial, riprenderò il concetto di mappatura lungo un asse, per realizzare sia un gradiente di colore che la miscelazione di due Shaders. L'esempio concreto mostrerà una barra di avanzamento colorata, ma i metodi mostrati possono essere utilizzati in altri contesti. In particolare, spostando orizzontalmente la Empty di controllo vedremo avanzare la barra, che sarà colorata con un gradiente dal rosso al verde, passando per il giallo.

Per prima cosa vi mostro il setup iniziale della scena. Abbiamo un oggetto di tipo Plane, che è stato ridimensionato per allungarlo un po' lungo il suo asse X. Per comodità, ho piazzato l'Origin dell'oggetto nel suo angolo in alto a sinistra. Ho applicato, inoltre, le trasformazioni di rotazione e scala a questo oggetto. Questo Plane non verrà più modificato.

L'altro oggetto presente nella scena è una Empty, posizionata lì dove si trova l'Origin del Plane, e anch'essa con le trasformazioni di rotazione e scala applicate. Questa Empty controllerà l'avanzamento della barra, che verrà quindi implementato solo tramite il Material del Plane, senza modificare la geometria del Plane.

Il Material del Plane dovrà quindi avere due caratteristiche. Innanzitutto, dovremo definire il gradiente lungo l'asse X del Plane. Fatto ciò, dovremo fare in modo che tutte le parti a destra della Empty siano trasparenti, mentre tutte le parti a sinistra dovranno essere colorate con un gradiente da noi definito.
Iniziamo con il gradiente di colore lungo tutto l'oggetto. Come nel tutorial della settimana scorsa, ci servono un nodo Texture Coordinate, un nodo Separate XYZ e un nodo Color Ramp, da collegare in successione.
Preleviamo l'uscita Generated del nodo Texture Coordinate, perché ci interessano le dimensioni proprie del Plane. Dal nodo Separate XYZ preleviamo invece l'uscita X, che rappresenta l'asse orizzontale locale del Plane.
La Color Ramp andrà collegata, questa volta, ad un nodo Emission, perché vogliamo che il Material sia sempre visibile e senza effetti di ombreggiatura. Sostituiamo quindi il nodo Principled di default con un nodo Emission.

Adesso la Color Ramp può essere personalizzata a piacere. Nel mio caso, sto posizionando un marker rosso a sinistra, uno giallo al centro e uno verde a destra, con interpolazione Ease, così da non relegare rosso e verde solo alle estremità.


Per poter colorare solo la parte a sinistra della Empty e far sì che quella a destra sia trasparente, per prima cosa inseriamo due nodi shader nell'editor, in particolare di tipo Transparent e Mix. Attenzione a scegliere Shader Mix e non Color Mix!
Colleghiamo quindi il nodo Emission sul primo ingresso Shader del nodo Mix Shader. Colleghiamo poi il nodo Transparent, che dovrà avere colore bianco puro, sul secondo ingresso Shader del nodo Mix Shader.
Colleghiamo l'uscita del nodo Mix Shader all'ingresso Surface di Material Output. In questo momento abbiamo un Material semitrasparente, con un gradiente da rosso a verde passando per il giallo.

In un nodo Mix, sia esso Color che Shader, il secondo Material viene utilizzato completamente solo quando il Factor è 1. Ci serve quindi un modo per far sì che il valore sia 1 a destra della posizione della Empty.
Inseriamo quindi un nodo Texture Coordinate e un nodo Separate XYZ nell'editor, collegando l'uscita X del nodo Separate XYZ all'ingresso Factor del nodo Mix Shader.
Questa volta preleviamo però l'uscita Object del nodo Texture Coordinate e specifichiamo la Empty nel campo Object del nodo.

Adesso il Material risultante sarà trasparente a destra della Empty e colorato a sinistra, come desiderato. Notiamo però che il Material è semitrasparente anche ben oltre la posizione della Empty.

Per interrompere in maniera netta l'applicazione del nodo Emission proprio in corrispondenza della Empty, inseriamo un nodo Math tra Separate X e Mix Shader, impostandolo in modalità Greater Than e con valore 0 per il campo Threshold.

In questo modo, il nodo Greater Than prenderà la coordinata X della Empty e imposterà a 1 tutti i valori che sono maggiori di tale coordinata. Il nodo Mix Shader passerà quindi bruscamente al secondo Shader, cioè al nodo Transparent.
Per finire, possiamo imparentare la Empty al Plane. Così facendo, potremo spostare il Plane in qualsiasi punto della scena e la Empty lo seguirà, ma potremo comunque spostare e animare la Empty in maniera indipendente.
Bene, anche per questo tutorial è tutto! A differenza di quanto avviene con la maggior parte dei miei videotutorial, la versione PDF di questo tutorial non è attualmente disponibile per il download. In descrizione trovate comunque il link alla pagina contenente le versioni PDF di molti altri miei videotutorial. In ogni caso, questo è un ottimo momento per iscrivervi al canale e attivare le notifiche! A presto!