Aprenda a utilizar el poderoso filtro primitivo feTurbulence SVG para crear sus propias texturas y efectos de distorsi贸n.

La serie de art铆culos propuesta, " Efectos de filtrado SVG " , de Sara Soueidan, un desarrollador independiente de interfaz UI / UX y autor de muchos art铆culos t茅cnicos con sede en L铆bano, se centra en el trabajo de los filtros SVG y consta de los siguientes art铆culos:
Efectos de filtrado SVG
- Efectos de filtrado SVG. Parte 1. Filtros SVG 101
- Efectos de filtrado SVG. Parte 2. Esquema de texto con feMorfolog铆a
- Efectos de filtrado SVG. Parte 3. Efecto de posterizaci贸n de imagen usando feComponentTransfer
- Efectos de filtrado SVG. Parte 4. Im谩genes a dos colores con feComponentTransfer .
- Efectos de filtrado SVG. Parte 5. Hacer coincidir el texto con la textura de la superficie con feDisplacementMap
- Efectos de filtrado SVG. Parte 6. Creando texturas con feTurbulence
feTurbulence es una de las primitivas de filtro SVG m谩s potentes. La especificaci贸n define esta primitiva de la siguiente manera:
Esta primitiva de filtro crea una imagen utilizando la funci贸n de turbulencia de Perlin. Permite la s铆ntesis de texturas artificiales como nubes o m谩rmol. [...]
La imagen resultante llenar谩 toda la subregi贸n de la primitiva de filtro para esta primitiva de filtro.
En otras palabras, la primitiva del filtro feTurbulence genera y muestra el ruido de Perlin. Este tipo de ruido es 煤til para simular varios fen贸menos naturales, como nubes, fuego y humo, y generar texturas complejas como m谩rmol o granito. Y al igual que feFlood , la primitiva feTurbulence llena el 谩rea de filtrado con nuevo contenido.
En este art铆culo, veremos c贸mo puede crear ruido usando feTurbulence y c贸mo este ruido puede usarse para distorsionar im谩genes y texto, como hicimos con la textura feDisplacementMap en el art铆culo anterior. Luego observamos c贸mo se puede usar el ruido generado en combinaci贸n con los efectos de iluminaci贸n SVG para crear una textura simple para papel rugoso.
Pero primero, revisemos feTurbulence y sus atributos y veamos c贸mo cada uno de ellos afecta el ruido generado.
Creando turbulencia y ruido fractal con feTurbulence
Cuando ten铆a la intenci贸n de escribir esta serie, decid铆 evitar lo m谩s posible los detalles t茅cnicos crudos sobre las primitivas de filtro. Es por eso que no entraremos en los detalles t茅cnicos de las funciones utilizadas para generar ruido Perlin .
Despu茅s de leer acerca de la funci贸n que subyace a la generaci贸n de ruido, descubr铆 que no me ayuda en absoluto cuando configuro una primitiva para el experimento. Al final, trabajamos con un generador de ruido aleatorio. Por lo tanto, en la mayor铆a de los casos, encontrar谩 que crear una textura ser谩 un tema de experimentaci贸n y ajuste hasta que obtenga el resultado deseado. Con el tiempo, ser谩 un poco m谩s f谩cil predecir c贸mo se ver谩 una textura.
Descubr铆 que jugar con la primitiva feTurbulencia y visualizar sus atributos era la mejor manera de conocerlos y me ayud贸 a comprender qu茅 hace cada uno de estos atributos. Por lo tanto, estamos utilizando un enfoque visual para comprender feTurbulence con algunas demostraciones interactivas.
FeTurbulence ahora genera ruido utilizando la funci贸n de turbulencia de Perlin . Tiene 5 atributos principales que controlan la funci贸n y, por lo tanto, su resultado visual:
- tipo ;
- frecuencia base ;
- numOctaves ;
- semilla
- StitchTiles .
Examinaremos c贸mo cada uno de estos atributos afecta el resultado visual sin entrar en los detalles t茅cnicos de la funci贸n. Encontrar谩 que en la mayor铆a de los casos solo necesita preocuparse por tres de estos atributos: type , baseFrequency y numOctaves .
frecuencia base
Para generar ruido, solo se requiere el atributo baseFrequency . baseFrequency afecta el tama帽o (o escala) y la granularidad del ruido generado.
El efecto de la frecuencia base se entiende mejor cuando se visualiza y anima. Es por eso que cre茅 la pr贸xima demostraci贸n. Con el control deslizante, puede cambiar el valor de la frecuencia base utilizada y ver c贸mo afecta el ruido generado en tiempo real. Notar谩 que cuando aumenta o disminuye el valor del atributo baseFrequency, el patr贸n generado permanece s贸lido, cada vez m谩s peque帽o o m谩s grande, respectivamente, y parece que est谩 escalado y sale de la fuente en la esquina superior izquierda .
La reducci贸n de los valores de frecuencia base , como 0.001, genera patrones grandes, mientras que el aumento de los valores, 0.5+, crea patrones m谩s peque帽os. Los valores comienzan en 0 (sin frecuencia == sin patr贸n) y superiores. Los valores negativos no est谩n permitidos. Como se帽ala Michael Mullani , "los valores que van desde 0.02 a 0.2 son puntos de partida 煤tiles para la mayor铆a de las texturas".
Tenga en cuenta que el ruido generado no tiene un color de fondo. Esto significa que si elimina el color de fondo blanco en el SVG, puede ver el fondo del cuerpo oscuro a trav茅s del ruido.
El atributo baseFrequency tambi茅n toma dos valores. Si especifica dos valores, el primero se usar谩 para la frecuencia base a lo largo del eje X, y el segundo corresponder谩 al eje Y. Al proporcionar dos valores diferentes, puede generar ruido vertical u horizontal, que puede usarse para implementar algunos efectos fant谩sticos, como veremos en la siguiente secci贸n
Juegue nuevamente con los valores de baseFrequency en esta demostraci贸n y observe c贸mo cambia a lo largo de los ejes X e Y si le da valores diferentes. La demostraci贸n comienza con un agradable ruido horizontal. El valor de frecuencia base x de 0.01 es relativamente peque帽o, lo que hace que el patr贸n horizontal sea grande (a medida que se estira). Si lo reduce a煤n m谩s, por ejemplo, a 0.001, ver谩 que el patr贸n horizontal se parecer谩 m谩s a las l铆neas. Pru茅balo
tipo
Como su nombre lo indica, el atributo type se usa para indicar el tipo de ruido generado por la primitiva feTurbulence . Hay dos tipos:
- turbulencia , que es el valor predeterminado;
- Ruido fractal .
fractalNoise crea patrones m谩s difusos y suaves; esta es una buena base para crear texturas gaseosas como las nubes. La turbulencia produce m谩s l铆neas que simulan ondas y, por lo tanto, son adecuadas como base para texturas fluidas.

