L’essentiel en bref
- SVG feTurbulence est une primitive de filtre qui génère un bruit de Perlin, utilisable comme grain, papier, nuages ou source de déplacement.
- L’attribut baseFrequency règle la taille du bruit : des valeurs élevées, autour de 0,6 à 0,9, donnent un grain fin, et des valeurs basses, autour de 0,01 à 0,05, de grands nuages doux.
- type="fractalNoise" produit un bruit doux et régulier adapté au grain et au papier, tandis que type="turbulence" produit un bruit plus net et ondulé adapté au marbre et à l’eau.
- Une petite tuile de bruit avec stitchTiles="stitch", posée sur un dégradé à faible opacité, ajoute de la texture et masque les bandes pour un coût très faible.
- feTurbulence est coûteux à calculer sur de grandes surfaces : rendez-le une fois sous forme de tuile plutôt que de l’animer en plein écran.
Sur cette page
SVG feTurbulence est une primitive de filtre qui remplit sa zone d’un bruit de Perlin. Seul, le résultat ressemble à de la neige colorée ; combiné à d’autres primitives, il devient grain de film, fibre de papier, nuages, marbre ou source pour déformer des formes. Vous le pilotez avec cinq attributs : type, baseFrequency, numOctaves, seed et stitchTiles. La plupart des textures des sites modernes, y compris le grain des dégradés granuleux, commencent ici.
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300">
<filter id="noise">
<feTurbulence type="fractalNoise" baseFrequency="0.75" numOctaves="3" stitchTiles="stitch" />
</filter>
<rect width="100%" height="100%" filter="url(#noise)" />
</svg>Ce que fait chaque attribut de feTurbulence
typeturbulence (par défaut) ou fractalNoiseEffet
baseFrequencyValeurs
Effet
numOctavesValeurs
Effet
seedN’importe quel nombre, 0 par défautEffet
stitchTilesValeurs
noStitch (par défaut) ou stitchEffet
baseFrequency est celui que vous toucherez le plus. Il se mesure en cycles par unité utilisateur : 0.8 resserre les motifs, 0.02 les étire en nuages lents. Deux valeurs, comme baseFrequency="0.01 0.3", étirent le bruit sur un axe, et c’est ainsi qu’on imite le métal brossé et le veinage du bois.
Ressemble à
Usage
Ressemble à
Usage
Ressemble à
Usage
Ressemble à
Usage
Ressemble à
Usage
type="fractalNoise"
- Doux, nuageux, réparti régulièrement
- Bien pour le grain, le papier et le brouillard
- Le choix habituel pour les superpositions
type="turbulence"
- Plus net, avec des plis sombres
- Bien pour le marbre, le feu et l’eau
- Paraît chargé en superposition complète
Recette : du grain sur un dégradé
Ce que feTurbulence fait de plus utile, c’est ajouter du grain. Un dégradé numérique propre se découpe en bandes visibles, surtout s’il est sombre ; un léger bruit brise ces bandes et donne à la surface un aspect imprimé. Les étapes : créer le bruit, lui retirer sa couleur, puis le poser sur le dégradé à faible intensité.
<svg xmlns="http://www.w3.org/2000/svg" width="240" height="240">
<filter id="grain" x="0" y="0" width="100%" height="100%">
<feTurbulence type="fractalNoise" baseFrequency="0.8" numOctaves="3" stitchTiles="stitch" result="noise" />
<feColorMatrix in="noise" type="saturate" values="0" />
</filter>
<rect width="100%" height="100%" filter="url(#grain)" />
</svg>Enregistrez-le sous grain.svg ou intégrez-le en data URI, puis répétez-le en tuile dans un pseudo-élément au-dessus du dégradé.
.hero {
position: relative;
isolation: isolate;
background: linear-gradient(160deg, #0f0b1e 0%, #312e81 55%, #6d28d9 100%);
}
.hero::after {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background-image: url("/grain.svg");
background-size: 240px;
opacity: 0.12;
mix-blend-mode: overlay;
pointer-events: none;
}linear-gradient(160deg, #0f0b1e 0%, #312e81 55%, #6d28d9 100%)Recette : texture papier
Le papier, c’est un bruit basse fréquence transformé en relief par une source de lumière. feDiffuseLighting traite le bruit comme une carte de hauteurs et l’éclaire de côté, ce qui produit les douces collines d’une feuille de papier coton.
<filter id="paper" x="0" y="0" width="100%" height="100%">
<feTurbulence type="fractalNoise" baseFrequency="0.04" numOctaves="5" result="noise" />
<feDiffuseLighting in="noise" lighting-color="#f7f1ea" surfaceScale="2" result="lit">
<feDistantLight azimuth="45" elevation="60" />
</feDiffuseLighting>
<feBlend in="SourceGraphic" in2="lit" mode="multiply" />
</filter>Associez-la à des fonds blanc cassé chauds. Les fonds texture papier proposent des palettes qui lui vont.
Recette : bords déformés avec feDisplacementMap
Le bruit peut aussi déplacer des pixels. feDisplacementMap lit le bruit et décale chaque pixel de la source d’au plus scale unités, ce qui donne des traits dessinés à la main, des lettres qui fondent et de l’eau ondulante.
<filter id="wobble">
<feTurbulence type="turbulence" baseFrequency="0.02" numOctaves="2" seed="3" result="warp" />
<feDisplacementMap in="SourceGraphic" in2="warp" scale="10" xChannelSelector="R" yChannelSelector="G" />
</filter>
<text x="40" y="120" font-size="96" font-weight="700" filter="url(#wobble)">Wavy</text>Performances et comportement des navigateurs
feTurbulence fonctionne dans tous les navigateurs actuels, mais beaucoup le calculent sur le processeur, et son coût augmente avec la surface et les octaves. Une tuile de 240 pixels est calculée une fois puis répétée, ce qui coûte peu. Un filtre plein écran sur un élément vivant est recalculé à chaque repeint, ce qui peut être lent sur téléphone.
- 1
Utilisez une tuile
Rendez le bruit dans un petit SVG avec
stitchTiles="stitch"et répétez-le comme image de fond. - 2
Gardez peu d’octaves
Au-delà de 4,
numOctavesajoute rarement un détail visible à la taille d’un grain, et coûte à chaque fois. - 3
Évitez de l’animer
Animer
baseFrequencyouseedimpose un recalcul complet à chaque image. Déplacez plutôt une tuile fixe avec une transformation. - 4
Vérifiez les deux thèmes
Un grain qui paraît juste sur fond sombre peut sembler sale sur fond clair. Réglez l’opacité par thème, comme dans les dégradés en mode sombre.
Pour une version en CSS seul de la même idée, voyez la texture de bruit en CSS. Et si vous voulez du grain sans régler le moindre filtre, chaque Mark Gradiently porte son propre grain et sa matière dans sa recette, rendus en direct à la taille que vous créez.
Un Mark avec le grain intégré à sa surface. Le bruit fait partie de la recette, il garde donc la même échelle à toutes les tailles.
Les questions qu’on nous pose
Que fait feTurbulence en SVG ?
Il génère un bruit de Perlin dans un filtre SVG. Vous pouvez afficher ce bruit directement comme texture ou l’envoyer dans d’autres primitives comme feColorMatrix, feDiffuseLighting ou feDisplacementMap.
Quelle baseFrequency utiliser pour du grain ?
Essayez 0,7 à 0,9 avec le type fractalNoise et trois octaves pour un grain de film fin. Des valeurs plus basses donnent des motifs plus grands et plus doux.
Quelle différence entre fractalNoise et turbulence ?
fractalNoise est doux et régulier, bien pour le grain et le papier. turbulence a des plis plus nets et convient aux effets de marbre, de feu ou d’eau.
Pourquoi mon bruit SVG montre-t-il des raccords visibles en tuile ?
Ajoutez stitchTiles="stitch" sur feTurbulence et étendez la zone du filtre à toute la tuile avec x, y, width et height, pour que les bords correspondent et qu’aucune bordure floue n’apparaisse.
feTurbulence est-il lent ?
Il peut l’être sur de grandes surfaces ou quand il est animé, car il recalcule le bruit à chaque repeint. Une petite tuile fixe répétée en fond coûte peu.
Écrit par Gradiently
L’équipe derrière Gradiently, un outil de création construit autour des Marks : des dégradés vivants qui donnent à tout ce que vous créez votre propre signature.
Voir notre profil