La versión corta
- SVG feTurbulence es una primitiva de filtro que genera ruido Perlin, que puedes usar como grano, papel, nubes o fuente de desplazamiento.
- El atributo baseFrequency fija el tamaño del ruido: los valores altos, entre 0,6 y 0,9, dan un grano fino, y los bajos, entre 0,01 y 0,05, dan nubes grandes y suaves.
- type="fractalNoise" crea un ruido suave y uniforme, ideal para grano y papel, mientras que type="turbulence" crea un ruido más nítido y ondulado, ideal para mármol y agua.
- Una pequeña tesela de ruido con stitchTiles="stitch", superpuesta a un degradado con baja opacidad, añade textura y oculta el banding con muy poco coste.
- feTurbulence es costoso de calcular en áreas grandes, así que renderízalo una vez como tesela en lugar de animarlo a pantalla completa.
En esta página
SVG feTurbulence es una primitiva de filtro que rellena su región con ruido Perlin. Por sí solo, el resultado es un campo de estática de colores; combinado con otras primitivas se convierte en grano de película, fibra de papel, nubes, mármol o una fuente para deformar formas. Se controla con cinco atributos: type, baseFrequency, numOctaves, seed y stitchTiles. La mayoría de las texturas de las webs modernas, incluido el grano de los degradados granulados, empiezan aquí.
<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>Qué hace cada atributo de feTurbulence
typeturbulence (por defecto) o fractalNoiseEfecto
baseFrequencyValores
Efecto
numOctavesValores
Efecto
seedCualquier número, por defecto 0Efecto
stitchTilesValores
noStitch (por defecto) o stitchEfecto
baseFrequency es el que más vas a tocar. Se mide en ciclos por unidad de usuario, así que 0.8 junta mucho los rasgos y 0.02 los estira en nubes lentas. Dos valores, como baseFrequency="0.01 0.3", estiran el ruido a lo largo de un eje, que es como se imitan el metal cepillado y la veta de la madera.
Aspecto
Uso
Aspecto
Uso
Aspecto
Uso
Aspecto
Uso
Aspecto
Uso
type="fractalNoise"
- Suave, como nubes, repartido de forma uniforme
- Bueno para grano, papel y niebla
- La elección habitual para capas superpuestas
type="turbulence"
- Más nítido, con pliegues oscuros
- Bueno para mármol, fuego y agua
- Resulta recargado como capa completa
Receta: grano sobre un degradado
Lo más útil que hace feTurbulence es añadir grano. Un degradado digital limpio se divide en franjas visibles, sobre todo los oscuros; un ruido ligero rompe esas franjas y hace que la superficie parezca impresa. Los pasos: crea el ruido, quítale el color y superponlo al degradado con poca intensidad.
<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>Guárdalo como grain.svg o incrústalo como data URI, y después repítelo en un pseudoelemento por encima del degradado.
.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%)Receta: textura de papel
El papel es ruido de baja frecuencia convertido en relieve por una fuente de luz. feDiffuseLighting trata el ruido como un mapa de alturas y lo ilumina desde un lado, lo que produce las suaves colinas de una hoja de papel de algodón.
<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>Combínalo con fondos blanco roto cálidos. Fondos con textura de papel tiene paletas que le van bien.
Receta: bordes deformados con feDisplacementMap
El ruido también puede mover píxeles. feDisplacementMap lee el ruido y desplaza cada píxel de la fuente hasta scale unidades, lo que da líneas dibujadas a mano, tipografía que se derrite y agua ondulada.
<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>Rendimiento y comportamiento en los navegadores
feTurbulence funciona en todos los navegadores actuales, pero en muchos se calcula en la CPU y su coste crece con el área y las octavas. Una tesela de 240 píxeles se calcula una vez y se repite, lo que es barato. Un filtro a pantalla completa sobre un elemento vivo se recalcula cada vez que el elemento se repinta, lo que puede ir lento en móviles.
- 1
Usa teselas
Renderiza el ruido en un SVG pequeño con
stitchTiles="stitch"y repítelo como imagen de fondo. - 2
Mantén pocas octavas
Un
numOctavespor encima de 4 rara vez añade detalle visible a tamaños de grano y cuesta siempre. - 3
Evita animarlo
Animar
baseFrequencyoseedobliga a recalcularlo todo en cada fotograma. Mueve en su lugar una tesela estática con un transform. - 4
Revisa los dos temas
Un grano que queda bien en oscuro puede verse sucio en claro. Ajusta la opacidad por tema, como en degradados para modo oscuro.
Para una versión solo con CSS de la misma idea, consulta textura de ruido en CSS. Y si quieres grano sin ajustar filtros, cada Mark de Gradiently lleva su propio grano y material como parte de su receta, renderizados en vivo al tamaño al que diseñes.
Un Mark con el grano integrado en su superficie. El ruido forma parte de la receta, así que mantiene la misma escala a cualquier tamaño.
Preguntas frecuentes
¿Qué hace feTurbulence en SVG?
Genera ruido Perlin dentro de un filtro SVG. Puedes mostrar el ruido directamente como textura o pasarlo a otras primitivas como feColorMatrix, feDiffuseLighting o feDisplacementMap.
¿Qué baseFrequency debo usar para el grano?
Prueba de 0,7 a 0,9 con type fractalNoise y tres octavas para un grano de película fino. Los valores más bajos crean rasgos más grandes y suaves.
¿Qué diferencia hay entre fractalNoise y turbulence?
fractalNoise es suave y uniforme, bueno para grano y papel. turbulence tiene pliegues más nítidos y encaja con efectos de mármol, fuego o agua.
¿Por qué mi ruido SVG muestra costuras al repetirse?
Pon stitchTiles="stitch" en feTurbulence y ajusta la región del filtro a toda la tesela con x, y, width y height, para que los bordes coincidan y no aparezca un borde difuminado.
¿feTurbulence es lento?
Puede serlo en áreas grandes o cuando se anima, porque recalcula el ruido en cada repintado. Una tesela pequeña y estática repetida como fondo es barata.
Escrito por Gradiently
El equipo detrás de Gradiently, una herramienta de diseño creada en torno a los Marks: degradados vivos que hacen que todo lo que diseñas parezca tuyo.
Ver nuestro perfil