Fig_1. Ruido como turbulencia a la izquierda y ruido fractal a la derecha.
Cambie el valor del atributo type en la siguiente demostraci贸n para ver c贸mo cambia el patr贸n creado:
numOctaves
numOctaves abreviado como "n煤mero de octava" que representa el nivel de detalle del ruido.
En m煤sica, una octava es la diferencia en tonos entre dos notas cuando una tiene una frecuencia dos veces mayor que la otra. Por lo tanto, cuanto mayor es la octava, mayor es la frecuencia. En feTurbulence , cuanto mayor es el n煤mero de octavas, m谩s detalles puede ver en el ruido que crea. Por defecto, el ruido generado es una octava, lo que significa que el valor predeterminado para el atributo numOctaves es 1.
Arrastre el control deslizante en la siguiente demostraci贸n para ver el efecto de aumentar el n煤mero de octavas en la textura generada:
Notar谩s que a partir de numOctaves = "5" el efecto de agregar octavas se vuelve casi invisible.
semilla
El grano, como se define en la especificaci贸n , es el "n煤mero inicial para el generador de n煤meros pseudoaleatorios". En otras palabras, proporciona una semilla diferente para la funci贸n aleatoria utilizada para generar nuestro ruido aleatorio.
Visualmente, ver谩 que esto afecta d贸nde y c贸mo se generan las "l铆neas onduladas". Esto tambi茅n se entiende mejor cuando ve c贸mo esto afecta el ruido generado en dos rect谩ngulos adyacentes.
Cuando se usa el mismo valor inicial para dos rect谩ngulos adyacentes, la funci贸n utilizada para crear ruido a trav茅s de los dos rect谩ngulos es continua, y esto se reflejar谩 visualmente por la continuidad de las "l铆neas onduladas" a lo largo de los bordes de estos dos rect谩ngulos.

