Bruit de Perlin (Perlin noise) : principe, simplex noise et nœud Noise Texture de Blender
En bref
Le bruit de Perlin est un bruit de gradient inventé par Ken Perlin en 1983 : une grille dont chaque nœud porte une direction pseudo-aléatoire, des produits scalaires, puis un mélange par une courbe de lissage. Le résultat varie sans saut, et l’addition d’octaves (fBm) donne nuages, rouille ou relief. Le simplex noise (2001) remplace les cubes par des simplexes, moins coûteux en dimension élevée. Dans Blender, le nœud Noise Texture calcule le Perlin amélioré de 2002.
- Nœud Noise Texture : Shader Editor, Shift+A > Texture > Noise Texture (aussi dans les Geometry Nodes et le Compositor).
- Octaves : Detail (de 0 à 15), Roughness, Lacunarity.
- Relief : Type sur Ridged Multifractal, Hybrid Multifractal ou Hetero Terrain.
- Déplacement au rendu : nœud Displacement, puis Material Properties > Settings > Surface > Displacement (Cycles).
- Modificateur : Add Modifier > Deform > Displace, texture Clouds, Noise Basis sur Improved Perlin.
Ne perdez plus de temps sur vos rendus
L'optimisation a ses limites. Quand votre scène Blender devient trop lourde, envoyez-la depuis l'add-on : les images de l'animation sont réparties sur plusieurs GPU.
Les menus, cités en anglais, sont vérifiés dans le manuel et le code source de Blender 5.2.
Qu’est-ce que le bruit de Perlin ?
Le bruit de Perlin (Perlin noise) associe à chaque point de l’espace une valeur d’apparence aléatoire qui varie de façon continue. Un bruit blanc, comme le nœud White Noise Texture de Blender, tire une valeur indépendante pour chaque point ; le bruit de Perlin est cohérent : deux points proches ont des valeurs proches. Il est aussi déterministe, donc recalculé à l’identique sans être stocké, et ses détails ont tous à peu près la même taille, ce qui permet de l’empiler à plusieurs échelles.
D’où vient le bruit de Perlin : Tron, 1983 et un Oscar
Ken Perlin raconte avoir commencé à penser aux textures procédurales en travaillant sur Tron chez MAGI, à Elmsford (New York), en 1981 : tout y avait un aspect de machine. En 1983, il écrit une fonction de bruit qui remplit l’espace en trois dimensions, de plage -1 à +1 comme un sinus. Il la présente au SIGGRAPH 1984, puis dans l’article « An Image Synthesizer » au SIGGRAPH 1985 (marbre, vagues, feu, nuages). Selon lui, les shaders à base de bruit étaient la règle vers 1988, et il n’avait pas déposé de brevet.
En 1997, l’Academy of Motion Picture Arts and Sciences lui remet un Technical Achievement Award « pour le développement du Perlin Noise, une technique qui produit des textures d’aspect naturel sur des surfaces générées par ordinateur pour les effets visuels de cinéma » (citation reproduite sur sa page de l’université de New York).
Comment fonctionne le bruit de Perlin : le bruit de gradient
- La grille. L’espace est découpé en cubes d’arête 1 ; on repère les huit coins, aux coordonnées entières, du cube qui contient le point.
- Les gradients. Chaque coin reçoit une direction pseudo-aléatoire, choisie dans le code d’origine par une table de permutation de 256 entrées.
- Les produits scalaires. Pour chaque coin, on multiplie scalairement son gradient par le vecteur qui va du coin au point : huit valeurs.
- Le mélange. Ces valeurs sont interpolées selon la position dans le cube, avec une courbe de lissage plutôt qu’une droite, pour que les cubes se raccordent sans cassure.
Sur un coin, le vecteur vers le point est nul, donc la valeur aussi : un bruit de gradient vaut zéro sur chaque nœud et ondule entre eux. Le value noise, lui, pose des valeurs au hasard sur les nœuds (voir plus bas).
La courbe de lissage : de 3t² - 2t³ à 6t⁵ - 15t⁴ + 10t³
En 2002, dans l’article « Improving Noise », Ken Perlin corrige deux défauts. La courbe d’origine, 3t² - 2t³, a une dérivée seconde (6 - 12t) non nulle en 0 et en 1 : des discontinuités apparaissent aux faces des cubes quand le bruit déplace une surface ombrée. La nouvelle, 6t⁵ - 15t⁴ + 10t³, a des dérivées première et seconde nulles aux deux bouts, ce qui compte dès que le bruit sert de bump ou de displacement. Ensuite, des gradients presque alignés sur les axes formaient des taches trop fortes : ils deviennent douze directions fixes, du centre d’un cube vers ses arêtes. Le calcul gagne environ 10 % de vitesse, selon l’article.
Pourquoi le bruit vaut 0,5 aux coordonnées entières
Conséquence décrite par le manuel : des objets rangés à des positions entières, dont le matériau lit le bruit à leur emplacement, prennent tous la valeur 0,5, le zéro des nœuds ramené entre 0 et 1 (remèdes dans la FAQ). Sur un plan légèrement incliné, la grille peut aussi se trahir par des bandes : une rotation quelconque des coordonnées les efface.
Octaves et fBm : fréquence, amplitude, lacunarité, persistance
Un seul passage de bruit donne des formes molles, toutes à la même échelle. Pour du détail, on additionne des octaves, chacune de fréquence plus haute (motifs plus petits) et d’amplitude plus faible que la précédente : c’est le fBm, pour fractal Brownian motion. La lacunarité multiplie la fréquence d’une octave à l’autre, la persistance (ou gain) multiplie l’amplitude. En 1989, pour ses hypertextures, Ken Perlin doublait la fréquence et divisait l’amplitude par deux : ce sont les valeurs par défaut de Lacunarity (2) et Roughness (0,5) dans Blender.
| Notion | Dans la Noise Texture | Effet |
|---|---|---|
| Fréquence de base | Scale (5 par défaut) | Plus haut, motifs plus petits |
| Nombre d’octaves | Detail (2 par défaut, de 0 à 15) | Plus de grain fin, plus de calcul |
| Persistance | Roughness (0,5 par défaut) | Poids des octaves fines, de 0 à 1 |
| Lacunarité | Lacunarity (2 par défaut) | Écart d’échelle entre deux octaves |
Le manuel présente Detail comme le nombre d’octaves, mais la boucle de Cycles en calcule une de plus : Detail 0 donne une octave, Detail 2 en donne trois. Une partie décimale mélange les deux nombres voisins.
fBm, multifractales et Hetero Terrain
- fBM additionne les octaves, pour un résultat homogène. C’est le seul type qui affiche Normalize, coché par défaut, qui garde la sortie entre 0 et 1 ; décoché, elle va au plus de -(Detail + 1) à Detail + 1.
- Multifractal les multiplie : le relief varie selon l’endroit, comme un vrai terrain.
- Hybrid Multifractal mêle addition et multiplication : des sommets sortent d’une plaine.
- Ridged Multifractal prend la valeur absolue puis retourne la surface : des crêtes vives.
- Hetero Terrain ressemble à Hybrid, avec des formes de lits de rivière.
Ces modes viennent du nœud Musgrave Texture, supprimé dans Blender 4.1 : les fichiers sont convertis seuls, l’ancienne Dimension devenant Roughness = Lacunarity^-Dimension et Detail perdant 1. Les trois derniers types ajoutent l’entrée Offset, Hybrid et Ridged l’entrée Gain.
Simplex noise : ce qui change par rapport au bruit de Perlin
En 2001, Ken Perlin présente le simplex noise dans ses notes de cours du SIGGRAPH (demande de brevet provisoire du 10 janvier 2001). Le brevet reproche au bruit d’origine ses 24 multiplications par échantillon en 3D, une grille qui se devine quand on fait tourner le domaine, et un coût qui fait plus que doubler à chaque dimension.
Le simplex noise utilise une grille de simplexes : triangles en 2D, tétraèdres en 3D. Le cube qui contient le point est coupé en six tétraèdres, un tri des coordonnées désigne le bon, et chacun de ses quatre sommets contribue par un noyau sphérique ; les contributions s’additionnent au lieu de s’interpoler. Ken Perlin résume : un coût en O(n²) au lieu de O(2ⁿ), beaucoup plus rapide en 4D ou 5D.
| Bruit de Perlin | Simplex noise | |
|---|---|---|
| Grille | Carrés, cubes, hypercubes | Triangles, tétraèdres, simplexes |
| Points lus | 2ⁿ : 4 en 2D, 8 en 3D, 16 en 4D | n + 1 : 3, 4 et 5 |
| Mélange | Interpolation lissée | Somme de noyaux sphériques |
| Coût selon la dimension n | O(2ⁿ) | O(n²) |
| Artefacts | Grille visible si on tourne le domaine | Pas de grille visible, selon le brevet |
| Brevet | Aucun | US 6 867 776, expiré en 2022 |
| Dans Blender | Noise Texture | Absent |
Le brevet US 6 867 776, « Standard for perlin noise », accordé en 2005, est indiqué expiré par Google Patents, avec une échéance prévue le 8 janvier 2022 (statut donné sans analyse juridique). En 2014, Kurt Spencer publie OpenSimplex, « développé pour contourner les questions de brevet autour du simplex noise, tout en évitant les artefacts directionnels du bruit de Perlin », selon sa description, et verse son code dans le domaine public ; OpenSimplex2 en a pris la suite.
Simplex ou Perlin : lequel choisir ?
Dans Blender, la Noise Texture ne calcule que du Perlin : si la grille se devine, tournez les coordonnées avec un nœud Mapping, montez Detail ou ajoutez un peu de Distortion. Ailleurs, le simplex noise ou OpenSimplex2 se justifient surtout en 4D et au-delà, ou quand le bruit est évalué un très grand nombre de fois.
Value noise, Worley, Voronoi : les autres bruits
- Le value noise pose une valeur au hasard sur chaque nœud et interpole. Marc Olano (université du Maryland) note qu’il contient beaucoup de basses fréquences : plus simple à câbler en matériel, il est de moindre qualité que le bruit de gradient.
- Le bruit de Worley, ou bruit cellulaire (Steven Worley, SIGGRAPH 1996), mesure la distance à des points semés au hasard et dessine des cellules. Dans Blender, c’est le nœud Voronoi Texture (F1, F2, Smooth F1, Distance to Edge, N-Sphere Radius), fractal depuis la 4.0 et plusieurs fois plus rapide depuis la 5.0, au prix d’un motif différent.
- Le bruit de Gabor (Gabor Texture) trace des bandes orientables ; le manuel le juge plus coûteux que la Noise Texture pour un bruit sans direction.
Les anciennes textures de l’onglet Texture Properties nomment le Perlin : le type Clouds en est selon le manuel, et son réglage Noise Basis propose Original Perlin ou Improved Perlin. Le type Noise, lui, est un vrai bruit aléatoire, différent à chaque image.
Le nœud Noise Texture de Blender, réglage par réglage
Dans le Shader Editor, Shift+A > Texture > Noise Texture ajoute le nœud, présent aussi dans le Compositor et les Geometry Nodes (où Vector lit la position des points). Selon le code source, l’implémentation est identique dans Cycles, EEVEE, OSL et les Geometry Nodes. Dans Cycles (intern/cycles/kernel/svm/noise.h), la fonction s’intitule « Perlin Noise » : courbe 6t⁵ - 15t⁴ + 10t³, gradients choisis par hachage des coordonnées entières au lieu d’une table de permutation, résultat ramené entre 0 et 1.
- Vector : par défaut les coordonnées Generated, de 0 à 1 sur la boîte englobante de l’objet. W sert en 1D et en 4D.
- Scale multiplie les coordonnées : à 5, cinq cellules de grille sur la largeur de l’objet en Generated.
- Distortion décale les coordonnées par un autre bruit : le motif se tord, d’aspect liquide.
- Dimensions : 1D (W), 2D (Z ignoré), 3D (par défaut) ou 4D. Plus la dimension est haute, plus le rendu est long.
- Sorties : Factor, et Color, avec un bruit différent par composante.
Le bruit n’a pas de graine, le code de Cycles le précise. Pour une variante, décalez les coordonnées avec l’entrée Location d’un nœud Mapping (Add > Utilities > Vector > Mapping), ou passez en 4D et changez W : l’animer fait évoluer le motif sur place.
Normalize et Lacunarity sont arrivés avec Blender 4.0, dont les notes précisent que Normalize sert pour une couleur ou un facteur de mélange, pas pour le bump ou le displacement. Les bases du Shader Editor sont dans le guide des textures dans Blender.
Exemple pas à pas : un terrain en bruit de Perlin
- Ajoutez un plan (Add > Mesh > Plane) et agrandissez-le.
- Add Modifier > Generate > Subdivision Surface, en mode Simple, que le manuel recommande pour densifier un maillage destiné au displacement, avec un niveau Render élevé. Sous Cycles, cochez plutôt Adaptive Subdivision, disponible sans réglage expérimental depuis Blender 5.0.
- Dans le Shader Editor, ajoutez une Noise Texture : Type sur Hetero Terrain ou Ridged Multifractal, Scale vers 2 ou 3, Detail vers 8.
- Ajoutez Add > Displacement > Displacement : Factor dans Height, sa sortie dans l’entrée Displacement du Material Output. Midlevel (0,5 par défaut) ne déplace rien ; Scale règle la hauteur.
- Dans Material Properties > Settings > Surface, réglez Displacement sur Displacement Only : par défaut, Blender ne fait que du bump et la silhouette resterait plate.
- Reliez aussi Factor à un Color Ramp (Add > Color), vallées à gauche et sommets à droite, puis à la Base Color du Principled BSDF. Rendez avec F12.
Dans EEVEE, Displacement Only n’est pas pris en charge et retombe sur Displacement and Bump, calculé à chaque échantillon. La subdivision est détaillée dans le guide pour subdiviser dans Blender, les cartes image dans le tutoriel sur les displacement maps.
Variante : rouille et bosses sans subdivision
Reliez une Noise Texture (Scale élevée, Detail vers 8) à un Color Ramp aux curseurs rapprochés, puis au Factor d’un Mix Color (Add > Color) entre la couleur du métal et celle de la rouille. Branchez le même Factor sur la Height d’un nœud Bump (Add > Displacement > Bump), et sa sortie Normal sur la Normal du Principled BSDF. Le bump ne change que l’ombrage. La différence avec une carte de normales est traitée dans le guide de la normal map dans Blender.
Nuages et brume dans un volume
Reliez un Principled Volume à l’entrée Volume du Material Output d’un cube, et une Noise Texture passée dans un Color Ramp à sa Density : la brume se découpe en nappes. D’autres montages sont dans le tutoriel sur les textures procédurales dans Blender et celui sur les shaders procéduraux avancés.
Le modificateur Displace avec une texture de bruit
Le modificateur Displace déplace les sommets selon l’intensité d’une texture : la forme est visible dans la vue 3D, quel que soit le moteur, à condition d’avoir assez de sommets.
- Subdivisez l’objet, puis Add Modifier > Deform > Displace.
- Cliquez sur New à côté de Texture et ouvrez l’onglet Texture Properties : Type sur Clouds, Noise Basis sur Improved Perlin. Size règle l’échelle du bruit, Depth le détail (et la durée du calcul).
- Dans le modificateur, Direction sur Normal ; le décalage vaut (valeur de texture - Midlevel) × Strength, et une Strength négative inverse l’effet.
Ce que coûte le bruit en temps de rendu
- Detail : chaque octave ajoute un bruit à chaque évaluation du shader ; gardez le minimum visible à cette distance.
- Dimensions, Distortion et Color : la 4D coûte plus que la 3D, la distorsion ajoute un bruit par axe, Color deux, calculés seulement si la sortie est reliée.
- Displacement : Displacement Only est la méthode la plus juste et la plus gourmande en mémoire ; le manuel désigne Adaptive Subdivision comme la meilleure façon de subdiviser.
Les autres réglages qui pèsent sur la durée d’un rendu sont réunis dans le guide pour accélérer un rendu Blender.
Questions fréquentes
Qu’est-ce que le bruit de Perlin ?
Le bruit de Perlin (Perlin noise) est une fonction de bruit procédural inventée par Ken Perlin en 1983. Elle donne à chaque point de l’espace une valeur pseudo-aléatoire qui varie sans saut, toujours la même pour une position donnée. En additionnant plusieurs octaves, on obtient des nuages, du marbre, de la rouille ou du relief.
Comment fonctionne le bruit de Perlin ?
L’espace est découpé en une grille dont chaque nœud reçoit un gradient, une direction pseudo-aléatoire. Pour un point, on calcule le produit scalaire entre chaque gradient voisin et le vecteur qui va du nœud au point, puis on mélange ces valeurs avec une courbe de lissage, 6t⁵ - 15t⁴ + 10t³ depuis la version améliorée de 2002. Le bruit vaut zéro sur les nœuds.
Quelle différence entre simplex noise et bruit de Perlin ?
Le simplex noise, présenté par Ken Perlin en 2001, remplace la grille de cubes par une grille de simplexes (triangles en 2D, tétraèdres en 3D) et additionne n + 1 contributions au lieu de mélanger 2ⁿ coins. Il coûte beaucoup moins cher en 4D et au-delà. Le brevet américain qui le couvrait est expiré depuis janvier 2022 selon Google Patents.
Le nœud Noise Texture de Blender est-il un bruit de Perlin ?
Oui. Le manuel de Blender 5.2 le décrit comme un bruit de Perlin fractal, et le code de Cycles reprend le Perlin amélioré de 2002. Selon le code source, EEVEE, les Geometry Nodes et OSL calculent la même fonction. Blender ne propose pas de simplex noise.
Comment faire un terrain avec du bruit de Perlin dans Blender ?
Sous Cycles, subdivisez un plan, reliez une Noise Texture (type Hetero Terrain ou Ridged Multifractal) à l’entrée Height d’un nœud Displacement branché sur la sortie Displacement du Material Output, puis réglez Material Properties > Settings > Surface > Displacement sur Displacement Only.
Pourquoi le bruit donne-t-il la même valeur à plusieurs objets ?
Un bruit de gradient vaut zéro sur les nœuds de sa grille, soit 0,5 une fois ramené entre 0 et 1 par Blender : des objets posés sur des coordonnées entières tombent tous sur 0,5. Changez Scale, décalez les coordonnées ou passez à une dimension de plus ; pour une valeur aléatoire par objet, prenez la White Noise Texture.
Rendre l'animation sur TURNA
Quand la scène est déjà bien réglée et que c'est le nombre d'images qui prend du temps, le levier restant est de calculer plusieurs images à la fois. TURNA le fait pour Blender : un add-on (Blender 4.0 à 5.2, Cycles et Eevee) envoie la scène en un clic, et les images sont réparties sur 1, 2, 4 ou 8 GPU en parallèle, des RTX 5090 en priorité et des RTX 4090 à défaut. L'add-on affiche le coût estimé avant tout lancement. Le calcul part de 4,90 € l'heure, facturé au temps réellement consommé, 2 minutes minimum (30 secondes jusqu'au 9 novembre), et 25 € sont offerts à l'inscription. Une image fixe reste calculée par une seule machine : le gain porte sur les animations. Les paliers et des exemples chiffrés sont sur la page render farm Blender.



