La semaine dernière, j’ai publié une vidéo dans laquelle j’ai montré comment mapper un Color Ramp le long de l’axe Z d’un objet, en mode local et global, pour créer un dégradé suivant la hauteur de l’objet.
Transcription de la vidéo
Bonjour à tous ! La semaine dernière, j’ai publié une vidéo dans laquelle j’ai montré comment mapper un Color Ramp le long de l’axe Z d’un objet, en mode local et global, pour créer un dégradé suivant la hauteur de l’objet.
Dans ce tutoriel, je vais approfondir le concept de mapping basé sur un axe pour créer à la fois un dégradé de couleurs et un mélange entre deux Shaders. L’exemple concret sera une barre de progression colorée, mais les méthodes présentées peuvent aussi s’appliquer à d’autres contextes. En déplaçant l’Empty de contrôle horizontalement, on verra la barre progresser avec un dégradé allant du rouge au vert, en passant par le jaune.

Commençons par voir la configuration initiale de la scène. Nous avons un objet Plane qui a été étiré le long de son axe X. Pour plus de commodité, j’ai placé l’Origin de l’objet dans son coin supérieur gauche. J’ai également appliqué les transformations de rotation et d’échelle à cet objet. Ce Plane ne sera plus modifié par la suite.

L’autre objet de la scène est un Empty, positionné à l’Origin du Plane, et qui a également ses transformations de rotation et d’échelle appliquées. Cet Empty va contrôler la progression de la barre, qui sera entièrement implémentée via le Material du Plane, sans modifier sa géométrie.

Le Material du Plane doit remplir deux fonctions. D’abord, nous devons définir le dégradé le long de l’axe X du Plane. Une fois cela fait, nous ferons en sorte que toutes les parties à droite de l’Empty soient transparentes, tandis que celles à gauche seront colorées avec le dégradé que nous avons défini.
Commençons par le dégradé de couleurs sur tout l’objet. Comme dans le tutoriel de la semaine dernière, nous avons besoin d’un node Texture Coordinate, d’un node Separate XYZ et d’un node Color Ramp, connectés en chaîne.
Nous utilisons la sortie Generated du node Texture Coordinate, car nous nous intéressons aux dimensions propres du Plane. Depuis le node Separate XYZ, nous utilisons la sortie X, qui représente l’axe horizontal local du Plane.
Le Color Ramp doit maintenant être connecté à un node Emission, car nous voulons que le Material soit toujours visible et non influencé par l’éclairage. Nous remplaçons donc le node Principled par défaut par un node Emission.

Le Color Ramp peut maintenant être personnalisé comme vous le souhaitez. Dans mon cas, je place un marqueur rouge à gauche, un jaune au centre, et un vert à droite, en utilisant l’interpolation Ease, afin que le rouge et le vert ne soient pas limités aux extrémités.


Pour colorer uniquement la partie à gauche de l’Empty et rendre la partie droite transparente, nous devons d’abord ajouter deux nodes Shader dans l’éditeur. Il s’agit d’un node Transparent et d’un node Mix Shader. Faites attention à bien choisir le node Mix Shader et non le node Color Mix.
Connectez ensuite le node Emission à la première entrée Shader du node Mix Shader. Connectez le node Transparent, qui doit être défini sur du blanc pur, à la deuxième entrée Shader du node Mix Shader.
Connectez la sortie du node Mix Shader à l’entrée Surface du node Material Output. À ce stade, nous avons un Material semi-transparent avec un dégradé allant du rouge au vert, en passant par le jaune.

Dans un node Mix, qu’il s’agisse de couleur ou de Shader, la deuxième entrée est utilisée entièrement uniquement lorsque le facteur est égal à 1. Nous devons donc trouver un moyen de faire en sorte que ce facteur soit égal à 1 à droite de la position du Empty.
Ajoutons donc un node Texture Coordinate et un node Separate XYZ à l’éditeur, puis connectons la sortie X du node Separate XYZ à l’entrée Factor du node Mix Shader.
Cette fois, nous utilisons la sortie Object du node Texture Coordinate et nous spécifions le Empty dans le champ Object du node.

Le Material obtenu sera maintenant transparent à droite du Empty et coloré à gauche, comme prévu. Cependant, on peut voir que le Material reste semi-transparent bien au-delà de la position du Empty.

Pour que la transition vers le node Emission se fasse de manière nette juste à la position du Empty, nous insérons un node Math entre le Separate X et le node Mix Shader, en le réglant sur le mode Greater Than avec une valeur de seuil égale à 0.

De cette manière, le node Greater Than prendra la coordonnée X du Empty et renverra 1 pour toutes les valeurs supérieures à cette coordonnée. Le node Mix Shader passera alors brusquement au deuxième Shader, c’est-à-dire le node Transparent.
Enfin, nous pouvons faire du Empty un enfant du Plane. Ainsi, nous pourrons déplacer le Plane dans la scène et le Empty le suivra, tout en restant indépendant pour ses propres mouvements ou animations.
C’est tout pour ce tutoriel ! À très bientôt !