Fig_2. La continuidad de una funci贸n que genera ruido aleatorio se puede ver en los bordes de dos rect谩ngulos usando el mismo valor inicial.
Juegue con el valor del atributo semilla en la pr贸xima demostraci贸n, vea c贸mo afecta el ruido generado y observe que el ruido es continuo a lo largo de los bordes de dos rect谩ngulos usando el mismo valor inicial.
puntada
stitchTiles se puede utilizar para crear un efecto de costura entre los "mosaicos" de ruido. El efecto de este atributo es muy similar al efecto de la semilla, lo que significa que es m谩s obvio cuando tiene dos 谩reas adyacentes (o "mosaicos") de ruido.
Como se menciona en la especificaci贸n, a veces el resultado de la generaci贸n de ruido mostrar谩 roturas claras en los bordes del mosaico. Puede decirle al navegador que intente aplanar los resultados para que los dos mosaicos aparezcan "unidos". Realmente me gusta que el atributo y su efecto se comparen con la costura.
Por defecto, no se intenta lograr transiciones suaves en el borde de las hojas que contienen una funci贸n de turbulencia, ya que el valor predeterminado para stitchTiles es noStitch . Si desea crear un efecto de costura, puede cambiar el valor a puntada .
Para comparar el resultado de stitchTiles con el resultado de la semilla , apliqu茅 el mismo valor de semilla al ruido generado en los dos rect谩ngulos en la siguiente demostraci贸n. Ya puedes ver que el ruido parece continuo entre ellos. Cambie la opci贸n stitchTiles a " on ", cambiando su valor a stitch para ver c贸mo el ruido cambia su ubicaci贸n alrededor de los bordes.
Como mencion茅 anteriormente, solo hay tres atributos, lo m谩s probable es que use type , baseFrequency y numOctaves . Entonces nos centraremos en estos tres, avanzando.
Uso del ruido feTurbulence para distorsionar el contenido
Aqu铆 comienza la diversi贸n. 驴Y c贸mo comenzamos a usar el ruido generado? De hecho, solo llenar el 谩rea de filtrado con ruido es en s铆 mismo in煤til.
En un art铆culo anterior, utilizamos feDisplacementMap para alinear un fragmento de texto con la textura de la imagen externa. Y mencionamos que feDisplacementMap usa la informaci贸n de color de una imagen para distorsionar otra. La imagen utilizada como mapa de desplazamiento puede ser cualquiera. Esto significa que puede ser una imagen externa o una imagen generada en SVG, por ejemplo, una imagen de degradado o un patr贸n ... bueno, o una textura de ruido.
En otras palabras, el ruido que generamos con feTurbulence tambi茅n se puede utilizar para distorsionar el contenido si se aplica junto con feDisplacementMap . En el siguiente ejemplo, usamos la salida de feTurbulence para compensar la imagen junto con feDisplacementMap . Utilizo el modelo de ruido horizontal al proporcionar dos valores diferentes para el atributo baseFrequency , similar a lo que hicimos anteriormente.
<svg viewBox="0 0 180 100"> <filter id="noise" x="0%" y="0%" width="100%" height="100%"> <feTurbulence baseFrequency="0.01 0.4" result="NOISE" numOctaves="2" /> <feDisplacementMap in="SourceGraphic" in2="NOISE" scale="20" xChannelSelector="R" yChannelSelector="R"></feDisplacementMap> </filter> <image xlink:href="..." x="0" y="0" width="100%" height="100%" filter="url(#noise)"></image> </svg>
La intensidad con la que la turbulencia distorsiona la imagen se indica en el atributo de venta en feDisplacementMap . Utilic茅 una gran importancia para que el efecto se viera m谩s dram谩tico.
Ahora, en base a esta sencilla aplicaci贸n, podemos abrir muchas m谩s posibilidades para combinar estos hechos:
- Los filtros SVG tambi茅n se pueden aplicar al contenido HTML;
- Los valores de baseFrequency son n煤meros y, por lo tanto, se pueden animar .
Hace poco menos de dos a帽os, Adrien Denat escribi贸 el art铆culo correcto en el que experiment贸 con un efecto similar aplicado a los botones HTML. Vamos a romper y recrear el siguiente efecto de clic de bot贸n:

