Les 15 types du menu Noise Type de l'Attribute Noise SOP (et de la Unified Noise VOP), expliqués et manipulables en direct. Choisis un type dans le menu, active Montrer la structure pour voir ce que l'algorithme « voit », et survole l'image pour sonder les valeurs.
Même Element Size, même Offset, pas de fractal : seul l'algorithme change. Clique une vignette pour la charger dans l'explorateur. La couleur de la pastille indique la famille.
rand() ?rand() donne une valeur totalement indépendante pour chaque point : deux points voisins n'ont rien à voir. C'est du bruit blanc, de la « neige » de télé. Inutilisable pour déformer une surface ou pousser de la fumée : ça grésille.
Un noise cohérent (Perlin, Worley…) respecte quatre règles :
L'astuce commune : on place du hasard seulement sur une grille (ou sur des points épars), puis on interpole en douceur entre ces points. Compare les trois modes à droite :
Un noise, c'est du hasard « rangé » sur une grille, puis lissé. Chaque famille change juste la façon de ranger et de lisser.
Le menu de Houdini a l'air long, mais il n'y a que quatre idées. Retiens la famille, tu devines le look.
Une pente aléatoire à chaque coin d'une grille, interpolation douce. Look : collines, vagues, fumée.
noise() · onoise() · flownoise() · xnoise()Des points semés au hasard ; on mesure la distance aux plus proches. Look : cellules, cratères, fissures.
wnoise() · mwnoise() · cwnoise()Des « tampons » arrondis posés sur des points aléatoires, additionnés ou superposés. Look : blobs, bosses.
snoise() · anoise()Un noise fractal dont chaque couche est déformée par la précédente. Look : nuages cotonneux.
Cloud Noise VOPComment ça marche (Perlin), pour un point P :
dot(gradient, P − coin). Si P est « dans le sens » de la flèche, la valeur monte.6t⁵−15t⁴+10t³) pour que les jonctions entre cases soient invisibles.Dans l'explorateur, active Montrer la structure sur Perlin : les flèches orange sont les gradients. Les zones claires sont devant les flèches, les zones sombres derrière.
Les variantes du menu :
onoise(). Même principe, calcul moins cher, look légèrement différent. Houdini multiplie sa fréquence par 1.25, donc à Element Size égal les motifs sont plus petits.xnoise()) : la grille carrée est remplacée par des triangles (tétraèdres en 3D). Moins de coins à évaluer (3 au lieu de 4 en 2D, 4 au lieu de 8 en 3D, 5 au lieu de 16 en 4D) et moins d'alignements sur les axes. Intéressant en noise animé 4D.flownoise()) : au lieu de translater le noise dans le temps, on fait tourner les gradients avec Flow Rotation. Le motif bouillonne sur place au lieu de glisser. Une rotation de 0 à 1 fait un tour complet, donc l'animation boucle parfaitement. Active « Animer la rotation » dans l'explorateur et regarde les flèches.Perlin vaut toujours « zéro » (0.5 en sortie) pile sur les coins de la grille. C'est pour ça que la doc Houdini conseille un Offset non nul : autour de 0, on voit apparaître des artefacts.
Comment ça marche :
F1 vaut 0 sur chaque feature point et grandit en s'éloignant : taches sombres, dômes, cratères. F2 − F1 vaut 0 quand P est à égale distance de deux points, c'est-à-dire pile sur la frontière entre deux cellules : on obtient un réseau de lignes (fissures, écailles, sol sec, caustiques).
Dans l'explorateur, choisis Worley Cellular F2-F1 et survole l'image : la ligne pleine va au point F1, la ligne pointillée au point F2, et le cercle a un rayon égal à F1.
Manhattan et Chebyshev ne changent qu'une chose : la formule de la distance. Le « cercle » de rayon 1 change de forme, et toutes les cellules héritent de cette forme.
Bonus VEX : wnoise() renvoie aussi un seed unique par cellule. @Cd = rand(seed); donne une couleur par cellule, pratique pour des variations par morceau.
F1 = « à quelle distance est le point le plus proche ? ». F2 − F1 = « suis-je près d'une frontière ? ».
√(dx² + dy²)|dx| + |dy|max(|dx|, |dy|)Imagine un tampon encreur rond et doux (un noyau, ou kernel) : fort au centre, nul à son bord, comme un metaball. On le pose à plein d'endroits aléatoires. C'est la convolution éparse : « éparse » parce qu'on ne pose des tampons qu'à quelques points, pas partout.
snoise()) : chaque tampon a un poids aléatoire, positif ou négatif, et on additionne tous ceux qui touchent P. Résultat : des blobs doux, sans grille visible du tout. La doc Houdini parle d'un roll-off « comme un metaball ». Dans les vignettes, les points orange poussent vers le haut, les bleus vers le bas.anoise()) : chaque point porte une bosse de hauteur aléatoire, et on garde la plus haute. Là où deux bosses se rencontrent, on obtient un pli net en « V ». Ça ressemble à de la peau d'alligator, d'où le nom. Houdini précise que c'est un cousin du Worley qu'on ne peut pas reproduire exactement avec les fonctions Worley.Attention à l'échelle : dans Unified Noise, Sparse Convolution a une fréquence ×1.25 et Alligator ×1.64. Passer de Perlin à Alligator sans toucher à l'Element Size donne donc des motifs plus petits.
Sparse = tampons additionnés (blobs). Alligator = on garde la bosse la plus haute (bosses + plis).
Un noise seul a une seule taille de détail. La nature, non : une montagne a des crêtes, puis des rochers, puis des cailloux. On empile donc plusieurs copies du même noise, de plus en plus petites et de plus en plus faibles. C'est le fBm (fractional Brownian motion). Dans Houdini, c'est l'onglet Fractal.
Fractal Type change la façon d'additionner :
Un détail qui compte en FX : le détail plus petit que l'espacement de tes points est perdu, voire se transforme en grésillement (aliasing). 8 octaves sur une grille de 100×100 points, c'est du calcul pour rien. Houdini arrête d'ailleurs d'ajouter des octaves quand il n'y a « plus de place » pour le détail.
Lacunarity = de combien ça rétrécit. Roughness = de combien ça s'affaiblit. Octaves = combien de fois.
Les trois derniers types du menu viennent de la Cloud Noise VOP (Houdini 20+). Ce sont des fractals avec une astuce en plus : à chaque octave, la position de lecture est décalée selon la pente de l'octave précédente. Les petits détails « glissent » autour des gros volumes, ce qui donne des bords gonflés et cotonneux, comme un cumulus.
Cloud = fractal + chaque couche déformée par la précédente → formes de nuage.
| Noise Type | Famille | Ce qu'il fait | Look | VEX | Usages FX typiques |
|---|
Par défaut le noise est lu à la position P. Si la géo bouge, elle traverse le champ de noise, qui a l'air de défiler dessus. Fais un Rest Position SOP avant l'animation et mets rest dans Location Attribute : le noise reste collé.
Offset $T*0.25 : le noise translate. Le moins cher, mais ça « glisse ». Animate Noise : noise 4D, évolue sur place, plus cher. Perlin Flow + Flow Rotation $FF/100 : tourbillonne et boucle. Pas $F : toutes les valeurs entières donnent le même résultat (un tour complet).
Fast et Sparse Convolution ont une fréquence ×1.25, Alligator ×1.64. Réajuste l'Element Size après un changement de type pour comparer à taille égale.
Brut, un noise tombe surtout autour du milieu de sa plage (distribution en cloche). Output Raw Value off étale les valeurs uniformément. Sinon, joue avec la Remap Ramp, Gain et Contrast.
Les noises de gradient valent 0.5 sur chaque coin de grille, et plusieurs fonctions ont des zones figées autour de l'origine. Toujours démarrer avec un Offset non nul, par exemple 0.37.
Chaque octave recalcule tout le noise. Si ta résolution (points, voxels) ne peut pas afficher le détail, tu paies pour rien, voire tu crées de l'aliasing qui scintille d'une frame à l'autre.
Un noise vectoriel classique crée des « puits » où les particules s'agglutinent. Pour une vitesse (POP, Pyro, advection), préfère curlnoise() ou le Curl Noise VOP : champ sans divergence, les particules tourbillonnent sans se tasser.
Dans Unified Noise, Periodic rend le noise répétable (tiles, loops). Ça ne marche que si Lacunarity = 2, sinon les octaves n'ont plus la même période.
Ce que fait l'Attribute Noise en mode Standard, en simplifié. À coller dans un Point Wrangle, puis cliquer sur le bouton « Create spare parameters ».
// Point Wrangle : displacement fractal le long de N vector pos = v@rest / chf("element_size") + chv("offset"); float n = 0, amp = 1; for (int i = 0; i < chi("octaves"); i++) { n += amp * (noise(pos) - 0.5); // Perlin centré sur 0 pos *= chf("lacunarity"); // ex. 2 : détail 2× plus petit amp *= chf("roughness"); // ex. 0.5 : 2× plus faible } @P += @N * n * chf("amp");
Base de fissures, d'écailles ou de pré-fracture.
// Point Wrangle int seed; float f1, f2; wnoise(v@P * chf("freq"), seed, f1, f2); f@cracks = f2 - f1; // 0 sur les frontières @Cd = rand(seed); // une couleur par cellule // Manhattan : mwnoise() Chebyshev : cwnoise()
Un type au hasard, un offset au hasard. Retrouve-le à l'œil, comme quand on analyse une référence.