Resumindo
- O feTurbulence do SVG é um primitivo de filtro que gera ruído Perlin, que você pode usar como granulado, papel, nuvens ou fonte de deslocamento.
- O atributo baseFrequency define o tamanho do ruído: valores altos, de 0,6 a 0,9, dão granulado fino, e valores baixos, de 0,01 a 0,05, dão nuvens grandes e suaves.
- type="fractalNoise" gera um ruído suave e uniforme, bom para granulado e papel, enquanto type="turbulence" gera um ruído mais agudo e ondulado, bom para mármore e água.
- Um pequeno bloco de ruído com stitchTiles="stitch", sobreposto a um degradê com baixa opacidade, acrescenta textura e esconde faixas a um custo mínimo.
- O feTurbulence é caro de calcular em áreas grandes, então renderize-o uma vez como bloco repetido em vez de animá-lo em tela cheia.
Nesta página
O SVG feTurbulence é um primitivo de filtro que preenche a sua região com ruído Perlin. Sozinho, o resultado é um campo de estática colorida; combinado com outros primitivos, vira granulado de filme, fibra de papel, nuvens, mármore ou uma fonte para deformar formas. Você o controla com cinco atributos: type, baseFrequency, numOctaves, seed e stitchTiles. A maioria das texturas dos sites modernos, inclusive o granulado dos degradês granulados, começa aqui.
<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>O que cada atributo do feTurbulence faz
typeturbulence (padrão) ou fractalNoiseEfeito
baseFrequencyValores
Efeito
numOctavesValores
Efeito
seedQualquer número, padrão 0Efeito
stitchTilesValores
noStitch (padrão) ou stitchEfeito
O baseFrequency é o que você mais vai mexer. Ele é medido em ciclos por unidade de usuário, então 0.8 aproxima os detalhes e 0.02 os estica em nuvens lentas. Dois valores, como baseFrequency="0.01 0.3", esticam o ruído num só eixo, e é assim que se imita metal escovado e veios de madeira.
Parece com
Uso
Parece com
Uso
Parece com
Uso
Parece com
Uso
Parece com
Uso
type="fractalNoise"
- Suave, parecido com nuvens, bem distribuído
- Bom para granulado, papel e névoa
- A escolha habitual para sobreposições
type="turbulence"
- Mais agudo, com vincos escuros
- Bom para mármore, fogo e água
- Fica carregado como sobreposição total
Receita: granulado sobre um degradê
A coisa mais útil que o feTurbulence faz é acrescentar granulado. Um degradê digital limpo forma listras visíveis, sobretudo os escuros; um ruído leve quebra essas listras e dá à superfície um ar de impresso. Os passos: crie o ruído, tire a cor dele e sobreponha-o ao degradê com pouca intensidade.
<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>Salve isso como grain.svg ou incorpore como data URI e depois repita o bloco num pseudoelemento acima do degradê.
.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%)Receita: textura de papel
Papel é ruído de baixa frequência transformado em relevo por uma fonte de luz. O feDiffuseLighting trata o ruído como um mapa de altura e o ilumina de um lado, o que produz as suaves colinas de uma folha de papel de algodão.
<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>Combine com fundos off-white quentes. Fundos com textura de papel tem paletas que combinam.
Receita: bordas deformadas com feDisplacementMap
O ruído também pode mover pixels. O feDisplacementMap lê o ruído e desloca cada pixel da origem em até scale unidades, o que dá linhas feitas à mão, texto derretendo e água 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>Desempenho e comportamento nos navegadores
O feTurbulence funciona em todos os navegadores atuais, mas em muitos é calculado na CPU e seu custo cresce com a área e as oitavas. Um bloco de 240 pixels é calculado uma vez e repetido, o que é barato. Um filtro em tela cheia num elemento vivo é recalculado sempre que o elemento é redesenhado, o que pode ser lento em celulares.
- 1
Repita em blocos
Renderize o ruído num pequeno SVG com
stitchTiles="stitch"e repita-o como imagem de fundo. - 2
Mantenha poucas oitavas
Um
numOctavesacima de 4 raramente acrescenta detalhe visível em tamanhos de granulado e custa a cada vez. - 3
Evite animá-lo
Animar
baseFrequencyouseedforça um recálculo completo a cada quadro. Desloque um bloco estático com uma transformação. - 4
Confira os dois temas
Um granulado que fica bom no escuro pode parecer sujo no claro. Ajuste a opacidade por tema, como em degradês para modo escuro.
Para uma versão só com CSS da mesma ideia, veja CSS noise texture. E se você quer granulado sem ajustar filtros, todo Mark do Gradiently traz o próprio granulado e material como parte da sua receita, renderizado ao vivo em qualquer tamanho que você desenhar.
Um Mark com granulado embutido na superfície. O ruído faz parte da receita, então mantém a mesma escala em todos os tamanhos.
Perguntas frequentes
O que o feTurbulence faz no SVG?
Gera ruído Perlin dentro de um filtro SVG. Você pode mostrar o ruído diretamente como textura ou passá-lo a outros primitivos, como feColorMatrix, feDiffuseLighting ou feDisplacementMap.
Que baseFrequency usar para granulado?
Tente de 0,7 a 0,9 com type fractalNoise e três oitavas para um granulado fino de filme. Valores mais baixos dão detalhes maiores e mais suaves.
Qual é a diferença entre fractalNoise e turbulence?
O fractalNoise é suave e uniforme, bom para granulado e papel. O turbulence tem vincos mais agudos e serve para efeitos de mármore, fogo ou água.
Por que meu ruído SVG tem emendas visíveis quando repetido?
Defina stitchTiles="stitch" no feTurbulence e ajuste a região do filtro para o bloco inteiro com x, y, width e height, para as bordas coincidirem e nenhuma borda suave aparecer.
O feTurbulence é lento?
Pode ser em áreas grandes ou quando animado, porque recalcula o ruído a cada redesenho. Um pequeno bloco estático repetido como fundo é barato.
Escrito pelo Gradiently
A equipe por trás do Gradiently, uma ferramenta de design criada em torno dos Marks: gradientes vivos que fazem tudo o que você cria ter a sua cara.
Ver nosso perfil