Comenzaremos creando una textura de ruido. Este es el estado en el que el bot贸n est谩 distorsionado, y luego, tan pronto como lo obtengamos, animaremos el estado inicial del bot贸n a este estado distorsionado y de regreso haciendo clic.
Nuestro objetivo aqu铆 es distorsionar el bot贸n horizontalmente. Es decir Utilizaremos y ajustaremos el ruido horizontal de la demostraci贸n anterior. Su efecto de distorsi贸n en la imagen es incluso demasiado fuerte, as铆 que para empezar marcar茅 el c贸digo cambiando el valor de turbulencia de (0.01 0.4) a (0 0.2):
<filter id='noise' x='0%' y='0%' width='100%' height='100%'> <feTurbulence type="turbulence" baseFrequency="0 0.2" result="NOISE" numOctaves="2" /> <feDisplacementMap in="SourceGraphic" in2="NOISE" scale="30" xChannelSelector="R" yChannelSelector="R"></feDisplacementMap> </filter>
El efecto ha mejorado un poco, pero el bot贸n todav铆a est谩 m谩s distorsionado de lo que nos gustar铆a:

Queremos que la distorsi贸n sea menos dram谩tica. Tenga en cuenta que podemos reducir instant谩neamente el efecto de ruido cambiando el tipo de ruido de la turbulencia predeterminada a un ruido fractal m谩s suave . Tan pronto como hagamos esto, veremos que el efecto de distorsi贸n tambi茅n se suavizar谩:

Se ve mucho mejor.
Ahora que tenemos el efecto de distorsi贸n con el que estamos contentos, comenzaremos nuestra demostraci贸n con un filtro que inicialmente no hace casi nada:
<filter id='noise' x='0%' y='0%' width='100%' height='100%'> <feTurbulence type="fractalNoise" baseFrequency="0 0.000001" result="NOISE" numOctaves="2" /> <feDisplacementMap in="SourceGraphic" in2="NOISE" scale="30" xChannelSelector="R" yChannelSelector="R"></feDisplacementMap> </filter>
Vamos a aplicar este filtro a nuestro bot贸n en CSS:
button { -webkit-filter: url(#noise); filter: url(#noise); }
En este punto, el bot贸n a煤n no aparece distorsionado.
A continuaci贸n, vamos a usar el c贸digo de Adrien , aunque una versi贸n ligeramente modificada que usa GSAP para animar el valor del atributo baseFrequency a (0 0.2) y viceversa dentro de la primitiva feTurbulence haciendo clic en:
var bt = document.querySelectorAll('.button')[0], turbVal = { val: 0.000001 }, turb = document.querySelectorAll('#noise feTurbulence')[0], btTl = new TimelineLite({ paused: true, onUpdate: function() { turb.setAttribute('baseFrequency', '0 ' + turbVal.val); } }); btTl.to(turbVal, 0.2, { val: 0.2 }) .to(turbVal, 0.2, { val: 0.000001 }); bt.addEventListener('click', function() { btTl.restart(); });
Y eso es realmente todo lo que se necesita. Puedes jugar con la demo aqu铆 :
En el momento de escribir este art铆culo, la demostraci贸n funciona en Chrome y Firefox. Estos son errores en la versi贸n actual de Safari, pero el problema se resolver谩 en la pr贸xima versi贸n, ya que Safari Tech Preview muestra que la demostraci贸n funciona bien.
Aunque esto no funciona en MS Edge, el bot贸n no est谩 distorsionado en absoluto, lo que significa que la falta de soporte no afecta la capacidad de usarlo. Esto es genial porque a煤n puedes usar este efecto como una mejora . Si el efecto no es compatible, el bot贸n se ver谩 y se comportar谩 como un bot贸n normal sin efecto.
El art铆culo de Adrian incluye algunos efectos de distorsi贸n de botones m谩s que usan los mismos principios que acabamos de ver y que definitivamente vale la pena ver. Hay uno o dos buenos trucos que todos deben aprender.
Texto ondulado usando feTurbulence
Uno de mis usos favoritos de feTurbulence es el efecto de texto ondulado de Lucas Beber. En su demo, Lucas usa varias funciones de feTurbulencia :
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <filter id="squiggly-0"> <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="0" /> <feDisplacementMap id="displacement" in="SourceGraphic" in2="noise" scale="6" /> </filter> <filter id="squiggly-1"> <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="1" /> <feDisplacementMap in="SourceGraphic" in2="noise" scale="8" /> </filter> <filter id="squiggly-2"> <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="2" /> <feDisplacementMap in="SourceGraphic" in2="noise" scale="6" /> </filter> <filter id="squiggly-3"> <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="3" /> <feDisplacementMap in="SourceGraphic" in2="noise" scale="8" /> </filter> <filter id="squiggly-4"> <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="4" /> <feDisplacementMap in="SourceGraphic" in2="noise" scale="6" /> </filter> </defs> </svg>
... y aplic谩ndolos a trav茅s de CSS a un texto HTML usando animaci贸n CSS, anima de uno a otro:
@keyframes squiggly-anim { 0% { -webkit-filter: url("#squiggly-0"); filter: url("#squiggly-0"); } 25% { -webkit-filter: url("#squiggly-1"); filter: url("#squiggly-1"); } 50% { -webkit-filter: url("#squiggly-2"); filter: url("#squiggly-2"); } 75% { -webkit-filter: url("#squiggly-3"); filter: url("#squiggly-3"); } 100% { -webkit-filter: url("#squiggly-4"); filter: url("#squiggly-4"); } }
... creando as铆 un efecto ondulado.
Nuevamente, el texto utilizado es real, es decir. Est谩 disponible para b煤squeda, selecci贸n, acceso y edici贸n (utilizando el atributo contenteditable ). Echa un vistazo a la demostraci贸n en vivo , pero ten cuidado, ya que Esta demostraci贸n requiere muchos recursos y es posible que no tenga que abrir Codepen en su tel茅fono m贸vil.

Entonces, algunas conclusiones 煤tiles de esta secci贸n:
- El ruido generado por feTurbulence se puede utilizar para distorsionar el contenido SVG y HTML.
- El valor de baseFrequency puede ser animado.
- Puede reducir la cantidad de distorsi贸n ajustando los valores en frecuencia base y suavizando el ruido con el tipo de ruido fractal .
- Aunque puede animar los filtros SVG en general, generalmente se recomienda no exagerar, ya que pueden requerir muchos recursos. Intenta mantener la animaci贸n limitada a 谩reas peque帽as; cuanto mayor sea el 谩rea animada, m谩s recursos consumir谩.
La primitiva feurbulencia rara vez, si es que alguna vez, se usa sola. Casi siempre lo usan otras primitivas de filtro para lograr efectos individuales.
En esta secci贸n, lo usamos como un mapa de desplazamiento en feDisplacementMap . Veamos qu茅 m谩s puedes hacer con 茅l.
Imitaci贸n de textura natural con fe Turbulencia
Otra forma 煤til de utilizar el ruido generado por feTurbulence es simular una textura natural. Si alguna vez us贸 Complementos de generaci贸n de ruido en After Effects , es posible que ya haya encontrado esta funcionalidad y ejemplos de esto.

Fig_7. Texturas de muestra creadas en After Effects con el complemento Fractal Noise . ( Fuente )
feTurbulence genera ruido (valores aleatorios) para cada uno de los componentes R, G, B y A. Puede cambiar los valores de cada uno de estos componentes para obtener diferentes variaciones de ruido. Para simular una textura, generalmente necesitamos hacer exactamente eso: ajustar los componentes R / G / B / A (cancelar componentes, saturar otros, etc.). Para obtener el resultado deseado. En otros casos, todo lo que tenemos que hacer es arrojar algo de luz sobre esto. Literalmente
En esta secci贸n, veremos el efecto de textura de papel rugoso creado por Michael Mullany. Para crear esta textura, necesitamos iluminar la textura del ruido generado por feTurbulence usando fuentes de iluminaci贸n SVG.
Fuentes de luz en SVG
SVG proporciona convenientemente varias primitivas que puede usar para iluminar objetos o im谩genes.
Hay dos primitivas de filtro que se utilizan para indicar el tipo de luz que desea:
- feDiffuseLighting , que indica luz indirecta de una fuente externa, y se utiliza mejor para los efectos de la luz solar;
- feSpecularLighting , que define la luz secundaria que regresa de las superficies reflectantes.
Ambas primitivas iluminan un objeto o imagen usando el canal alfa de esta imagen como un mapa del terreno. Los valores transparentes permanecen planos, mientras que los valores opacos se elevan para formar picos que se iluminan m谩s notablemente.
En otras palabras, el filtro de fuente de luz utiliza el canal alfa de entrada para obtener informaci贸n de profundidad: las 谩reas con mayor opacidad se elevan hacia el observador y las 谩reas con menos opacidad se alejan de 茅l. Esto significa que el valor alfa de un p铆xel en la entrada se usa como la altura de ese p铆xel en la dimensi贸n z, y el filtro usa esta altura para calcular una superficie virtual que reflejar谩 una cierta cantidad de luz de la fuente de luz. 隆Esto es algo muy poderoso!
Ambos tipos de luz aceptan un atributo llamado surfaceScale , que es pr谩cticamente un factor de 铆ndice z. A medida que aumenta este valor, las "pendientes" de la textura de la superficie se vuelven m谩s pronunciadas.
"Dado que feTurbulence genera un canal alfa lleno de valores de ruido de 0 a 1, forma una buena variable de la superficie Z que crea deslumbramiento cuando lo iluminamos". 鈥擬ichael Mullany
Despu茅s de decidir el tipo de luz, debe elegir una fuente de luz. Hay tres tipos de fuentes de luz en SVG:
- feDistantLight : es una fuente de luz remota que est谩 tan lejos como se desee y, por lo tanto, se determina en t茅rminos de su 谩ngulo de inclinaci贸n desde el objetivo. Esta es la forma m谩s adecuada de representar la luz solar.
- fePointLight : representa el punto de luz que emana de un punto espec铆fico, representado como una coordenada tridimensional X / Y / Z. Parece una fuente de luz dentro de una habitaci贸n o dentro de una escena.
- feSpotLight : este es un foco que se comporta como un punto de luz, pero su haz se puede reducir a un cono y la luz puede girar hacia otros objetivos.
Cada una de estas tres fuentes de luz tiene sus propios atributos, que se utilizan para ajustar la luz que genera al indicar la ubicaci贸n de la fuente en el espacio 3D. Los atributos est谩n m谩s all谩 del alcance de este art铆culo, pero puede obtener m谩s informaci贸n sobre ellos en esta especificaci贸n .
Para crear y aplicar un efecto de iluminaci贸n, debe adjuntar una fuente de luz al tipo de iluminaci贸n. Por lo tanto, comienza eligiendo el tipo de iluminaci贸n que desea y luego elige la fuente de la que proceder谩. Y luego, finalmente, debe especificar el color de su iluminaci贸n. La propiedad de color de iluminaci贸n se utiliza para determinar el color de la fuente de luz para feDiffuseLighting y feSpecularLighting .
Habiendo considerado los conceptos b谩sicos de las fuentes de iluminaci贸n, ahora pasamos a nuestro ejemplo.
Para la textura del papel rugoso, utilizaremos la luz solar. Esto significa que utilizaremos iluminaci贸n difusa blanca que proviene de una fuente distante. Traducido al c贸digo, nuestra luz se ve as铆:
<feDiffuseLighting lighting-color="white" surfaceScale="2" in=".." result=".."> <feDistantLight azimuth="45" elevation="60" /> </feDiffuseLighting>
Los atributos de acimut y elevaci贸n determinan la posici贸n de la fuente de luz en el espacio tridimensional. Hay un art铆culo de Rafael Pons que es simplemente sorprendente al explicar estos dos conceptos de una manera simple y f谩cil de entender, junto con ilustraciones hermosas y convenientes que ayudan con la explicaci贸n. Recomiendo mirarlo.
Ahora que tenemos la luz, necesitamos crear nuestro ruido para iluminarlo con esta luz. Dividiremos la demostraci贸n en etapas para descubrir c贸mo se crea.
Necesitamos comenzar en alguna parte, y comenzaremos generando ruido b谩sico aleatorio como la base de nuestra textura:
<feTurbulence baseFrequency='0.04' result='noise' />
Nuestro ruido se ve as铆:

Luego arrojamos nuestra luz sobre 茅l, y luego lo tomamos desde all铆:
<feTurbulence baseFrequency='0.04' result='noise' /> <feDiffuseLighting in='noise' lighting-color='white' surfaceScale='2'> <feDistantLight azimuth='45' elevation='60' /> </feDiffuseLighting>
La iluminaci贸n brillante de nuestro ruido nos da la siguiente textura:

Este no es el resultado de la textura que estamos buscando. Lo primero que notamos aqu铆 es la presencia de muchas l铆neas afiladas en la textura. Queremos deshacernos de ellos porque no hay l铆neas afiladas en la superficie del papel. Necesitamos suavizar estas l铆neas. Esto se puede hacer cambiando el tipo de ruido generado a fractalNoise :
<feTurbulence type="fractalNoise" baseFrequency='0.04' result='noise' /> <feDiffuseLighting in='noise' lighting-color='white' surfaceScale='2'> <feDistantLight azimuth='45' elevation='60' /> </feDiffuseLighting>
Esto elimina todos estos bordes afilados y alineados de nuestra textura:

Ahora estamos un paso m谩s cerca de nuestra textura de papel rugosa.
Sin embargo, la textura anterior no es lo suficientemente rugosa. Carece de la necesaria "aspereza". Un aumento en el n煤mero de piezas peque帽as deber铆a hacerlo m谩s grueso. Para hacer esto, aumentaremos el valor de numOctaves . Descubrimos que aproximadamente 5 es un gran n煤mero para obtener el nivel deseado de rugosidad:
<feTurbulence type="fractalNoise" baseFrequency='0.04' numOctaves="5" result='noise' /> <feDiffuseLighting in='noise' lighting-color='white' surfaceScale='2'> <feDistantLight azimuth='45' elevation='60' /> </feDiffuseLighting>
Y nuestra textura de papel ahora se ve as铆:

Genial
Puedes jugar con la demo aqu铆:
Esta demostraci贸n funciona en todos los principales navegadores, incluido MS Edge.
Si lo desea, puede ajustar el efecto un poco m谩s, jugando con la fuente y la distancia de la luz. Por ejemplo, disminuir la elevaci贸n de una fuente de luz de 60 a 40 deber铆a aumentar el contraste entre las peque帽as colinas en la textura. Entonces la textura se ver谩 m谩s o menos as铆:

Recomiendo jugar con los valores de los atributos de las fuentes de luz y ruido y ver c贸mo afectan la textura resultante.
Conclusi贸n
La primitiva feTurbulence es una de las operaciones SVG m谩s interesantes y poderosas. En combinaci贸n con otras primitivas y animaciones, es capaz de crear efectos, texturas e interacciones realmente interesantes y atractivos.
Supongo que feTurbulence es uno de esos filtros con los que le gustar铆a experimentar o analizar el c贸digo de otras personas para estudiarlo mejor. Sin embargo, creo que adivino c贸mo se ver谩 la textura despu茅s de un tiempo. Y dado que podemos hacer mucho con una sola textura, si la usa con otras primitivas, hay casi innumerables efectos posibles que puede crear con ella. Le recomiendo que mire el trabajo de otras personas y lo desarme para aprender mejor.
Yoksel est谩 experimentando con los filtros SVG de Codepen despu茅s de hablar sobre los filtros SVG hace unos meses. Por lo tanto, puede encontrar bastantes efectos para analizar y aprender en su perfil Codepen.

Fig_13. Uno de los 煤ltimos experimentos de Yoksel con filtros SVG usando feTurbulence .
Espero que este art铆culo te haya inspirado y haya abierto una nueva puerta a tu imaginaci贸n para que puedas ver lo que puedes hacer con los filtros SVG.
En el 煤ltimo art铆culo de esta serie, compartir茅 algunos recursos y herramientas adicionales para ayudarlo a avanzar con los filtros SVG y comenzar a construir por su cuenta. Qu茅date con nosotros